例如,比较Powershell中的以下命令:
Get-Item -Path "C:Userstest.userDesktop*"
和
Get-ChildItem -Path "C:Userstest.userDesktop"
我有限的测试表明输出没有差异。
如果确实没有区别,这就引出了一个问题:为什么Get-ChildItem
存在?
在讨论是否需要两个不同的命令之前:
-
Get-Item
被设计为返回关于目标项目自身的信息。 -
Get-ChildItem
用于返回有关目标项的子项的信息,如果给定项恰好是容器,则适用于目录(文件夹(。- 但是,以通配符表达式为目标的项目始终报告为本身,即使它们是容器(目录(
毫无疑问,这两个cmdlet之间有很大的重叠,Get-ChildItem
支持的(部分特定于提供者(功能比Get-Item
多得多。相反,有一些特性是Get-Item
独有的。
True:没有严格需要Get-Item
和Get-ChildItem
。
其他shell和平台只需要一个命令,它相当于Get-ChildItem
,而不是Get-Item
:
-
cmd.exe
仅附带其内部dir
命令。 -
类Unix平台仅附带外部
ls
实用程序。- 注意:可以说,是外部
stat
实用程序与Get-Item
类似,但其语法和输出格式与ls
有很大不同。也就是说,PowerShell中不必考虑不同的输出格式,因为它在数据和其表示之间有明确的分隔,并且各种Format-*
cmdlet允许根据需要自定义表示
- 注意:可以说,是外部
Get-ChildItem
要完全取代Get-Item
,需要支持以下附加功能:
-
在Windows上,
-Stream
参数,当前仅支持Get-Item
。 -
假设
-Credential
参数(根据链接的文档,PowerShell附带的任何提供程序当前都不支持它(。 -
一种(有些自相矛盾(的方式,表示您希望引用目录(容器(的文本目标路径返回有关目录(容器(本身的信息,而不是其子目录。
- 在类Unix平台上,
ls
实用程序的-d
选项可以做到这一点,尽管没有执行名称解析,例如将.
解析为目录名称 - 相比之下,
cmd.exe
的dir
命令不直接支持(换句话说:它不直接支持Get-Item
对目录的功能(
- 在类Unix平台上,