powershell 3.0 中相同命令的不同结果
Different result from same command in powershell 3.0
既然Get-ChildItem -Path *.exe
会显示当前目录下的所有可执行文件,为什么Get-ChildItem -File -Include *.exe
return结果不一样?这两个命令都在同一目录中执行,第一个命令(带 -Path)returns 是一个可执行文件列表,但第二个命令(带 -File)没有。 (gci -File
将列出包括 exe 在内的所有内容)
Get-ChildItem -File | gm #=> FileInfo
Get-ChildItem *.* | gm #=> DirectoryInfo and FileInfo
以下所有命令 return FileInfo 类型的对象
Get-ChildItem -File
Get-ChildItem *.* -Include *.exe
Get-ChildItem -Path *.exe
但是混合 -File 和 -Include/-Exclude return 没什么,即使 -include 正在寻找文件类型:
Get-ChildItem -File -Include *.exe #=> Returns nothing
我在这里错过了什么?
来自 TechNet:
The Include parameter is effective only when the command includes the
Recurse parameter or the path leads to the contents of a directory,
such as C:\Windows*, where the wildcard character specifies the
contents of the C:\Windows directory.
换句话说,当您使用Include 参数时,它不会自动考虑所有文件和目录,除非您使用Path 或Recurse 参数。请注意,当仅使用 Path 参数时,您必须包含一个通配符以强制它考虑该路径下的文件和目录结果。我想不出这是为什么。
为了使您的示例正常工作,您可以使用以下之一(我删除了 File 参数,因为它看起来多余):
Get-ChildItem -Path * -Include *.exe
Get-ChildItem -Include *.exe -Recurse
我对你问题的回答的要点是一个观点——据我所知,应该删除 Include 参数——或者修复它的行为以匹配不带参数使用时 Get-ChildItem cmdlet 的默认行为.可能有一个很好的解释为什么它以这种方式工作,但我不知道这一点。
如果您从示例中删除 Include 参数,behavior/results 更有意义(对我而言):
Get-ChildItem -Path *.exe
在这种情况下,我们只需要Exclude参数就可以有效覆盖所有过滤需求。类似于:
Get-ChildItem -Path *.exe -Exclude *system*
既然Get-ChildItem -Path *.exe
会显示当前目录下的所有可执行文件,为什么Get-ChildItem -File -Include *.exe
return结果不一样?这两个命令都在同一目录中执行,第一个命令(带 -Path)returns 是一个可执行文件列表,但第二个命令(带 -File)没有。 (gci -File
将列出包括 exe 在内的所有内容)
Get-ChildItem -File | gm #=> FileInfo
Get-ChildItem *.* | gm #=> DirectoryInfo and FileInfo
以下所有命令 return FileInfo 类型的对象
Get-ChildItem -File
Get-ChildItem *.* -Include *.exe
Get-ChildItem -Path *.exe
但是混合 -File 和 -Include/-Exclude return 没什么,即使 -include 正在寻找文件类型:
Get-ChildItem -File -Include *.exe #=> Returns nothing
我在这里错过了什么?
来自 TechNet:
The Include parameter is effective only when the command includes the Recurse parameter or the path leads to the contents of a directory, such as C:\Windows*, where the wildcard character specifies the contents of the C:\Windows directory.
换句话说,当您使用Include 参数时,它不会自动考虑所有文件和目录,除非您使用Path 或Recurse 参数。请注意,当仅使用 Path 参数时,您必须包含一个通配符以强制它考虑该路径下的文件和目录结果。我想不出这是为什么。
为了使您的示例正常工作,您可以使用以下之一(我删除了 File 参数,因为它看起来多余):
Get-ChildItem -Path * -Include *.exe
Get-ChildItem -Include *.exe -Recurse
我对你问题的回答的要点是一个观点——据我所知,应该删除 Include 参数——或者修复它的行为以匹配不带参数使用时 Get-ChildItem cmdlet 的默认行为.可能有一个很好的解释为什么它以这种方式工作,但我不知道这一点。
如果您从示例中删除 Include 参数,behavior/results 更有意义(对我而言):
Get-ChildItem -Path *.exe
在这种情况下,我们只需要Exclude参数就可以有效覆盖所有过滤需求。类似于:
Get-ChildItem -Path *.exe -Exclude *system*