Windows10 / Powershell:使用Get-Childitem时如何使用-include参数?

mrj*_*per 1 powershell

使用“ -filter”时:

Get-ChildItem -file -filter "*.txt" | foreach-object { write-host $_.FullName }

我得到了当前文件夹中的4个.txt文件的列表。

我尝试使用“ -include”

Get-ChildItem -file -include *.txt | foreach-object { write-host $_.FullName }
Get-ChildItem -file -include *txt | foreach-object { write-host $_.FullName }
Run Code Online (Sandbox Code Playgroud)

我什么也没得到。我尝试使用和不使用“ -file”参数,都没有区别。

我看过各种指南/示例(ss64.com/TechNet等),并且据说我做得对。

有什么想法我可能做错了吗?谢谢!

在此处输入图片说明

Bac*_*its 5

Get-Help页面上Get-ChildItem

-Include仅当命令包含-Recurse参数或路径指向目录内容(例如)时,该参数才有效C:\Windows*,其中“ *”通配符指定C:\Windows目录的内容。

你会注意到,你没有,如果你指定出现语法错误-include和不指定-recurse尽管如此,无论它是从字面上未定义的事实。您还将注意到,这C:\Windows*不是“目录中的所有文件”的普通通配符表达式C:\Windows。它是“目录中所有以'Windows'开头C:\且可能具有或不具有扩展名的项目”的通配符表达式。我不知道Get-ChildItem该参数的作者应该怎么做。他们在记录和实施它方面做得非常差。

因此,我避免使用该-Include参数损坏/记录不良的内容。我不知道该怎么办才-Filter不会。我已经阅读了有关其确切功能的文章。它以某种方式“将值传递给基础提供程序以在该级别进行过滤”。我不知道为什么他们认为系统管理员会知道真正的含义。我的理解是,调用DirectoryInfo.GetFiles()每个目录项和调用DirectoryInfo.GetFiles('*.txt')每个目录项之间是有区别的,但是大多数系统管理员不会知道这意味着什么。但是,它的行为如此奇怪以至于我不信任它,因此即使我大约95%地确定它会做什么……我仍然从不使用它。

相反,我只是管道到Where-Object

Get-ChildItem -file | Where-Object Extension -eq '.txt' | [...]
Run Code Online (Sandbox Code Playgroud)

还要注意的是Get-ChildItem与破-LiteralPath-Recurse-Include在PowerShell中的一些版本,而会返回所有项目。

比较:

Get-ChildItem -LiteralPath $PSHOME *.exe -Recurse # works
Get-ChildItem -Path $PSHOME -Include *.exe -Recurse # works
Get-ChildItem -LiteralPath $PSHOME -Include *.exe -Recurse # does NOT work
Run Code Online (Sandbox Code Playgroud)

v6 在这里报告的问题。