我有一个Powershell脚本,其中有一行:
$MyServers | select @{E={$_.PSComputerName}; L='AX Server'}, Name, ProcessId, PathName
这部分的意义/功能是什么?它有什么作用?我在哪里可以理解该符号?
@{E={$_.PSComputerName}; L='AX Server'}
虽然Viet的回答在技术上没有错,但并没有真正解释为什么将哈希表创建为Select-Object
的参数。
通常称为计算属性,用于自定义要选择的对象的输出。就您而言,它基本上是用于将输出列从PSComputerName
重命名为AX Server
。
哈希表的L
键是Label
的缩写,而E
键是Expression
的缩写。因此,等效于编写此代码:
@{ Label='AX Server'; Expression={$_.PSComputerName} }
换句话说,输出名为AX Server
的列,其值等于列表中当前对象(PSComputerName
)的$_
属性。
计算属性通常用于操纵数据,而不仅仅是重命名列。因此,您可以执行以下操作,例如将PSComputerName更改为大写字母,对数值进行数学运算,甚至将多列合并为一。
它创建一个哈希表对象,其中的密钥E将用$ MyServers中的PSComputerName值填充,而L将是'AX服务器'
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