記得舊日的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-ChilldItem
cmdlet是與每個提供程序公開的PowerShell驅動器交互的*-Item
cmdlet的一部分。
Get-ChildItem
cmdlet可以在PowerShell驅動器上輸出任意數量的對象,並允許您通過管道或在PowerShell foreach循環中處理每個項目。它理解PowerShell驅動器的概念,這允許您在一個Path
中指定文件系統文件夾、註冊表鍵或證書存儲。
您可以在下面看到,此命令可以列舉C:\文件夾、HKEY Current User註冊表頂級以及PowerShell證書存儲。
過濾
Get-ChildItem
PowerShell 命令不僅可以從驅動器中擷取所有對象,還可以通過幾個不同的參數進行信息過濾:Filter
、Include
和 Exclude
。在可能的情況下,您總是應該使用普遍存在的 PowerShell Filter
參數。該參數將過濾語法直接傳遞給個別提供程序。雖然這種語法更快,但它完全依賴於正在查詢的提供程序。
例如,對於查詢文件,Filter
語法 Name -eq 'foo'
可能完全正常,但對於查詢注冊表則根本不起作用,因為注冊表提供程序甚至沒有過濾器!
即使一切失敗,您還可以使用 Include
和 Exclude
參數。
此 PowerShell 命令還具有一些特定於文件系統的參數,例如 Force
,它將輸出隱藏的文件和文件夾,File
和 Directory
僅查找文件或文件夾。請查看完整的 Get-ChildItem
詳細信息,您可以通過 Get-Help
或在 Microsoft 文檔 中找到。
Get-ChildItem
的另一個很酷的功能是在使用通配符時解析路徑。在 PowerShell 中,通配符通常表示任何字符。例如,如果您想查看所有具有 .txt 文件擴展名的文件,只需指定文件夾路徑和 *.txt
。
我們也可以根據文件屬性進行過濾。也許我們只想在文件夾中找到唯讀文件。
總結
這個PowerShell命令是你會反復使用的命令之一。大多數情況下,你可能會使用FileSystem提供程序,但重要的是要記住,這個命令是可以做更多事情的。可以使用它來查詢文件、文件夾、註冊表鍵、註冊表值、證書、Active Directory用戶、計算機,甚至是環境變量、函數等等!
如果有疑問,運行Get-PSDrive
命令可以查看所有已加載的PowerShell驅動器列表,Get-ChildItem
可以為你查詢。