【PowerShellを始める】その8)スクリプティングと自動化

変更履歴

Rev. 0.7 : 2025年06月12日
新規作成

1 はじめに

【PowerShellを始める】第8回目は、PowerShellのスクリプトと自動化についてです。

PowerShellスクリプトとは、Windows PowerShellで実行するコマンドをファイルに記述して、
まとめて実行できるようにする仕組みです

手動で行っていた複雑な処理を自動化し、作業効率を向上させることができます。

PowerShellって、従来のWindowsコマンドプロンプトやLinuxなどUNIX系のBashなどと
比べるとどうも難しい。

とにかく、コマンドレット(cmdlet)やオブジェクト(object)っていうのが、 よくわからない。
訳のわからない演算子もたくさんでてくる。
関数も、訳のわからない属性設定がいっぱいある。

それじゃー、わかるところを始めようとしたのは、この【PowerShellを始める】シリーズです。
本シリーズは、PowerShellにどのような要素があるのかをまとめただけであり、
実際にPowerShellを利用する際のインデックスであることを目的に構成しました。

【PowerShellを始める】シリーズの全容は、
最終章(6章 【PowerShellを始める】全容)に示します。
よければ、ご覧ください。

PowerShell個別の問題については、適宜記事にしていきたいと思っています。

2 PowerShellスクリプトファイル

まずは、PowerShellスクリプトの記述フォーマットについてから。

2.1 ファイル名拡張子

PowerShellスクリプトファイルの拡張子は、”.ps1”です。

2.2 基本的なフォーマット

2.2.1 コメントの書き方

PowerShellでは、読みやすくするために、コードに注釈を付けたり、
構造化したりするためのコメントを記述することができます。
コメントについて | Learn / PowerShell

【単一行コメント】
#”から始まる行は、コメント行です。
#”の位置から行の終わりまでがコメントとして扱われます。
コメントは、行の途中からつけることもできます。

# これは単一行コメントです
Write-Output "Hello World"     # ここもコメント

【複数行コメント】
複数の行に渡って”<#”と”#>”で囲まれた範囲は、コメント扱いとなります。

<#
   これは複数行コメントです
   複数行にわたって説明を書くときに便利です
 #>

2.2.2 コマンド継続行

PowerShellでは、
行末にバックスラッシュ””(エスケープ文字)を置くことで行を継続できます。

Write-Output "これは長い文字列で"
             "複数行に分けて書いています"

ただし、バッククォートは見づらくなることがあるので、
以下のように括弧やパイプラインを使う方法も推奨されています。

# 括弧で囲む方法(自動的に継続行と認識される)
Write-Output (
    "これは長い文字列で" +
    "複数行に分けて書いています"
)
 
# パイプラインで継続
Get-Process |
    Where-Object { $_.CPU -gt 100 } |
    Sort-Object CPU

2.2.3 変数

変数は”$”で始まります。
変数名は、英数字と”_”(アンダースコア)が使えます。

$abc
$var_example

2.2.4 インデントと改行

一般的にスペース2~4つでインデントします。

ブロック構造(ifforeachfunctionなど)の中は、インデントをつけて可読性を上げます。

if ($true) {
    Write-Output "Trueです"
}
else {
    Write-Output "Falseです"
}

2.2.5 関数の書き方

下に関数の一例を示します。

function Get-Greeting {
    param (
        [string]$Name
    )
    Write-Output "Hello, $Name!"
}

2.2.6 その他

コマンドレット名は、「動詞-名詞」の形式にするのが推奨されています(PowerShell標準に準拠)。
変数や関数名は、キャメルケース(例: $myVariable、Get-Data)が多いです。

スクリプトの先頭にスクリプトの説明や作成者情報をコメントで書くことが多い。

2.3 特殊文字

PowerShellでは、標準文字セットの一部ではない文字を表すために使用される
一連の特殊文字シーケンスがサポートされています。
これらのシーケンスは、一般にエスケープシーケンス(escape sequence)と呼ばれています。
about_Special_Characters | Learn / PowerShell

エスケープシーケンスは、バックスラッシュ””で始まり、大文字と小文字が区別されます。
バックスラッシュ文字は、escape文字とも呼ばれます。

エスケープシーケンスは、二重引用符()文字列に含まれている場合にのみ解釈されます。

【備考: Unicode文字 'u(x)】
Unicodeエスケープシーケンス(
u{x})を使用すると、

コードポイントの16進数表現で任意の Unicode 文字を指定できます。

これには、基本多言語平面(>0xFFFF)の上にあるUnicode文字が含まれ、
(`u{1F44D})文字などの絵文字が含まれます。

Unicodeエスケープシーケンスでは、少なくとも1つの16進数が必要であり、
最大6桁の16進数がサポートされます。
シーケンスの最大16 進数の値は、10FFFFです。
【Unicode】Unicodeについて整理してみた

次の使用例は、上下向き矢印””記号を出力します。