【问题标题】:Try hard to learn PowerShell error "The hash literal was incomplete."努力学习 PowerShell 错误“哈希文字不完整”。
【发布时间】:2018-12-30 11:40:08
【问题描述】:
Get-Process s* |
    where {s$_.Path} |
    dir |
    sort LastWriteTime |
    Format-Table fullname, name,@{label="LastWriteTime";Expr={$_.LastWriteTime}

错误:

哈希文字不完整。 + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : IncompleteHashLiteral

请给我一个提示如何重写好吗?

【问题讨论】:

  • 你有多少个左花括号,有多少个右花括号?
  • 您的计算属性缺少右大括号:@{label="...";Expr={...} -> @{label="...";Expr={...}}
  • 无法识别术语's$_.Path'...
  • 如果你使用了类似Windows PowerShell Integrated Scripting Environment (ISE) 的东西,它会提示你缺少 } 等等。

标签: powershell syntax-error


【解决方案1】:

你错过了一个花括号。但是您的代码中还有更多问题。 无法将 System.Diagnostics.Process 对象通过管道传送到“dir”

我做了这个,我认为它给出了你想要的输出:

Get-Process s* |where {$_.Path} | ForEach-Object {Get-Item $_.Path } |
Sort-Object LastWriteTime | Format-Table fullname, name,LastWriteTime

它的作用:

  • 获取名称以 s 开头且返回的对象定义了 Path 属性的所有进程
  • 获取每个进程的文件对象
  • 按 LastWriteTime 对文件对象进行排序
  • 格式化输出

【讨论】:

  • 如果无法将 System.Diagnostics.Process 对象通过管道传输到“dir”,它是如何工作的?
  • @AndrewMorton 在我的代码中,进程对象通过管道传送到 Foreach-Object,该对象使用进程对象的 path 属性获取通过调用 Get-Item 传递的文件对象 foreach 进程。
  • 我尝试了您的代码和 OP 的更正代码,并且都给了我相同的输出(PS 版本 5.1)。我想知道为什么 OP 的代码适用于 dir
  • 非常感谢,我确实错过了 } 并不幸添加了 {s$_.Path}
  • 我什至没有测试到 dir 的代码管道 :-) 我很清楚这是行不通的。我错了。我看到它有效。哇!对我来说,这里的解释是 dir (Get-ChildItem) cmdlet 几乎令人难以置信的灵活性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
相关资源
最近更新 更多