パイピングまたはその他の種類のインライン表記を使用して、ハッシュ テーブル内の特定の値を結果に直接「選択」し、他の値を変更または設定したいと考えています。
ハッシュ表
次のようなハッシュテーブル(率直に言って、オブジェクトのように使用されています)から始めています。
>$hash
Name Value
---- -----
System server-1
Job Microsoft.PowerShell.Commands.PSWmiJob
Result
Select-Object コマンドレット (またはそれに類するもの) を使用して、特定のプロパティの値を設定し、他のプロパティを通過させる方法はありますか? 私はこれで終わりたいと思います:
>$hash
Name Value
---- -----
System server-1
Job Microsoft.PowerShell.Commands.PSWmiJob
Result Good
インラインにする必要がない/したくない場合は、次の値を設定するだけですResult
。
$hash.Result = "good"
インライン ソリューションの場合、次のForeach-Object
ように常に使用できます。
$hash | Foreach-Object {@{System=$_.System;Job=$_.Job;Result="Good"}}
または、部分式で $hash を直接参照するだけです。
${@{System=$hash.System;Job=$hash.Job;Result="Good"}}
ただし、1 つのハッシュ テーブルのみを処理している場合に使用するのは無意味に思えます。Foreach-Object
とにかく通過させたいプロパティを 2 回言及するのは非常に冗長であり、$hash
変数が$aSignificantlyLongerHashTableVariableName
.
Powershell オブジェクトを使用していた場合...
このようなオブジェクトを使用していた場合:
>$obj
System Job Result
------ --- ---
server-1 Microsoft.PowerShell.Commands.PSWmiJob
select-object
次のようにコマンドレットを使用します。
>$obj | Select-Object System, Job, @{Name="Result";Expression="Good"}
その結果、
>$obj
System Job Result
------ --- ---
server-1 Microsoft.PowerShell.Commands.PSWmiJob Good
Hashtable と PSObject にはいくつかの類似した側面 (名前付きの方法で他のものを含むもの) がありますが、私の知る限り、それらは互換性がありません -Select-Object
私がここでやろうとしていることにより近い代替手段はありますか?