FileSystem 提供者
提供者名稱
FileSystem
磁碟機
C:
, D:
...
功能
Filter、 ShouldProcess
簡短描述
提供檔案與目錄的存取。
詳細描述
PowerShell FileSystem 提供者可讓您取得、新增、變更、清除和刪除 PowerShell 中的檔案和目錄。
FileSystem 磁碟驅動器是階層式命名空間,其中包含您電腦上的目錄和檔案。 FileSystem 磁碟驅動器可以是邏輯或平板磁碟驅動器、目錄或對應的網路共用。
FileSystem 提供者支援下列 Cmdlet,本文涵蓋這些 Cmdlet。
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- New-Item
- Remove-Item
- Get-ItemProperty
- Set-ItemProperty
- Clear-Item
- Clear-ItemProperty
- Remove-Item
- Remove-ItemProperty
- Get-Acl
- Set-Acl
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
此提供者所公開的類型
檔案是 System.IO.FileInfo 類別的實例。 目錄是 System.IO.DirectoryInfo 類別的實例。
巡覽 FileSystem 磁碟驅動器
FileSystem 提供者會藉由將電腦上的任何邏輯磁碟驅動器對應為 PowerShell 磁碟驅動器來公開其數據存放區。 若要使用 FileSystem 磁碟驅動器,您可以將位置變更為磁碟驅動器名稱,後面接著冒號 (:
) 。
Set-Location C:
您也可以從任何其他 PowerShell 磁碟驅動器使用 FileSystem 提供者。 若要從其他位置參考檔案或目錄,請使用路徑中的磁碟驅動器名稱 (C:
、 D:
...) 。
注意
PowerShell 會使用別名,讓您熟悉使用提供者路徑。 和 ls
之類的dir
命令現在是 Get-ChildItem 的別名,cd
是 Set-Location 的別名。 和 pwd
是 Get-Location 的別名。
取得檔案和目錄
Cmdlet 會 Get-ChildItem
傳回目前位置中的所有檔案和目錄。 您可以指定要搜尋的不同路徑,並使用內建參數來篩選和控制遞歸深度。
Get-ChildItem
若要深入瞭解 Cmdlet 使用方式,請參閱 Get-ChildItem。
複製檔案和目錄
Cmdlet Copy-Item
會將檔案和目錄複製到您指定的位置。
參數可用來篩選和遞歸,類似於 Get-ChildItem
。
下列命令會將路徑 「C:\temp」 下的所有檔案和目錄複製到資料夾 「C:\Windows\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 覆寫現有的檔案,請指定 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
取代為「測試內容」字串:
Set-Content -Path test.txt -Value "test content"
它會覆寫 的內容 Test.txt
。 您可以使用 New-Item Cmdlet 的 Value 參數,在建立檔案時將內容新增至檔案。
迴圈查看檔案的內容
根據預設, Get-Content
Cmdlet 會使用行尾字元做為其分隔符,因此它會取得檔案做為字串集合,並將每一行當做檔案中的一個字元串。
您可以使用 -Delimiter
參數來指定替代分隔符。 如果您將它設定為代表某區段結尾或下一區段開頭的字元,就可以將檔案分割為邏輯部分。
第一個命令會 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 類別。
修改檔案的 ACL
Create 並設定檔案的 ACL
建立檔案和目錄
建立目錄
這個指令會在 logfiles
磁碟驅動器上 C
建立目錄:
New-Item -Path c:\ -Name logfiles -Type directory
PowerShell 也包含使用 mkdir
New-Item Cmdlet 建立新目錄的函式 (別名 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,在與擴展名相關聯的.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
參數搭配兩個值和 Compressed
Encrypted
。 這些值會以逗號 ,
分隔,代表 「OR」 運算符。
Get-ChildItem -Attributes Compressed,Encrypted
動態參數
動態參數是PowerShell提供者新增的 Cmdlet 參數,只有在啟用提供者的磁碟驅動器中使用 Cmdlet 時才可使用。
編碼 <Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding>
指定檔案的編碼方式。 預設值為 ASCII。
- ASCII:使用 ASCII (7 位) 字元集的編碼方式。
- BigEndianUnicode:使用 big-endian 位元組順序以 UTF-16 格式編碼。
- 字串:使用字串的編碼類型。
- Unicode:使用位元組由小到大的順序以UTF-16格式編碼。
- UTF7:以UTF-7格式編碼。
- UTF8:以UTF-8格式編碼。
- UTF8BOM:使用位元組順序標記 (BOM) 以 UTF-8 格式編碼
- UF8NOBOM:以UTF-8格式編碼,不含位元組順序標記 (BOM)
- UTF32:以 UTF-32 格式編碼。
- 預設值:在預設安裝的代碼頁中編碼。
- OEM:使用 MS-DOS 和控制台程式的預設編碼方式。
- 未知:編碼類型未知或無效。 資料可視為二進位檔。
支援的 Cmdlet
分隔符 <System.String>
指定分隔符號,讓 Get-Content 在讀取時可用來將檔案分割成物件。
預設值為 \n
,這是行尾字元。
讀取文字檔時, Get-Content 會傳回字串物件的集合,每個物件都是以分隔符結尾。
輸入檔案中不存在的分隔符, Get-Content 會將整個檔案當做單一未分隔的對象傳回。
您可以使用這個參數,藉由指定檔案分隔符號 (例如 "End of Example") 做為分隔符號,將大型檔案分割成較小的檔案。 分隔符號會保留 (不會被捨棄),並成為每個檔案區段中的最後一個項目。
注意
目前,當 參數的值 -Delimiter
是空字串時, Get-Content 不會傳回任何專案。
這是已知的問題。 若要強制 Get-Content 以單一、未分隔的物件形式傳回整個檔案,請輸入檔案中不存在的值。
支援的 Cmdlet
等候 <System.Management.Automation.SwitchParameter>
等候要附加至檔案的內容。 如果內容已附加,就會傳回附加的內容。 如果內容已變更,則會傳回整個檔案。
等候時,Get-Content 每秒會檢查檔案一次,直到您中斷它為止,例如,按下 CTRL+C。
支援的 Cmdlet
Attributes <FlagsExpression>
取得具有指定屬性的檔案和資料夾。 此參數支援所有屬性,可讓您指定複雜的屬性組合。
參數-Attributes
是在 Windows PowerShell 3.0 中引進的。
參數 -Attributes
支援下列屬性:
- 封存
- Compressed
- 裝置
- 目錄
- 已加密
- Hidden
- 一般
- NotContentIndexed
- 離線
- ReadOnly
- ReparsePoint
- 疏鬆File
- 系統
- 暫存
如需這些屬性的描述,請參閱 FileAttributes 列舉。
使用下列運算子來結合屬性。
!
-不+
-和,
-或
運算子和其屬性之間不允許有任何空格。 不過,逗號之前可以有空格。
支援的 Cmdlet
Directory <System.Management.Automation.SwitchParameter>
取得目錄 (資料夾)。
參數-Directory
是在 Windows PowerShell 3.0 中引進的。
若要只取得目錄,請使用 -Directory
參數並省略 -File
參數。 若要排除目錄,請使用 -File
參數並省略 -Directory
參數,或使用 -Attributes
參數。
支援的 Cmdlet
File <System.Management.Automation.SwitchParameter>
取得檔案。
參數-File
是在 Windows PowerShell 3.0 中引進的。
若要只取得檔案,請使用 -File
參數並省略 -Directory
參數。 若要排除檔案,請使用 -Directory
參數並省略 -File
參數,或使用 -Attributes
參數。
支援的 Cmdlet
隱藏 <System.Management.Automation.SwitchParameter>
只取得隱藏的檔案和目錄 (資料夾)。 根據預設, Get-ChildItem 只會取得非隱藏的專案。
參數-Hidden
是在 Windows PowerShell 3.0 中引進的。
若要只取得隱藏的專案,請使用 -Hidden
參數、其 h
或ah
別名,或參數的 -Attributes
Hidden 值。 若要排除隱藏的專案,請省略 -Hidden
參數或使用 -Attributes
參數。
支援的 Cmdlet
ReadOnly <System.Management.Automation.SwitchParameter>
只取得唯讀的檔案和目錄 (資料夾)。
參數-ReadOnly
是在 Windows PowerShell 3.0 中引進的。
若要只取得唯讀專案,請使用 -ReadOnly
參數、其ar
別名或 參數的 -Attributes
ReadOnly 值。 若要排除唯讀專案,請使用 -Attributes
參數。
支援的 Cmdlet
System.Management.Automation.SwitchParameter <>
只取得系統檔案和目錄 (資料夾)。
參數-System
是在 Windows PowerShell 3.0 中引進的。
若要只取得系統檔案和資料夾,請使用 -System
參數、其as
別名或 參數的系統-Attributes
值。 若要排除系統檔案和資料夾,請使用 -Attributes
參數。
支援的 Cmdlet
NewerThan <System.DateTime>
$True
當檔案的值大於指定的日期時LastWriteTime
,傳回 。 否則會傳回 $False
。
輸入 DateTime 物件,例如 Get-Date Cmdlet 傳回的物件,或可以轉換成 DateTime 物件的字串,例如 "August 10, 2011 2:00 PM"
。
支援的 Cmdlet
OlderThan <System.DateTime>
$True
當檔案的值小於指定的日期時LastWriteTime
,傳回 。 否則會傳回 $False
。
輸入 DateTime 物件,例如 Get-Date Cmdlet 傳回的物件,或可以轉換成 DateTime 物件的字串,例如 "August 10, 2011 2:00 PM"
。
支援的 Cmdlet
<Stream System.String>
管理替代資料流。 輸入資料流名稱。 只有在文件系統磁碟驅動器的 Get-Item 和 Remove-Item 命令中,才允許通配符。
支援的 Cmdlet
Raw <SwitchParameter>
忽略新行字元。 以單一項目形式傳回內容。
支援的 Cmdlet
ItemType <字串>
此參數可讓您指定要使用 建立的項目樣式 New-Item
此參數的可用值取決於您所使用的目前提供者。
在 FileSystem
磁碟驅動器中,允許下列值:
- 檔案
- 目錄
- SymbolicLink
- 接合
- HardLink
支援的 Cmdlet
使用管線
提供者 Cmdlet 接受管線輸入。 您可以使用管線來簡化工作,方法是將提供者數據從一個 Cmdlet 傳送至另一個提供者 Cmdlet。 若要深入瞭解如何搭配提供者 Cmdlet 使用管線,請參閱本文中提供的 Cmdlet 參考。
取得說明
從 Windows PowerShell 3.0 開始,您可以取得提供者 Cmdlet 的自訂說明主題,這些主題說明這些 Cmdlet 在檔案系統磁碟機中的行為方式。
若要取得針對文件系統磁碟驅動器自定義的說明主題,請在檔案系統磁碟驅動器中執行 Get-Help 命令,或使用 -Path
Get-Help 參數來指定檔案系統磁碟驅動器。
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path c: