powershell - Get-Childitem不同的命令

标签 powershell get-childitem

PowerShell 中以下命令有何区别?

Get-ChildItem C:\Users -Directory

Get-ChildItem C:\Users | Where-Object {$_.PSIsContainer -eq $true}

它们似乎都给出了相同的结果。有什么区别吗?

更新:

我刚刚开始学习powershell,我不熟悉大多数术语。两个命令的结果如下:


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          7.9.2021     22.35                Administrator
d-----          7.9.2021     15.40                MyDevice
d-r---          6.5.2020     11.59                Public
d-----          7.9.2021     22.45                student

最佳答案

评论里有很多信息;让我尝试提炼和补充它:

  • Where-Object { $_.PSIsContainer -eq $true } (或者更好的是 Where-Object { $_.PSIsContainer })用于限制Get-ChildItem的输出到目录以及用于限制输出到文件Where-Object { -not $_.PSIsContainer }需要 PowerShell 的(早已过时的)v2,如 Olaf指出。

  • v3Get 引入了动态 -Directory-File 开关参数-ChildItem 允许直接过滤输出到目录/文件。

功能上,问题中的两个命令是等效的,但是使用 -File/-Directory 不仅更方便简洁,而且更快,因为需要在管道中涉及两个命令必然会增加开销。

  • Abraham Zinala建议,最好在处进行过滤,这就是-File-Directory所做的; -Filter 参数也是如此,用于将输出限制为名称与通配符模式匹配的项目,例如 *.txt (其他 cmdlet 也支持(特定于命令的) -过滤参数,它们总是值得使用,因为它们在执行速度和内存使用方面都提高了性能。

注意:严格来说,这些命令仅适用于文件系统路径,而 PowerShell 的驱动器概念还包含其他类型的数据商店,通过所谓的 providers .

只有 FileSystem 提供程序公开 -Directory-File 开关(如所谓的 dynamic parameters )。

因此,对于与不同提供者相关的路径 - 假设该提供者具有类似于涉及两个项目子类型的文件系统的对象层次结构,leaf 项目(类似于文件)和容器项目(类似于目录) - 单独的cmdlet调用,例如Where-可能仍然需要对象 { $_.PSIsContainer } - 除非该提供程序实现其自己的 -Directory-File 开关模拟。

在 PowerShell 附带的提供程序中,容器和叶项之间的区别仅适用于 WSMan(驱动器 wsman:)和证书提供程序(驱动器 cert:) ;其他提供程序仅公开单个项目类型,因为它们的数据非分层(例如,Env提供程序 - 尝试 Get-ChildItem Env:)或者因为其他实体被公开为属性而不是项目(Registry提供者,它公开仅容器 - 注册表 - 而注册表是这些容器的属性

关于powershell - Get-Childitem不同的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69094233/

相关文章:

powershell - PowerShell 脚本中的 Get-ChildItem 权限被拒绝错误

Powershell 指定最小搜索深度

powershell - 将具有特定扩展名的文件 move 到更高层次的文件夹中

powershell - If/ElseIf block 不适用于 -or

powershell - Windows Powershell - 如何仅在某些 Windows 服务发生变化时重新显示它们的状态?

azure - 如何在powershell/azure cli中动态循环键值对

powershell - 如何确保输入密码?

powershell - 如何使用 PowerShell checkout TFS 中的文件?

windows - Powershell Get-ChildItem - 后续调用相同路径时缺少 header

Powershell - 在路径中使用通配符来搜索特定子文件夹中的文件名