首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在这个powershell命令中使用Parentheses

为什么在这个powershell命令中使用Parentheses
EN

Stack Overflow用户
提问于 2017-07-30 22:06:14
回答 1查看 548关注 0票数 1

我刚开始使用Powershell,有人能向我解释为什么Parentheses和point被用于:

代码语言:javascript
复制
(get-cluster).PreferredSite="SiteA"

为什么不只是:

代码语言:javascript
复制
get-cluster | set-preferredSite -Name SiteA
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-30 23:08:57

Set-preferredSite看起来像cmdlet的(假设的)名称,正如TessellatingHeckler所指出的,几乎不可能为每个属性名称构建一个cmdlet (撇开可以动态创建其名称不可预测的事实)。

因此,您别无选择,只能使用PowerShell的语法为对象的属性赋值,这通常需要使用表达式,它不是CLI类(参数模式),而是类编程语言(表达式模式)。

PowerShell v3+在其所谓的操作语句中确实提供了一种较少的“噪音”语法;例如:

代码语言:javascript
复制
Get-Cluster | % PreferredSite

这相当于更详细的内容:

代码语言:javascript
复制
Get-Cluster | % { $_.PreferredSite }

但是,操作语句不支持赋值,因此下列操作不起作用:

代码语言:javascript
复制
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)和自定义脚本块:

代码语言:javascript
复制
Get-Cluster | % { $_.PreferredSite = 'SiteA' }

注意:

  • { ... }中的语句是一个赋值表达式。
  • $_是一个自动变量,它引用每个迭代中手头的输入对象。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45405160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档