バッチ処理をすると、スクリプトがどこにあるかを知りたくなります。
PowerShell Vertion 3以降であれば、自動変数の「$PSScriptRoot」に.ps1がどこに置かれているのかの情報が格納されています。
PowerShell Vertion 2以前は、この自動変数が無いので「Split-Path $MyInvocation.MyCommand.Path -Parent」で取得します。
test.ps1
# for PS v3 if( $PSVersionTable.PSVersion.Major -ge 3 ){ echo "Data from `$PSScriptRoot" $ScriptDir = $PSScriptRoot } # for PS v2 else{ echo "Data from `$MyInvocation.MyCommand.Path" $ScriptDir = Split-Path $MyInvocation.MyCommand.Path -Parent } echo $ScriptDir |
Windows 8.1 update 1
PS D:\test> .\test.ps1 Data from $PSScriptRoot D:\test |
Windows Server 2008 R2
PS E:\test> .\test.ps1 Data from $MyInvocation.MyCommand.Path E:\test |
ちなみに、
$MyInvocation.MyCommand.Name
には、スクリプトファイル名が
$MyInvocation.MyCommand.Path
には、スクリプトファイル名のフルパスが格納されています。
Copyright © MURA All rights reserved.