*PowerShell スクリプト [#h29b33cd]
#enull{{
&tag(PowerShell,スクリプト,ps1);
}}
#contents

**基本 [#nadd145c]
-スクリプトの拡張子は[''.ps1'']。バージョンが1.0でも2.0でも拡張子はps1のまま。
-既定ではスクリプトの実行が許可されていないため、許可してやる必要がある。

**スクリプトの利用を許可する [#v986ec65]
 PS> Get-ExecutionPolicy
 Restricted
 PS> Set-ExecutionPolicy RemoteSigned
 PS> Get-ExecutionPolicy
 RemoteSigned

**スクリプトを実行する [#i7035fe9]
-コマンド完了後、画面を閉じる
 powershell.exe -File C:\test.ps1
-コマンド完了後、画面を閉じない
 powershell.exe -NoExit -File C:\test.ps1

**スクリプトの実行時間を測定する [#y20a1ab7]
 PS> Measure-Command {C:\test.ps1}

**デバッグ実行を行う [#w2fd2daf]
 PS> Set-PSDebug -Step    <- この指定を行った後にスクリプトを実行するとデバッグ実行される

*スクリプト記述 [#v6f6f803]
**実行するPowerShellの最小バージョンを限定する [#x7fad81e]
-スクリプト内に以下の記述(タグ)を追加する
 #requires -version 2.0    <- 2.0以降のバージョンでのみ実行を許可する
--任意の行に記述できる

**宣言していない変数の参照を禁止する [#b900185b]
 Set-PSDebug -Strict    <- VBScriptの"Option Explicit"と似ているが厳密には違う
-設定の取り消し
 Set-StrictMode -Off

**[[コメント>PowerShell スクリプト コメント]] [#je6a77e3]
**パラメータを受け取る [#n415f70f]
***スクリプト本体のパラメータ [#n7edefc9]
-test.ps1 -foo "abc" -bar "xyz" -baz
 param (
       [string]$foo
     , [string]$bar
     , [switch]$baz
 )
--[string] : 文字列を受け取るパラメータ、[switch] : オン/オフを判定するパラメータ。指定するとオン。
***スクリプト内関数のパラメータ [#lc1bdb4f]
 Function Set-Version {
     param (
         [string]$version
     )
 
     "Version : $version"
 }
 
 Set-Version -version "1.0"
-使い方はスクリプト本体と同じ。Function{}の中にparam()構文を書けば実装できる。

***必須入力チェック [#fd96df95]
 param (
     [string]$foo
 )
 
 if (-not $foo) {
     throw(foo required.)
 }

**他のスクリプトをインクルードする [#ma7042a1]
 . <スクリプトファイル>
-例(以下の2つのスクリプトを使う)
--test.ps1
 Function test {
     Write-Host $a
 }
--test2.ps1
 . .\test.ps1
 
 $a = "foobar"
 test
--実行
 PS> .\test2.ps1
 foobar
---別々のスクリプトファイルに分かれていても、インクルードした場合は1つのスクリプトとして実行される
---そのため、上の例でいう変数aのスコープはglobalではなく、local(既定値)で構わない

**Pause(ポーズ)を実装する [#l5eaea94]
-PowerShell には、cmd.exe で利用できるような Pause コマンドレットが無いため、自身で実装する必要がある
 function Pause ($Message = "Press any key to continue...") {
     Write-Host -NoNewLine $Message
 
     $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
 
     Write-Host ""
 }
--参照 : http://blogs.msdn.com/b/powershell/archive/2007/02/25/pause.aspx

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS