我是Powershell的新人可以向我解释为什么使用圆括号和点数:
(get-cluster).PreferredSite="SiteA"
为什么不呢:
get-cluster | set-preferredSite -Name SiteA
答案 0 :(得分:4)
Set-preferredSite
看起来像 cmdlet 的(假设)名称,并且正如TessellatingHeckler指出的那样,为每个人构建cmdlet实际上是不可能的属性名称(不考虑可以动态创建的属性,其名称无法预测)。
因此,您别无选择,只能使用PowerShell的语法为对象的属性赋值,这通常需要使用表达式,而不是类似CLI的参数模式)但类似于编程语言(表达模式)。
PowerShell v3 + 通过其所谓的操作语句提供更少“嘈杂”的语法; e.g:
Get-Cluster | % PreferredSite
这相当于更详细:
Get-Cluster | % { $_.PreferredSite }
但是,操作语句不支持赋值,因此以下内容不起作用:
Get-Cluster | % PreferredSite = 'SiteA' # !! Does NOT work.
我猜测关于为什么不支持这种情况,很少想要使用管道将潜在大型输入集中每个项目的属性设置为相同 value。
对于小型集合,(Get-Cluster).PreferredSite="SiteA"
会很好,即使Get-Cluster
的输出首先在内存中收集(如果Get-Cluster
输出多个对象,.PreferredSite
在PSv3 +集合中的每个项目上访问,这是一个名为成员枚举的功能。“
对于大型集合,请将%
(ForEach-Object
)与自定义脚本块一起使用:
Get-Cluster | % { $_.PreferredSite = 'SiteA' }
请注意:
{ ... }
内的语句是作业表达式。$_
是自动变量,它引用每次迭代中的输入对象。