Powershellについて (1)
Powershellの扱い方にも慣れてきたので、いろいろとトライアル&エラーしています。
今回は連想配列によるパラメータの記述に関してです。
下の例のように、連想配列はコマンドレットの引数として直接渡すことができます。
$itemParams = @{ Name = "test1.txt" Path = "$env:USERPROFILE\Desktop" ItemType = "file" } New-Item @itemParams
複数のファイルを作成する場合に、連想配列を用いてどう記述すればよいのでしょうか。
下の例のように、単純にパラメータを記述すると当然エラーになります。
$itemParams = @{ Name = @("test1.txt", "test2.txt") Path = "$env:USERPROFILE\Desktop" ItemType = "file" } New-Item @itemParams New-Item : パラメーター 'Name' で必要とされる型 'System.String' に 'System.Object[]' を変換できません。指定されたメソッドはサポートされていません。 発生場所 行:1 文字:10 + New-Item @itemParams + ~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [New-Item]、ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.NewItemCommand</span>
やはりパラメータ定義を別ブロックに分ける必要があるのでしょうか…。
あまりエレガントとは言えないですが、下の例のように記述することで2つのファイルを作成することができました。
$itemParams = @{ Path = "$env:USERPROFILE\Desktop" ItemType = "file" } $fileNames = @("test1.txt", "test2.txt") foreach ($fileName in $fileNames) { $itemParams.Name = $fileName New-Item @itemParams }
連想配列を使うと一目で引数を把握することができるので便利ですね。