我刚开始使用Powershell,有人能向我解释为什么Parentheses和point被用于:
(get-cluster).PreferredSite="SiteA"为什么不只是:
get-cluster | set-preferredSite -Name SiteA发布于 2017-07-30 23:08:57
Set-preferredSite看起来像cmdlet的(假设的)名称,正如TessellatingHeckler所指出的,几乎不可能为每个属性名称构建一个cmdlet (撇开可以动态创建其名称不可预测的事实)。
因此,您别无选择,只能使用PowerShell的语法为对象的属性赋值,这通常需要使用表达式,它不是CLI类(参数模式),而是类编程语言(表达式模式)。
PowerShell v3+在其所谓的操作语句中确实提供了一种较少的“噪音”语法;例如:
Get-Cluster | % PreferredSite这相当于更详细的内容:
Get-Cluster | % { $_.PreferredSite }但是,操作语句不支持赋值,因此下列操作不起作用:
Get-Cluster | % PreferredSite = 'SiteA' # !! Does NOT work.对于为什么不支持这一点,我的猜测是,很少有人希望使用管道将可能较大的输入集中的每个项的属性设置为相同的值。
对于一个小型的集合,(Get-Cluster).PreferredSite="SiteA"会做得很好,即使Get-Cluster的输出是作为一个整体第一次收集到内存中(如果Get-Cluster输出了多个对象,那么在PSv3+中的每个项上都会访问.PreferredSite,这是一个名为https://stackoverflow.com/a/44620191/45375的特性)。
对于大型集合,使用% (ForEach-Object)和自定义脚本块:
Get-Cluster | % { $_.PreferredSite = 'SiteA' }注意:
{ ... }中的语句是一个赋值表达式。$_是一个自动变量,它引用每个迭代中手头的输入对象。https://stackoverflow.com/questions/45405160
复制相似问题