about_FileSystem_Provider
提供者名稱
FileSystem
磁碟機
C:
、 、 D:
Temp:
...
功能
Filter、 ShouldProcess
簡短描述
提供檔案和目錄的存取權。
詳細描述
PowerShell FileSystem 提供者可讓您取得、新增、變更、清除和刪除 PowerShell 中的檔案和目錄。
FileSystem 磁碟驅動器是階層式命名空間,其中包含計算機上的目錄和檔案。 FileSystem 磁碟驅動器可以是邏輯或實體磁碟驅動器、目錄或對應的網路共用。
從 PowerShell 7.0 版開始,名為 TEMP:
的磁碟驅動器會對應至使用者的暫存目錄路徑。 PowerShell 使用 .NET GetTempPath() 方法來判斷暫存資料夾的位置。 在 Windows 上,位置與 相同 $env:TEMP
。 在非 Windows 系統上,位置與 或 /tmp
如果未定義環境變數相同$env:TMPDIR
。
FileSystem 提供者支援本文所涵蓋的下列 Cmdlet。
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- 新增專案
- Remove-Item
- Get-ItemProperty
- 設置-ItemProperty
- Clear-Item
- Clear-ItemProperty
- Remove-Item
- Remove-ItemProperty
- Get-Acl
- Set-Acl
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
- Add-Content
- Clear-Content
- Get-Content
- Set-Content
此提供者公開的類型
檔案是 System.IO.FileInfo 類別的實例。 目錄是 System.IO.DirectoryInfo 類別的實例。
PowerShell 擴充類型系統會將額外的屬性新增至這些物件類型,以提供其他資訊。 某些資訊是平臺特定的。 例如,LinkType 屬性的可能值取決於所使用的平臺和文件系統。 Linux 和 macOS 檔案系統支援 HardLink
和 SymLink
。 Windows NTFS 支援 、、 和 LinkType 的其他數個值。 Junction
SymLink
HardLink
當您使用 Get-Item
或 Get-ChildItem
來取得連結專案的相關信息時, Mode 屬性會 l
包含 ,表示該專案為連結。 LinkType 屬性包含連結的類型。
AppExecLink
當您從 Microsoft Store 安裝應用程式時,會建立連結。 針對AppExecLink
連結,Windows 不會提供 LinkType 或 LinkTarget 屬性的值。
Get-Item ~\AppData\Local\Microsoft\WindowsApps\winget.exe
Directory: C:\Users\user1\AppData\Local\Microsoft\WindowsApps
Mode LastWriteTime Length Name
---- ------------- ------ ----
la--- 6/8/2023 12:20 PM 0 winget.exe ->
流覽 FileSystem 磁碟驅動器
FileSystem 提供者會藉由將電腦上的任何邏輯磁碟驅動器對應為 PowerShell 磁碟驅動器,來公開其數據存放區。 若要使用 FileSystem 磁碟驅動器,您可以使用磁碟驅動器名稱,後面接著冒號 (:
) 將位置變更為磁碟驅動器。
Set-Location C:
您也可以從任何其他 PowerShell 磁碟驅動器使用 FileSystem 提供者。 若要從另一個位置參考檔案或目錄,請使用路徑中的磁碟驅動器名稱 (C:
, D:
, ...)。
注意
PowerShell 會使用別名,讓您熟悉使用提供者路徑的方式。 和 dir
ls
之類的命令現在是 的 Get-ChildItem
別名, cd
是 的 Set-Location
別名。 和 pwd
是的 Get-Location
別名。
取得檔案和目錄
Cmdlet 會 Get-ChildItem
傳回目前位置中的所有檔案和目錄。 您可以指定不同的搜尋路徑,並使用內建參數來篩選和控制遞歸深度。
Get-ChildItem
若要深入瞭解 Cmdlet 使用方式,請參閱 Get-ChildItem。
複製檔案和目錄
Cmdlet 會將 Copy-Item
檔案和目錄複製到您指定的位置。
參數可用來篩選和遞歸,類似於 Get-ChildItem
。
下列命令會將資料夾C:\Windows\Temp
路徑C:\temp\
下的所有檔案與目錄複製到 。
Copy-Item -Path C:\temp\* -Destination C:\Windows\Temp -Recurse -File
Copy-Item
覆寫目的地目錄中的檔案,而不提示確認。
此命令會將 a.txt
檔案從 C:\a
目錄 C:\a\bb
複製到 目錄。
Copy-Item -Path C:\a\a.txt -Destination C:\a\bb\a.txt
將目錄中的所有目錄和檔案 C:\a
複製到 C:\c
目錄。 如果要複製的任何目錄已存在於目的地目錄中,除非您指定 Force 參數,否則命令會失敗。
Copy-Item -Path C:\a\* -Destination C:\c -Recurse
如需詳細資訊,請參閱 Copy-Item。
移動檔案和目錄
這個指令會將 c.txt
目錄中的 C:\a
檔案移至 C:\a\aa
目錄:
Move-Item -Path C:\a\c.txt -Destination C:\a\aa
根據預設,Cmdlet 不會覆寫具有相同名稱的現有檔案。 若要強制 Cmdlet 覆寫現有的檔案,請指定 Force 參數。
當該目錄是目前的位置時,您無法移動目錄。 當您使用 Move-Item
在目前位置移動目錄時,您會看到此錯誤。
C:\temp> Move-Item -Path C:\temp\ -Destination C:\Windows\Temp
Move-Item : Cannot move item because the item at 'C:\temp\' is in use.
At line:1 char:1
+ Move-Item C:\temp\ C:\temp2\
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Move-Item], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand
管理檔案內容
取得檔案的內容
此命令會取得 「Test.txt」 檔案的內容,並在控制台中顯示它們。
Get-Content -Path Test.txt
您可以使用管線將檔案的內容傳送至另一個 Cmdlet。 例如,下列命令會讀取檔案的內容,然後將這些內容Test.txt
作為 ConvertTo-Html Cmdlet 的輸入:
Get-Content -Path Test.txt | ConvertTo-Html
您也可以在檔案的提供者路徑前面加上貨幣符號 ($
) 來擷取檔案的內容。 路徑必須以大括弧括住,因為變數命名限制。 如需詳細資訊,請參閱 about_Variables。
${C:\Windows\System32\Drivers\etc\hosts}
將內容新增至檔案
此指令會將 「test content」 字串附加至 Test.txt
檔案:
Add-Content -Path test.txt -Value "test content"
檔案中 Test.txt
現有的內容不會刪除。
取代檔案的內容
此指令會將檔案的內容取代為 「test content Test.txt
」 字串:
Set-Content -Path test.txt -Value "test content"
它會覆寫 的內容 Test.txt
。 您可以在建立 Cmdlet 時,使用 Cmdlet 的 New-Item
Value 參數,將內容新增至檔案。
迴圈查看檔案的內容
根據預設, Get-Content
Cmdlet 會使用行尾字元做為其分隔符,因此它會取得檔案做為字串集合,其中每一行都是檔案中的一個字串串。
您可以使用 Delimiter 參數來指定替代分隔符。 如果您將它設定為代表區段結尾或下一節開頭的字元,您可以將檔案分割成邏輯部分。
第一個命令會取得 Employees.txt
檔案,並將其分割成區段,每一個區段的結尾都是「員工記錄結束」字組,並將它儲存在變數中 $e
。
第二個命令會使用陣列表示法,在中取得 集合 $e
中的第一個專案。 它會使用 0 的索引,因為 PowerShell 陣列是以零起始。
如需 Cmdlet 的詳細資訊 Get-Content
,請參閱 的說明 Get-Content
主題。
如需數位的詳細資訊,請參閱 about_Arrays。
$e = Get-Content c:\test\employees.txt -Delimited "End Of Employee Record"
$e[0]
管理安全性描述項
檢視檔案的 ACL
此命令會傳 回 System.Security.AccessControl.FileSecurity 物件:
Get-Acl -Path test.txt | Format-List -Property *
如需此對象的詳細資訊,請使用管線將命令傳送至 Get-Member Cmdlet,或參閱 FileSecurity 類別。
建立檔案和目錄
建立目錄
這個指令會在 logfiles
磁碟驅動器上 C
建立目錄:
New-Item -Path c:\ -Name logfiles -Type directory
PowerShell 也包含使用 mkdir
Cmdlet 來建立新目錄的New-Item
函式(別名md
)。
建立 檔案
此命令會在 log2.txt
目錄中建立檔案 C:\logfiles
,然後將 「test log」 字串新增至檔案:
New-Item -Path c:\logfiles -Name log2.txt -Type file
使用內容建立檔案
在目錄中建立名為 log2.txt
的檔案, C:\logfiles
並將字串 「test log」 新增至檔案。
New-Item -Path c:\logfiles -Name log2.txt -Type file -Value "test log"
重新命名檔案和目錄
重新命名檔案
這個指令會將 a.txt
目錄中的 C:\a
檔案重新命名為 b.txt
:
Rename-Item -Path c:\a\a.txt -NewName b.txt
重新命名目錄
這個指令會將 C:\a\cc
目錄重新命名為 C:\a\dd
:
Rename-Item -Path c:\a\cc -NewName dd
刪除檔案和目錄
刪除檔案
這個指令會 Test.txt
刪除目前目錄中的檔案:
Remove-Item -Path test.txt
使用通配符刪除檔案
這個指令會刪除目前目錄中具有 .xml
擴展名的所有檔案:
Remove-Item -Path *.xml
叫用相關聯的檔案來啟動程式
叫用檔案
Get-Service Cmdlet 可取得本機服務的相關信息,並將資訊管線傳送至 Export-Csv Cmdlet,以將資訊儲存在檔案中Services.csv
。
然後 Invoke-Item 會在 services.csv
與 .csv
擴展名相關聯的程式中開啟檔案:
Get-Service | Export-Csv -Path services.csv
Invoke-Item -Path services.csv
取得具有指定屬性的檔案和資料夾
取得系統檔案
此命令會取得目前目錄及其子目錄中的系統檔案。
它會使用 File 參數只取得檔案(而非目錄)和 System 參數,只取得具有 “system ” 屬性的專案。
它會使用 Recurse 參數來取得目前目錄和所有子目錄中的專案。
Get-ChildItem -File -System -Recurse
取得隱藏的檔案
此命令會取得目前目錄中的所有檔案,包括隱藏的檔案。
它會使用 Attributes 參數搭配兩個值, !Directory+Hidden
這個值會取得隱藏的檔案,而 !Directory
會取得所有其他檔案。
Get-ChildItem -Attributes !Directory,!Directory+Hidden
dir -att !d,!d+h
相當於此命令。
取得壓縮和加密的檔案
此命令會取得目前目錄中已壓縮或加密的檔案。
它會使用 Attributes 參數搭配兩個值和 Compressed
Encrypted
。 這些值是以逗號 ,
分隔,代表 「OR」 運算子。
Get-ChildItem -Attributes Compressed,Encrypted
動態參數
動態參數是PowerShell提供者所新增的 Cmdlet 參數,只有在啟用提供者的磁碟驅動器中使用 Cmdlet 時才能使用。
編碼編碼<>
指定檔案編碼。 預設值為 ASCII。
ascii
:使用 ASCII (7 位) 字元集的編碼方式。bigendianunicode
:使用 big-endian 位元組順序以 UTF-16 格式編碼。bigendianutf32
:使用 big-endian 位元組順序以 UTF-32 格式編碼。oem
:使用 MS-DOS 和控制台程式的預設編碼方式。unicode
:使用位元組順序以UTF-16格式編碼。utf7
:以 UTF-7 格式編碼。utf8
:以 UTF-8 格式編碼。utf8BOM
:使用位元節順序標記以 UTF-8 格式編碼 (BOM)utf8NoBOM
:以 UTF-8 格式編碼,不含位元組順序標記 (BOM)utf32
:以 UTF-32 格式編碼。
支援的 Cmdlet
Add-Content
Get-Content
Set-Content
分隔符 <字串>
指定用來在讀取檔案時將檔案分割成 物件的分隔符 Get-Content
。
預設值為 \n
,也就是行尾字元。
讀取文字檔時, Get-Content
會傳回字串物件的集合,每個物件都是以分隔符結尾。
輸入不存在於檔案中的分隔符, Get-Content
會將整個檔案當做單一未分隔的對象傳回。
您可以使用此參數將大型檔案分割成較小的檔案,方法是指定檔案分隔符,例如「範例結尾」做為分隔符。 分隔符會保留(未捨棄),並成為每個檔案區段中的最後一個專案。
注意
目前,當 Delimiter 參數的值是空字串時,Get-Content
不會傳回任何專案。 這是已知的問題。 若要強制 Get-Content
傳回整個檔案做為單一未匯入字串,請輸入檔案中不存在的值。
支援的 Cmdlet
Get-Content
Wait <SwitchParameter>
等候內容附加至檔案。 如果附加內容,則會傳回附加的內容。 如果內容已變更,則會傳回整個檔案。
等候時, Get-Content
請每秒檢查一次檔案,直到您中斷檔案為止,例如按 CTRL+C。
支援的 Cmdlet
Get-Content
Attributes <FlagsExpression>
取得具有指定屬性的檔案和資料夾。 此參數支援所有屬性,並可讓您指定屬性的複雜組合。
Attributes 參數是在 Windows PowerShell 3.0 中引進的。
Attributes 參數支援下列屬性:
- 封存
- Compressed
- 裝置
- 目錄
- 已加密
- Hidden
- Normal
- NotContentIndexed
- 離線
- ReadOnly
- ReparsePoint
- 疏鬆File
- 系統
- 臨時
如需這些屬性的描述,請參閱 FileAttributes 列舉。
使用下列運算符來結合屬性。
!
-不+
-和,
-或
運算子與其屬性之間不允許空格。 不過,逗號之前允許空格。
支援的 Cmdlet
Get-ChildItem
目錄 <SwitchParameter>
取得目錄(資料夾)。
Directory 參數是在 Windows PowerShell 3.0 中引進的。
若要只取得目錄,請使用 Directory 參數並省略 File 參數。 若要排除目錄,請使用 File 參數並省略 Directory 參數,或使用 Attributes 參數。
支援的 Cmdlet
Get-ChildItem
檔案 <SwitchParameter>
取得檔案。
File 參數是在 Windows PowerShell 3.0 中引進的。
若要只取得檔案,請使用 File 參數並省略 Directory 參數。 若要排除檔案,請使用 Directory 參數並省略 File 參數,或使用 Attributes 參數。
支援的 Cmdlet
Get-ChildItem
Hidden <SwitchParameter>
只取得隱藏的檔案和目錄(資料夾)。 根據預設, Get-ChildItem
只會取得非隱藏的專案。
Hidden 參數是在 Windows PowerShell 3.0 中引進的。
若要只取得隱藏的專案,請使用 Hidden 參數、其 h
或ah
別名,或 Attributes 參數的 Hidden 值。 若要排除隱藏的專案,請省略 Hidden 參數或使用 Attributes 參數。
支援的 Cmdlet
Get-ChildItem
ReadOnly <SwitchParameter>
只取得唯讀檔案和目錄(資料夾)。
ReadOnly 參數是在 Windows PowerShell 3.0 中引進的。
若要取得唯讀專案,請使用 ReadOnly 參數、其ar
別名或 Attributes 參數的 ReadOnly 值。 若要排除唯讀專案,請使用 Attributes 參數。
支援的 Cmdlet
Get-ChildItem
系統 <SwitchParameter>
只取得系統檔案和目錄(資料夾)。
System 參數是在 Windows PowerShell 3.0 中引進的。
若要只取得系統檔案和資料夾,請使用 System 參數、其as
別名或 Attributes 參數的系統值。 若要排除系統檔案和資料夾,請使用 Attributes 參數。
支援的 Cmdlet
Get-ChildItem
NewerThan <DateTime>
$True
當檔案的值大於指定的日期時LastWriteTime
,傳回 。 否則會傳回 $False
。
輸入 DateTime 物件,例如 Get-Date Cmdlet 傳回的物件,或可轉換成 DateTime 物件的字串,例如 "August 10, 2011 2:00 PM"
。
支援的 Cmdlet
OlderThan <DateTime>
$True
當檔案的值小於指定的日期時LastWriteTime
,傳回 。 否則會傳回 $False
。
輸入 DateTime 物件,例如 Get-Date
Cmdlet 傳回的物件,或可轉換成 DateTime 物件的字串,例如 "August 10, 2011 2:00 PM"
。
支援的 Cmdlet
Test-Path
串流 <字串>
管理替代數據流。 輸入數據流名稱。 只有在檔案系統磁碟驅動器中的 Get-Item
和 Remove-Item
命令中才允許通配符。
支援的 Cmdlet
Add-Content
Clear-Content
Get-Item
Get-Content
Remove-Item
Set-Content
Raw <SwitchParameter>
忽略換行符。 以單一專案的形式傳回內容。
支援的 Cmdlet
Get-Content
ItemType <字串>
此參數可讓您指定要使用 New-Item
建立的項目類型。
此參數的可用值取決於您所使用的目前提供者。
FileSystem
在磁碟驅動器中,允許下列值:
- 檔案
- Directory
- SymbolicLink
- Junction
- HardLink
支援的 Cmdlet
New-Item
使用管線
提供者 Cmdlet 接受管線輸入。 您可以使用管線來簡化工作,方法是將提供者數據從某個 Cmdlet 傳送至另一個提供者 Cmdlet。 若要深入瞭解如何搭配提供者 Cmdlet 使用管線,請參閱本文中提供的 Cmdlet 參考。
取得說明
從 Windows PowerShell 3.0 開始,您可以取得提供者 Cmdlet 的自定義說明主題,說明這些 Cmdlet 在文件系統磁碟驅動器中的運作方式。
若要取得針對檔案系統磁碟驅動器自定義的說明主題,請在檔案系統磁碟驅動器中執行 Get-Help 命令,或使用的 Get-Help
Path 參數來指定檔案系統磁碟驅動器。
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path c: