しれっとこれまで出してたんですが、一応まとめておきます。
PSCustomObject は PowerShell 3.0 から追加された、 新たに PSObject を定義するための簡潔に利用できる型です。
詳しくはWeb でということで、表題のやり方の一例を。
PSCustomObjectを作ってみる
連想配列の頭に [PSCustomObject] と型名漬けてあげるだけです。
簡単!便利!正義ですね。
例えば、このような連想配列があります。
@{
ContextMenus = "Open Windows PowerShellx64 as Administrator"
commands = "$PSHOME\powershell.exe -NoExit -NoProfile -Command ""Set-Location '%V'"""
versions = "PowerShellx64"
}
これでは、あくまで連想配列で出るのです。
Name Value
---- -----
commands C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit -NoProfile -Command "Set-Location '%V'"
ContextMenus Open Windows PowerShellx64 as Administrator
versions PowerShellx64
しかし、頭に [PSCustomObject] とつけるだけで新たな PSObject が定義できます。
[PSCustomObject]@{
ContextMenus = "Open Windows PowerShellx64 as Administrator"
commands = "$PSHOME\powershell.exe -NoExit -NoProfile -Command ""Set-Location '%V'"""
versions = "PowerShellx64"
}
簡単。
ContextMenus commands versions
------------ -------- --------
Open Windows PowerShellx86 as Administrator c:\Windows\syswow64\powershell.exe -NoExit -NoProfile -Comm... PowerShellx86
PSCustomObjectに複数のオブジェクトを設定する
+ は使えません。 (そりゃそーだ
要は、同じセッション内で当て込んであげればいいのです。
つまり、もとの値 (例えば配列) を Foreach-Object で渡すなどです。
例えば、このような2次元配列を考えてみます。
@(
@(
'Open Windows PowerShellx86 as Administrator',
"c:\Windows\syswow64\powershell.exe -NoExit -NoProfile -Command ""Set-Location '%V'""",
"PowerShellx86"
),
@(
'Open Windows PowerShellx64 as Administrator',
"$PSHOME\powershell.exe -NoExit -NoProfile -Command ""Set-Location '%V'""",
"PowerShellx64"
)
)
これをそれぞれのindexに合わせて次のように当てたいとすると
[PSCustomObject]@{
ContextMenus = [0]
commands = [1]
versions = [2]
}
こんな簡単ですね。
@(
@(
'Open Windows PowerShellx86 as Administrator',
"c:\Windows\syswow64\powershell.exe -NoExit -NoProfile -Command ""Set-Location '%V'""",
"PowerShellx86"
),
@(
'Open Windows PowerShellx64 as Administrator',
"$PSHOME\powershell.exe -NoExit -NoProfile -Command ""Set-Location '%V'""",
"PowerShellx64"
)
) | %{
[PSCustomObject]@{
ContextMenus = $_[0]
commands = $_[1]
versions = $_[2]
}
}
ででん
ContextMenus commands versions
------------ -------- --------
Open Windows PowerShellx86 as Administrator c:\Windows\syswow64\powershell.exe -NoExit -NoProfile -Comm... PowerShellx86
Open Windows PowerShellx64 as Administrator C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -... PowerShellx64
もちろん配列でなくてもいいので、自在に Cmdlet結果をパイプで受けて 元データをいじった PSObjectを作れます。
上手く使って、 Select-Object @{Name="";Expression={}} から卒業できるといいですね!