神戸学院大学 経営学部 林坂ゼミ

CLI 入門トップページ

« 戻る 次へ »

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>

目次に戻る