PowerShell 5でdot-filesというディレクトリー以下にあるファイルを処理するスクリプトを書いていたのですが、ForEach-Objectを呼ぶところで下記のようなエラーが発生してしまいます。
出力例:
PS C:\Users\igrep\dot-files> .\install.ps1
.bundle
ForEach-Object : 引数 '.bundle' を受け入れる位置指定パラメーターが見つかりません。
発生場所 C:\Users\igrep\dot-files\install.ps1:20 文字:47
+ Get-ChildItem "$wd/dot-files/" -Filter '.*' | ForEach-Object {
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [ForEach-Object]、ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.ForEachObjectCommand
※追記: 出力結果に「.bundle」と含まれているのは、問題のdot-filesディレクトリーに、.bundleというファイルが含まれているからのようです。
どうも構文が意図しない解釈のされ方をされているみたいなのですが、どのようにして直せばいいか教えていただけないでしょうか?
以下が問題のスクリプト(抜粋)です。
Get-ChildItem "C:\Users\igrep\dot-files\dot-files\" -Filter '.*' | ForEach-Object {
$path = $_.Name
echo $path
if (Test-Path -Path $homeDir/[System.IO.Path]::GetDirectoryName($path)) {
echo WARNING: $path already exists!
} else {
echo aaa
}
}
以下がPowerShellのバージョン情報です。
Name Value
---- -----
PSVersion 5.1.15063.296
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.15063.296
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1