PowerShell
スクリプトの実行
変数
PowerShellでは変数を利用することができます.変数は「$変数名
」で参照します.まだ「$NAME
」変数は定義されていないので何も表示されないことを確認します.その後,変数に文字列を代入し,その変数の内容を含む文字列を表示します.
PS C:\Users\rinsaka\Documents> Write-Output "Hello $NAME!" ⏎ Hello ! PS C:\Users\rinsaka\Documents> $NAME = "Shiro" ⏎ PS C:\Users\rinsaka\Documents> Write-Output "Hello $NAME!" ⏎ Hello Shiro! PS C:\Users\rinsaka\Documents>
変数を削除するには「Remove-Variable
」を利用します.このとき,変数名の前に $
を付ける必要がないことに注意してください.
PS C:\Users\rinsaka\Documents> Remove-Variable NAME ⏎
PS C:\Users\rinsaka\Documents>
スクリプト
次はスクリプトの実行に挑戦します.「ps」ディレクトリを削除してしまったので,もう一度作成して,そのディレクトリに移動します.
PS C:\Users\rinsaka\Documents> New-Item -Name "ps" -ItemType "Directory" ⏎ ディレクトリ: C:\Users\rinsaka\Documents Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2025/07/28 19:06 ps PS C:\Users\rinsaka\Documents> Set-Location ps ⏎ PS C:\Users\rinsaka\Documents\ps>
次にスクリプトを作成します.メモ帳やVisual Studio Codeなどのテキストエディタで次の内容を作成し,ファイル名の拡張子には「.ps1」を指定して保存してください.(拡張子 .ps はポストスクリプトで,.ps1 は当初 PowerShell のバージョン1 を意味したそうですが,後にPowerShellのバージョンが上がっても拡張子は変更しなかったそうです.)
hello.ps1
Write-Output "Hello $env:UserName!"
$NAME = Read-Host "Input your name"
Write-Output "Hello $NAME!"
Write-Output "$(Get-Date)"
Pause
ファイルの中身が正しく保存されているかどうかを確認します.
PS C:\Users\rinsaka\Documents\ps> Get-Content hello.ps1 ⏎
Write-Output "Hello $env:UserName!"
$NAME = Read-Host "Input your name"
Write-Output "Hello $NAME!"
Write-Output "$(Get-Date)"
Pause
PS C:\Users\rinsaka\Documents\ps>
PowerShellではスクリプトの実行ポリシーがスコープごとに設定されています.その設定を確認します.すると現在のユーザ (CurrentUser) は未定義 (Undefined) となっていました.この場合,スクリプトを実行することができません.
PS C:\Users\rinsaka\Documents\ps> Get-ExecutionPolicy -List ⏎ Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine Undefined PS C:\Users\rinsaka\Documents\ps>
スクリプトの実行ポリシーを変更して,CurrentUser のスコープを RemoteSigned に変更します.
PS C:\Users\rinsaka\Documents\ps> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser ⏎
PS C:\Users\rinsaka\Documents\ps>
再び実行ポリシーを確認します.これでスクリプトを実行できるようになりました.
PS C:\Users\rinsaka\Documents\ps> Get-ExecutionPolicy -List ⏎ Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser RemoteSigned LocalMachine Undefined PS C:\Users\rinsaka\Documents\ps>
スクリプトを実行するにはファイル名の前に .\
を入力します.この「.\
」はカレントディレクトリを意味しています.なお,「..\
」は1階層上のディレクトリでした.
PS C:\Users\rinsaka\Documents\ps> .\hello.ps1 ⏎ Hello rinsaka! Input your name: Shiro ⏎ Hello Shiro! 07/28/2025 19:13:36 続行するには、Enter キーを押してください...: PS C:\Users\rinsaka\Documents\ps>
変数を利用する簡単なスクリプトを作成します.
name.ps1
$name = "Taro"
Write-Output $name
PS C:\Users\rinsaka\Documents\ps> ./name.ps1 ⏎
Taro
PS C:\Users\rinsaka\Documents\ps>
条件分岐は次のような感じになります.なお,-ge
は以上 (Grater than or Equal to) を意味します.
age.ps1
$age = 20
if ($age -ge 18) {"adult"} else {"underage"}
PS C:\Users\rinsaka\Documents\ps> ./age.ps1 ⏎
adult
PS C:\Users\rinsaka\Documents\ps>
Windows 11 に標準搭載されている PowerShell 5.x では文字コード周りの仕様が古いため,日本語文字を表示しようとすると文字化けする可能性があります.保存する際の文字コードに「UTF-8(BOM 付き)」を指定することが文字化け回避のポイントになります.一方で,PowerShell 7 では文字コード周りの問題が改善されているので,BOM を付けなくとも正しく表示できます.
age2.ps1
$age = 20
if ($age -ge 18) {"成人"} else {"未成年"}
PS C:\Users\rinsaka\Documents\ps> ./age2.ps1 ⏎
成人
PS C:\Users\rinsaka\Documents\ps>
配列も利用してみましょう.
fruits.ps1
$items = @("apple", "banana", "orange")
foreach ($item in $items) {
Write-Output "果物:$item"
}
PS C:\Users\rinsaka\Documents\ps> ./fruits.ps1 ⏎
果物:apple
果物:banana
果物:orange
PS C:\Users\rinsaka\Documents\ps>