为什么你不能从任何powershell语句中获取管道,比如foreach和while (‘不允许空的管道元素’)?有没有工程上的限制?
PS /Users/me> foreach ($i in 1,2,3) { $i } | measure
At line:1 char:30
+ foreach ($i in 1,2,3) { $i } | measure
+ ~
An empty pipe element is not allowed.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : EmptyPipeElement
PS /Users/me> for ($i = 1;$i -lt 10; $i++) { $i } | measure
At line:1 char:37
+ for ($i = 1;$i -lt 10; $i++) { $i } | measure
+ ~
An empty pipe element is not allowed.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : EmptyPipeElement
PS /Users/me> $i = 1
PS /Users/me> while ($i -lt 10 ) { $i;$i++ } | measure
At line:1 char:32
+ while ($i -lt 10 ) { $i;$i++ } | measure
+ ~
An empty pipe element is not allowed.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : EmptyPipeElement
powershell语句列表:
如果..否则
交换机
做..而
ForEach
为
而
中断
继续
发布于 2018-06-01 23:38:29
正如您已经注意到的,PowerShell语言语句不会输出到管道中(因此出现错误-“不允许使用空管道元素”)。以下是两种可能的解决方法:
$()
(子表达式)运算符对语句进行包装。示例:$(foreach ($i in 1,2,3) { $i }) |调用{ }
中的语句(即使其成为脚本块),并使用&
(调用/调用)操作符调用它。示例:
&{ Measure-Object ($i in 1,2,3) { $i }}| foreach
两者之间的区别在于scriptblock语法创建了一个新的作用域,因此当调用完成时,该作用域中的变量将被释放。在上面的两个示例中,这意味着$i
是在执行第一个示例之后定义的,而不是在执行第二个示例之后定义的。根据您要尝试做的事情,这种差异可能会很有用。(例如,当在PowerShell命令行中工作时,我更喜欢第二种语法,以避免临时变量污染当前作用域。)
https://stackoverflow.com/questions/50645962
复制相似问题