入門編:コマンドレットと基本文法
PowerShell の中核となるコマンドレットの命名規則、パラメータの扱い方、エイリアス、および文字列やコメントなどの基本文法を解説します。
コマンドレットの命名規則(動詞-名詞)
PowerShell のコマンドは「コマンドレット(Cmdlet)」と呼ばれ、すべて 動詞-名詞 の形式で統一されています。
動詞は操作の種類を示し、名詞は操作対象を示します。名詞部分は単数形を使用するのが原則です。
Get-Process: プロセスを取得するStart-Service: サービスを開始するStop-Service: サービスを停止するNew-Item: 新しいファイルやフォルダを作成するRemove-Item: ファイルやフォルダを削除する
PowerShell で使用できる標準的な動詞は定められており、Get-Verb コマンドレットで一覧を確認できます。勝手な動詞を使わずに承認された動詞を使用することで、未知のコマンドであっても直感的に用途を予測できます。
パラメータと引数の指定方法
コマンドレットに与えるパラメータ(引数)には、いくつかの指定方式が存在します。
» 名前付きパラメータ
ハイフン - に続けてパラメータ名を指定し、その後に値を記述します。パラメータの順序は自由です。
Get-ChildItem -Path "C:\workspace" -Filter "*.txt"
» 位置パラメータ
パラメータ名を省略し、定義された順番通りに値を直接渡す方式です。例えば Get-ChildItem の第1引数は -Path であるため、パラメータ名を省略できます。
Get-ChildItem "C:\workspace"
» スイッチパラメータ
値を必要とせず、指定するだけでオンになるフラグのようなパラメータです。
# -Recurse(再帰的に検索)と -Force(隠しファイルを含める)を指定
Get-ChildItem -Path "C:\workspace" -Recurse -Force
» WhatIf と Confirm
システムに変更を加えるコマンドレットの多くは、安全にテストするための -WhatIf パラメータと、実行前に確認を求める -Confirm パラメータを備えています。
# 実際に削除せず、何が削除されるかシミュレーションする
Remove-Item -Path "./temp/*" -Recurse -WhatIf
エイリアス(別名)の役割
PowerShell には、Unix シェルやコマンドプロンプトの利用者が違和感なく操作できるように、短い別名(エイリアス)が多数登録されています。
| エイリアス | 正式なコマンドレット名 | 主な役割 |
|---|---|---|
ls, dir | Get-ChildItem | ファイルやフォルダの一覧表示 |
cp, copy | Copy-Item | ファイルやフォルダのコピー |
rm, del | Remove-Item | ファイルやフォルダの削除 |
cat, type | Get-Content | ファイル内容の読み込み |
where, ? | Where-Object | データの条件絞り込み |
select | Select-Object | プロパティの選択・抽出 |
日常の対話的なターミナル操作ではエイリアスを使うと素早く入力できます。一方、保存するスクリプトファイル(.ps1)では、可読性と移植性を高めるために必ず正式なコマンドレット名を記述することが推奨されます。
文字列とクォートの使い分け
PowerShell における文字列の表現には、シングルクォート(')とダブルクォート(")の2種類があります。
» シングルクォート(リテラル文字列)
囲まれた文字列をそのまま文字として解釈します。変数や特殊記号は展開されません。
$name = "Taro"
Write-Output 'Hello, $name'
# 出力結果: Hello, $name
» ダブルクォート(展開文字列)
文字列内の変数をその値に自動展開します。プロパティや式を展開したい場合は $() というサブ式構文を使用します。
$name = "Taro"
$user = [PSCustomObject]@{ Name = "Hanako"; Age = 20 }
Write-Output "Hello, $name"
# 出力結果: Hello, Taro
Write-Output "Name: $($user.Name), Age: $($user.Age)"
# 出力結果: Name: Hanako, Age: 20
エスケープシーケンスとコメント
特殊な制御文字の入力やコード内の注釈記述について説明します。
» エスケープ文字(バッククォート)
PowerShell のエスケープ文字は円記号(\)ではなく、バッククォート(`)を使用します。
# 改行(`n)とタブ(`t)の挿入
Write-Output "Line 1`n`tLine 2 indented"
# 変数展開の無効化(ドル記号を文字として出力)
Write-Output "Value is `$name"
» コメントの記述
単一行のコメントには # を使用し、複数行にまたがるコメントには <# ... #> を使用します。
# これは単一行コメントです
$port = 8080
<#
これは複数行コメントです。
関数の概要や注意点を詳しく
記録するために利用します。
#>