此语法的作用是:| select@{E={$_.PSComputerName}; L='Server'},名称,ProcessId,PathName?

What does this syntax do: | select @{E={$_.PSComputerName}; L='Server'}, Name, ProcessId, PathName?

我有一个 Powershell 脚本,其中有一行:

$MyServers | select @{E={$_.PSComputerName}; L='AX Server'}, Name, ProcessId, PathName

这部分的significance/function是什么?它有什么作用?我在哪里可以理解符号?

@{E={$_.PSComputerName}; L='AX Server'}

它创建一个哈希表对象,其中键 E 将使用 $MyServers 中的 PSComputerName 值填充,L 将是 'AX Server'

PS C:\> @{E='Value 1'; L='Value 2'} | % { write-host $_.L }
Value 2

PS C:\> @{E='Value 1'; L='Value 2'} | Select-Object -Property *

IsReadOnly     : False
IsFixedSize    : False
IsSynchronized : False
Keys           : {L, E}
Values         : {Value 2, Value 1}
SyncRoot       : System.Object
Count          : 2

PS C:\> @{E='Value 1'; L='Value 2'} | % { write-host $_.GetType().FullName }
System.Collections.Hashtable

虽然 Viet 的回答在技术上并没有错,但它并没有真正解释为什么将哈希表创建为 Select-Object.

的参数

它通常被称为计算 属性,用于自定义您从中选择的对象的输出。在您的情况下,它基本上用于将输出列从 PSComputerName 重命名为 AX Server.

哈希表的L键是Label的缩写,E键是Expression的缩写。所以相当于这样写:

@{ Label='AX Server'; Expression={$_.PSComputerName} }

换句话说,输出一个名为AX Server的列,其值等于列表中当前对象的PSComputerName 属性 ($_)。

计算属性通常用于操作数据,而不仅仅是重命名列。因此,您可以执行一些操作,例如将 PSComputerName 更改为大写,对数值进行数学运算,甚至将多列合并为一列。