【问题标题】:piping objects to select-string comes up empty [duplicate]管道对象到选择字符串出现空[重复]
【发布时间】:2019-10-20 16:29:52
【问题描述】:

为什么这是空的?我正在寻找与主目录相关的变量。在这些情况下我必须求助于 findstr 吗?我意识到我在一个对象中进行管道传输。我希望能够搜索所有属性。 -InputOjbect 是 PSObject 类型。

dir variable: | select-string users

预期输出:

$                              users
HOME                           C:\Users\js
PROFILE                        C:\Users\js\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
PWD                            C:\Users\js

编辑:

这是一个半奇怪的答案,但我必须输入我想要的属性。

dir variable: | select name,value | select-string users

@{Name=HOME; Value=C:\Users\js}
@{Name=PROFILE; Value=C:\Users\js\Documents\PowerShell\Microsoft.PowerShell_profile.ps1}
@{Name=PWD; Value=C:\Users\js}

【问题讨论】:

  • 恐怕你对Select-String的功能有误解。试试Get-ChildItem Variable: | Where-Object {$_.Value -match 'users'}
  • Get-ChildItem 不显示 $。这样做:dir variable: | where {$_.Value -match "users"}
  • @sunilvijendra “不显示 $”是什么意思?你试过代码吗?顺便说一句:dir 只是Get-ChildItem 的别名……你知道的,对吧? ;-)
  • 好点,@Olaf,虽然有时在输入对象的显示输出表示中进行基于字符串的搜索是一种方便的快捷方式,不需要知道对象的结构 - 请参阅@ 987654321@.
  • $ 只是最后一个命令参数。没那么重要。

标签: powershell select-string


【解决方案1】:

如果你想让它像一些 linux shell 一样工作,我会使用以下内容:

    dir variable:  |Out-String -Stream  |Select-String "users"

Out-string 将对象转换为字符串。 (-stream:逐行)

所以 Select-string 可以正常工作。

或者如果我们想要对象,而不是字符串作为结果:

dir variable:  |where {$_.value -match "users" -or $_.name -match "users"}

【讨论】:

  • 我认为这是一个糟糕的解决方案。即使它可能会提供所需的输出,它也会将强大的对象变成愚蠢的字符串。
  • 我觉得还可以。
猜你喜欢
  • 1970-01-01
  • 2015-12-09
  • 2019-11-16
  • 2022-11-15
  • 2014-02-26
  • 2023-03-31
  • 2021-02-14
  • 1970-01-01
相关资源
最近更新 更多