select-string pattern P:\ath\to\directory select-string : The -6ren">
gpt4 book ai didi

powershell - 如果有子目录,为什么 "get-childItem -recurse | select-string foo"不会导致错误?

转载 作者:行者123 更新时间:2023-12-04 07:50:26 25 4
gpt4 key购买 nike

正在尝试使用 select-string在目录上导致错误:

PS C:\> select-string pattern P:\ath\to\directory
select-string : The file P:\ath\to\directory cannot be read: Access to the path 'P:\ath\to\directory' is denied.
但是,当我使用 get-childItem -recurse 时,命令结束没有问题:
PS C:\> get-childItem -recurse P:\ath\to | select-string pattern
这让我感到惊讶,因为 get-childItem recurse还将目录传递到管道中。所以,我假设 select-string处理第一个目录时会引发相同的错误。
由于情况并非如此,我想知道该目录在管道中的何处或如何被过滤掉。

最佳答案

TL;DR:对象魔法。
Get-Childitem运行时,它将返回一个对象集合。这被传递给 Select-String . cmdlet 的 source可在 Github 上获得。有一个 ProcessRecord()处理输入对象的方法。它包含一些对对象类型以及它们是否是目录的检查。像这样,

if (_inputObject.BaseObject is FileInfo fileInfo)
...
if (expandedPathsMaybeDirectory && Directory.Exists(filename))
...
因此, Get-Child 无关紧要。的集合包含 DirectoryInfoFileInfo对象; cmdlet 足够聪明,可以弄清楚它正在尝试使用什么。

关于powershell - 如果有子目录,为什么 "get-childItem -recurse | select-string foo"不会导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67015744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com