共用方式為


about_FileSystem_Provider

提供者名稱

FileSystem

磁碟機

C:, D:, Temp: ...

功能

FilterShouldProcess

簡短描述

提供檔案與目錄的存取。

詳細描述

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

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

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

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

此提供者公開的類型

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

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

當您使用 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:\c的所有目錄和檔案C:\a複製到 目錄。 如果要複製的任何目錄已經存在目的地目錄中,除非指定 Force 參數,否則命令會失敗。

Copy-Item -Path C:\a\* -Destination C:\c -Recurse

如需詳細資訊,請參閱 Copy-Item

移動檔案和目錄

這個指令會將c.txt目錄中C:\a\aaC:\a檔案移至 目錄:

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.txt 取代為 「test content」 字串:

Set-Content -Path test.txt -Value "test content"

它會覆寫 的內容 Test.txt。 您可以在建立 Cmdlet 時,使用 Cmdlet 的 New-ItemValue 參數,將內容新增至檔案。

迴圈查看檔案的內容

根據預設, Get-Content Cmdlet 會使用行尾字元做為其分隔符,因此它會取得檔案做為字串集合,並以檔案中的每一行做為一個字元串。

您可以使用 分隔符 參數來指定替代分隔符。 如果您將它設定為代表某區段結尾或下一區段開頭的字元,就可以將檔案分割為邏輯部分。

第一個命令會取得 Employees.txt 檔案,並將其分割成區段,其中每一個都以“End of Employee Record” 一詞結尾,並將它儲存在變數中 $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 建立新目錄的函式 (別名 md) New-Item

建立檔案

此命令會在 log2.txt 目錄中建立檔案 C:\logfiles ,然後將 「test log」 字串新增至檔案:

New-Item -Path c:\logfiles -Name log2.txt -Type file

建立具有內容的檔案

在目錄中建立名為 log2.txtC:\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 會在與.csv擴展名相關聯的程式中開啟services.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:使用大位元組位元組順序以UTF-16格式編碼。
  • bigendianutf32:使用大位元組位元組順序以UTF-32格式編碼。
  • oem:使用 MS-DOS 和控制台程式的預設編碼方式。
  • unicode:使用小位元節順序以UTF-16格式編碼。
  • utf7:以 UTF-7 格式編碼。
  • utf8:以 UTF-8 格式編碼。
  • utf8BOM:使用位元節順序標記 (BOM) ,以 UTF-8 格式編碼
  • utf8NoBOM:以 UTF-8 格式編碼,不含位元組順序標記 (BOM)
  • utf32:以 UTF-32 格式編碼。

支援的 Cmdlet

  • Add-Content
  • Get-Content
  • Set-Content

分隔符 <字串>

指定用來在讀取檔案時將檔案分割成物件的分隔符 Get-Content

預設值為 \n,這是行尾字元。

讀取文字檔時, Get-Content 傳回字串物件的集合,每個物件都是以分隔符結尾。

輸入檔案中不存在的分隔符, Get-Content 會將整個檔案傳回為單一、未分隔的物件。

您可以使用這個參數,藉由指定檔案分隔符號 (例如 "End of Example") 做為分隔符號,將大型檔案分割成較小的檔案。 分隔符號會保留 (不會被捨棄),並成為每個檔案區段中的最後一個項目。

注意

目前,當 分隔符 參數的值是空字串時, 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
  • 一般
  • NotContentIndexed
  • 離線
  • ReadOnly
  • ReparsePoint
  • 疏鬆File
  • 系統
  • 暫存

如需這些屬性的描述,請參閱 FileAttributes 列舉。

使用下列運算子來結合屬性。

  • ! -不
  • + -和
  • , -或

運算子和其屬性之間不允許有任何空格。 不過,逗號之前可以有空格。

支援的 Cmdlet

  • Get-ChildItem

目錄 <SwitchParameter>

取得目錄 (資料夾)。

目錄參數是在 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 物件,例如 Cmdlet 傳回的 Get-Date 物件,或可以轉換成 DateTime 物件的字串,例如 "August 10, 2011 2:00 PM"

支援的 Cmdlet

  • Test-Path

<Stream 字串>

管理替代資料流。 輸入資料流名稱。 只有在檔案系統磁碟驅動器中的 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 磁碟驅動器中,允許下列值:

  • 檔案
  • 目錄
  • SymbolicLink
  • 接合
  • HardLink

支援的 Cmdlet

  • New-Item

使用管線

提供者 Cmdlet 接受管線輸入。 您可以使用管線來簡化工作,方法是將提供者數據從一個 Cmdlet 傳送至另一個提供者 Cmdlet。 若要深入瞭解如何搭配提供者 Cmdlet 使用管線,請參閱本文中提供的 Cmdlet 參考。

取得說明

從 Windows PowerShell 3.0 開始,您可以取得提供者 Cmdlet 的自訂說明主題,這些主題說明這些 Cmdlet 在檔案系統磁碟機中的行為方式。

若要取得針對檔案系統磁碟驅動器自定義的說明主題,請在檔案系統磁碟驅動器中執行 Get-Help 命令,或使用的 Get-HelpPath 參數來指定檔案系統磁碟驅動器。

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path c:

另請參閱