PowerShell スクリプト

基本

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

スクリプトの利用を許可する

PS> Get-ExecutionPolicy
Restricted
PS> Set-ExecutionPolicy RemoteSigned
PS> Get-ExecutionPolicy
RemoteSigned

スクリプトを実行する

  • コマンド完了後、画面を閉じる
    powershell.exe -File C:\test.ps1
  • コマンド完了後、画面を閉じない
    powershell.exe -NoExit -File C:\test.ps1

スクリプトの実行時間を測定する

PS> Measure-Command {C:\test.ps1}

デバッグ実行を行う

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

スクリプト記述

実行するPowerShellの最小バージョンを限定する

  • スクリプト内に以下の記述(タグ)を追加する
    #requires -version 2.0    <- 2.0以降のバージョンでのみ実行を許可する
    • 任意の行に記述できる

宣言していない変数の参照を禁止する

Set-PSDebug -Strict    <- VBScriptの"Option Explicit"と似ているが厳密には違う
  • 設定の取り消し
    Set-StrictMode -Off

コメント

パラメータを受け取る

スクリプト本体のパラメータ

  • test.ps1 -foo "abc" -bar "xyz" -baz
    param (
          [string]$foo
        , [string]$bar
        , [switch]$baz
    )
    • [string] : 文字列を受け取るパラメータ、[switch] : オン/オフを判定するパラメータ。指定するとオン。

スクリプト内関数のパラメータ

Function Set-Version {
    param (
        [string]$version
    )

    "Version : $version"
}

Set-Version -version "1.0"
  • 使い方はスクリプト本体と同じ。Function{}の中にparam()構文を書けば実装できる。

必須入力チェック

param (
    [string]$foo
)

if (-not $foo) {
    throw(foo required.)
}

他のスクリプトをインクルードする

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

Pause(ポーズ)を実装する

  • 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 ""
    }

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-03-22 (木) 15:35:00 (2338d)