powershellのforeachの動作
powershellにおける"foreach"の動作について2点質問です。
動作環境はWindows7 SP1。
powershellのバージョンは以下の通りです。
PS C:\> $PSVersionTable
Name Value
---- -----
CLRVersion 2.0.50727.5472
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
PS C:\>
【サンプル1】
test1.ps1
--------------------
$WEEK = "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
foreach ($x in $WEEK) {
if ( $x -notmatch '^T' ) { continue }
$x
}
--------------------
実行結果は
Tuesday
Thursday
となります。
【サンプル2】
test.lst
--------------------
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
--------------------
test2.ps1
--------------------
Get-Content ".\test.lst" | foreach {
$x = $_
if ( $x -notmatch '^T' ) { continue }
$x
}
--------------------
実行すると、何も出力されていません。
"notmatch"を"match"に変えて実行してみると、
Sunday
Monday
と出力されます。
どうも"continue"でループを抜けてしまっている様です。
■質問1
サンプル1とサンプル2、やっている内容は同じだと思っていたのですが、何故こういう違いが起こるのでしょうか?
また、サンプル1の"foreach"を"ForEach-Object"に変えて実行すると、
「式またはステートメントのトークン 'in' を使用できません。」
とエラーになってしまいます。
aliasを切ってあるはずなのですが・・・
PS C:\> alias foreach
CommandType Name Definition
----------- ---- ----------
Alias foreach ForEach-Object
PS C:\>
■質問2
同じコマンドを実行しているはずなのに、こういう事が起こるのでしょうか?
よろしくお願いします。
お礼
まさにこの曲です!!ありがとうございました。