以尾随通配符结尾的Get-Item和不带尾随通配符的Get-ChildItem之间有区别吗



例如,比较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-ItemGet-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.exedir命令不直接支持(换句话说:它不直接支持Get-Item目录的功能(

最新更新