此语法的作用是:选择@ {E = {$ _。PSComputerName}; L ='Server'},名称,ProcessId,路径名?

问题描述 投票:1回答:2

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

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

这部分的意义/功能是什么?它有什么作用?我在哪里可以理解该符号?

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

powershell syntax scripting notation
2个回答
3
投票

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

通常称为计算属性,用于自定义要选择的对象的输出。就您而言,它基本上是用于将输出列从PSComputerName重命名为AX Server

哈希表的L键是Label的缩写,而E键是Expression的缩写。因此,等效于编写此代码:

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

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

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


2
投票

它创建一个哈希表对象,其中的密钥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
© www.soinside.com 2019 - 2024. All rights reserved.