powershell-2.0 - ForEach-Object 中出现意外标记 "in"

标签 powershell-2.0

正在寻找此 ForEach-Object 的正确格式。我正在阅读一本介绍 PowerShell 的书。书中的一个示例如下,但该示例不起作用。

$TEXTfile = $other = 0
ForEach-Object ($file in (Get-Childitem C:\PSLearn) {
  switch ($file.extension) {
    ".txt"  {$TEXTfile++}
    default {$other++}
  }
}
#Display results
"$TEXTfile text files"
"$other other files"

返回的错误是:

Unexpected token 'in' in expression or statement.

(<name> in <collection>) 的正确格式是什么?部分?

左括号(之前$file对我来说似乎是错误的,因为我没有看到匹配的右括号 ) ,但这正是书中的例子。

最佳答案

foreachForEach-Objectdifferent loop constructs 。后者用于处理管道输入,前者用于迭代列表,并且无法读取或写入管道(尽管有解决方法)。

foreach 循环如下所示:

foreach ($item in $list) {
  # do stuff with $item
}

ForEach-Object 循环通常如下所示:

... | ForEach-Object {
  # do stuff with current object variable $_
} | ...

不过,您可以在某种程度上使用 ForEach-Object 循环来模拟 foreach 循环:

ForEach-Object -InputObject $list {
  # do stuff with $_
}

但是,循环变量仍然是“当前对象”automatic variable ($_)。

关于powershell-2.0 - ForEach-Object 中出现意外标记 "in",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31301667/

相关文章:

xml - 确定 XML 节点存在

powershell - 使用 PowerShell 搜索 CSV

powershell - 清理包含域的巨大文本文件

batch-file - 以管理员身份在批处理文件中运行 powershell 脚本

PowerShell 缺少终止符 : "

powershell - 管道和 foreach 循环

powershell - 如果文件名包含空格,则嵌入式PowerShell命令将不起作用

Powershell接收作业: Quota violation when invoking command as a job

.net - 创建没有密码的 PSCredential

string - Powershell字符串分割差异