还记得 DOS 的 dir
命令的美好时光吗?Linux 的 ls
命令呢?如果是这样,那么 Get-childItem 本质上就是那个命令的升级版。
事实上,我们甚至在 PowerShell 中以别名的形式拥有了 dir
和 ls
。Get-Childitem PowerShell cmdlet 不仅可以通过 PowerShell 控制台或PowerShell 脚本列出文件系统上的文件和文件夹,还可以枚举注册表键和值、各种证书存储中的证书,甚至是 Active Directory 等等。
如果你是初学者/中级 PowerShell 脚本编写者,请务必查看我免费的微课程《构建 PowerShell 工具》!超过 9,000 字的深入解释和见解,教你如何构建 PowerShell 工具。
要理解 Get-Childitem,首先,将其视为 dir
和 ls
,但它不仅仅是处理文件,而是将许多对象视为子项目并枚举它们。你可以使用别名或完整的命令名称来使用它。
由于这个命令自 PowerShell v1 开始就可用,所以可以确保它与你的PowerShell 版本兼容。
Get-ChildItem 遍历树
A file system is a hierarchy. It has a folder structure with files inside of folders and those folders inside of other folders. A file system is like a tree. That tree has a trunk (C:\
for example) and “branches” coming off of it (folders). In fact, we even have a tree
command.
你可以将此命令指向本地计算机上的本地路径,使用 PowerShell 远程脚本块并在其中使用 Get-ChildItem
,或者只是指向 UNC 路径。所有这些都可以。也许我只想列出当前目录中的所有文件。
PowerShell 提供程序
微软意识到可以将文件系统的这种“树”状结构应用于其他系统。文件系统的“树”具有文件夹和文件,而注册表具有键和值,而Windows中的证书系统具有存储和存储中的证书。所有这些特定领域都可以被表示为一棵树,因此PowerShell提供程序就诞生了。为什么要谈论PowerShell提供程序呢?因为Get-ChildItem
cmdlet是与每个提供程序公开的PowerShell驱动程序交互的*-Item
cmdlet的一部分。
Get-ChildItem
cmdlet可以在PowerShell驱动器上输出任意数量的对象,并允许您通过管道或在PowerShell foreach 循环中处理每个项目。它了解PowerShell驱动程序的概念,这允许您在一个命令中指定文件系统文件夹、注册表键或证书存储的路径。
您可以看到,此命令可以枚举C:\文件夹、HKEY Current User hive以及PowerShell证书存储。
过滤
Get-ChildItem
PowerShell 命令不仅可以提取驱动器上的所有对象,还可以通过一些不同的参数过滤信息:Filter
、Include
和 Exclude
。在可能的情况下,您总是希望使用无处不在的 PowerShell Filter
参数。该参数直接将过滤语法传递给单个提供程序。尽管速度更快,但此语法完全取决于正在查询的提供程序。
例如,当查询文件时,Filter
语法为 Name -eq 'foo'
可能完全没问题,但在查询注册表时根本行不通,因为注册表提供程序甚至没有过滤器!
然而,当一切都失败时,您还可以使用 Include
和 Exclude
参数。
此外,PowerShell 中的此命令还具有一些特定于文件系统的参数,如 Force
,它将输出隐藏的文件和文件夹,File
和 Directory
仅查找文件或文件夹。通过使用 Get-Help
或在Microsoft 文档中查看有关 Get-ChildItem
的完整详细信息。
Get-ChildItem
的另一个很酷的功能是在使用通配符字符时解析路径。在 PowerShell 中,通配符字符通常表示任何内容。例如,如果您想查看具有 .txt 文件扩展名的所有文件,只需指定文件夹的路径和 *.txt
。
我们也可以根据文件属性进行过滤。也许我们只想在文件夹中找到只读文件。
摘要
此 PowerShell 命令是您会反复使用的命令之一。大多数情况下,您可能会使用 FileSystem 提供程序,但重要的是要记住,此命令可做的远不止如此。您可以使用它来查询文件、文件夹、注册表键、注册表值、证书、Active Directory 用户、计算机,甚至是环境变量、函数等等!
如果有疑问,请运行 Get-PSDrive
命令,以查看所有加载的 PowerShell 驱动器的列表,Get-ChildItem
可以为您查询。