about_FileSystem_Provider

提供者名稱

FileSystem

磁碟機

C:、 、 D:Temp: ...

Capabilities

FilterShouldProcess

簡短描述

提供檔案和目錄的存取權。

詳細描述

PowerShell FileSystem 提供者可讓您取得、新增、變更、清除和刪除 PowerShell 中的檔案和目錄。

FileSystem 磁碟驅動器是階層式命名空間,其中包含計算機上的目錄和檔案。 FileSystem 磁碟驅動器可以是邏輯或實體磁碟驅動器、目錄或對應的網路共用。

從 PowerShell 7.0 版開始,名為 TEMP: 的磁碟驅動器會對應至使用者的暫存目錄路徑。 PowerShell 使用 .NET GetTempPath() 方法來判斷暫存資料夾的位置。 在 Windows 上,位置與 相同 $env:TEMP。 在非 Windows 系統上,位置與 或 /tmp 如果未定義環境變數相同$env:TMPDIR

FileSystem 提供者支援本文所涵蓋的下列 Cmdlet。

此提供者公開的類型

檔案是 System.IO.FileInfo 類別的實例。 目錄是 System.IO.DirectoryInfo 類別的實例。

PowerShell 擴充類型系統會將額外的屬性新增至這些物件類型,以提供其他資訊。 某些資訊是平臺特定的。 例如,LinkType 屬性的可能值取決於所使用的平臺和文件系統。 Linux 和 macOS 檔案系統支援 HardLinkSymLink。 Windows NTFS 支援 、、 和 LinkType 的其他數個值。 JunctionSymLinkHardLink

當您使用 Get-ItemGet-ChildItem 來取得連結專案的相關信息時, Mode 屬性會 l 包含 ,表示該專案為連結。 LinkType 屬性包含連結的類型。

AppExecLink 當您從 Microsoft Store 安裝應用程式時,會建立連結。 針對AppExecLink連結,Windows 不會提供 LinkTypeLinkTarget 屬性的值

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 提供者會藉由將電腦上的任何邏輯磁碟驅動器對應為 PowerShell 磁碟驅動器,來公開其數據存放區。 若要使用 FileSystem 磁碟驅動器,您可以使用磁碟驅動器名稱,後面接著冒號 (:) 將位置變更為磁碟驅動器。

Set-Location C:

您也可以從任何其他 PowerShell 磁碟驅動器使用 FileSystem 提供者。 若要從另一個位置參考檔案或目錄,請使用路徑中的磁碟驅動器名稱 (C:D:, ...)。

注意

PowerShell 會使用別名,讓您熟悉使用提供者路徑的方式。 和 dirls 之類的命令現在是 的 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 參數搭配兩個值和 CompressedEncrypted 這些值是以逗號 , 分隔,代表 「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 參數、其 hah別名,或 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-ItemRemove-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:

另請參閱