本章主要承接第4章中關於文件系統的話題,探討 PowerShell 中如何進行基本的文件操做等,也據此做爲第一部分的總結。ide
PowerShell 中將 UNIX 經常使用的 cd / pwd / pushd / popd
經過別名的方式提供了出來,也標識出路徑所對應的名詞應當是 Location
。函數
# PowerShell Core 下的導航 PS /> Get-Alias cd CommandType Name Version Source ----------- ---- ------- ------ Alias cd -> Set-Location PS /> Get-Alias pwd CommandType Name Version Source ----------- ---- ------- ------ Alias pwd -> Get-Location PS /> Get-Alias popd CommandType Name Version Source ----------- ---- ------- ------ Alias popd -> Pop-Location PS /> Get-Alias pushd CommandType Name Version Source ----------- ---- ------- ------ Alias pushd -> Push-Location
Get-Location
所返回的對象並不包含詳細的做爲文件對象的信息,用於獲取詳細信息的的即爲 Get-Item
或 Get-ItemProperty
:post
# Get-Location 返回的對象不包含詳細的文件信息,只是提供該 Location 相對於 Provider 下的信息 PS /root> Get-Location | Get-Member -MemberType Property TypeName: System.Management.Automation.PathInfo Name MemberType Definition ---- ---------- ---------- Drive Property System.Management.Automation.PSDriveInfo Drive {get;} Path Property string Path {get;} Provider Property System.Management.Automation.ProviderInfo Provider {get;} ProviderPath Property string ProviderPath {get;} # Get-Item 用於獲取路徑對應的對象,其所攜帶的便該對象的詳細信息 PS /root> Get-Item -Path .| Get-Member -MemberType Property TypeName: System.IO.DirectoryInfo Name MemberType Definition ---- ---------- ---------- Attributes Property System.IO.FileAttributes Attributes {get;set;} CreationTime Property datetime CreationTime {get;set;} CreationTimeUtc Property datetime CreationTimeUtc {get;set;} Exists Property bool Exists {get;} Extension Property string Extension {get;} FullName Property string FullName {get;} LastAccessTime Property datetime LastAccessTime {get;set;} LastAccessTimeUtc Property datetime LastAccessTimeUtc {get;set;} LastWriteTime Property datetime LastWriteTime {get;set;} LastWriteTimeUtc Property datetime LastWriteTimeUtc {get;set;} Name Property string Name {get;} Parent Property System.IO.DirectoryInfo Parent {get;} Root Property System.IO.DirectoryInfo Root {get;}
經過 Get-ChildItem
亦可得到該路徑下的全部子對象,並可對其進行操做:學習
PS /> Get-ChildItem -Path . Directory: / Mode LastWriteTime Length Name ---- ------------- ------ ---- d----l 8/4/18 10:04 PM bin d----- 9/19/18 5:52 AM dev d----- 9/15/18 5:52 AM etc d----- 4/11/18 4:59 AM home d----l 8/4/18 10:04 PM lib d----l 8/4/18 10:04 PM lib64 d----- 4/11/18 4:59 AM media d----- 4/11/18 4:59 AM mnt d----- 9/13/18 11:37 PM opt d-r--- 9/19/18 5:52 AM proc d-r--- 9/15/18 5:52 AM root d----- 9/18/18 3:51 AM run d----l 8/4/18 10:04 PM sbin d----- 4/11/18 4:59 AM srv d-r--- 9/19/18 5:52 AM sys d----- 9/19/18 5:52 AM tmp d----- 8/4/18 10:04 PM usr d----- 8/4/18 10:04 PM var ------ 8/4/18 10:05 PM 12005 anaconda-post.log # 從 ChildItem 中選取 Item PS /> (Get-ChildItem -Path .)[0] Directory: / Mode LastWriteTime Length Name ---- ------------- ------ ---- d----l 8/4/18 10:04 PM bin # 也可附加 -Recursive 以進行遞歸搜索,這樣將獲取該路徑下的全部 Item # 例如在 /opt 下有 526 個 Item PS /> (Get-ChildItem -Path /opt -Recurse).Length 526 # 同時也可附加 -Include 以篩選部分須要的 Item # 例如在 /opt 下面有 400 個 DLL 庫 PS /> (Get-ChildItem -Path /opt -Recurse -Include *.DLL).Length 400
文件(對象)操做均依賴於 *-Item
cmdlet 族:code
PS /tmp> Get-Command -noun item CommandType Name Version Source ----------- ---- ------- ------ Cmdlet Clear-Item 6.1.0.0 Microsoft.PowerShell.Management Cmdlet Copy-Item 6.1.0.0 Microsoft.PowerShell.Management Cmdlet Get-Item 6.1.0.0 Microsoft.PowerShell.Management Cmdlet Invoke-Item 6.1.0.0 Microsoft.PowerShell.Management Cmdlet Move-Item 6.1.0.0 Microsoft.PowerShell.Management Cmdlet New-Item 6.1.0.0 Microsoft.PowerShell.Management Cmdlet Remove-Item 6.1.0.0 Microsoft.PowerShell.Management Cmdlet Rename-Item 6.1.0.0 Microsoft.PowerShell.Management Cmdlet Set-Item 6.1.0.0 Microsoft.PowerShell.Management
文件或路徑等建立,可以使用 New-Item
:對象
# 建立 Directory 類型的文件,即爲目錄 PS /tmp> New-Item -ItemType Directory newDir Directory: /tmp Mode LastWriteTime Length Name ---- ------------- ------ ---- # 建立 File 類型的文件,即爲普通文件 PS /tmp> New-Item -ItemType File newFile Directory: /tmp Mode LastWriteTime Length Name ---- ------------- ------ ---- ------ 9/19/18 6:38 AM 0 newFile # 建立 SymbolicLink 類型的文件,即爲符號連接 PS /tmp> New-Item -Name yum.log.link -Type SymbolicLink -Value ./yum.log Directory: /tmp Mode LastWriteTime Length Name ---- ------------- ------ ---- -----l 9/19/18 6:42 AM 12 yum.log.link
文件或路徑等移動 / 複製 / 刪除 / 重命名等,可以使用 Move / Copy / Remove / Rename-Item
:遞歸
PS /tmp> Move-Item -Path ./newFile -Destination ./newDir/ PS /tmp> Copy-Item -Path ./newDir/newFile -Destination ./ # newDir 非空,因此在刪除時能夠加上遞歸,以省略到確認過程 PS /tmp> Remove-Item -Force ./newDir/ Confirm The item at /tmp/newDir/ has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): PS /tmp> Remove-Item -Recurse ./newDir/ PS /tmp> Rename-Item -Path ./newFile -NewName nextFile PS /tmp> Get-Item ./nextFile Directory: /tmp Mode LastWriteTime Length Name ---- ------------- ------ ---- ------ 9/19/18 6:38 AM 0 nextFile
Invoke-Item
用於打開文件,主要見於 Windows 平臺,UNIX 平臺直接使用 CLI 調用二進制便可:ci
# 運行於 Windows 上,將打開 .log 格式綁定的默認應用程序 PS C:\Users\chuny> Invoke-Item .\AMDRM_Install.log
Clear-Item
主要用於 Windows 平臺清理某個註冊表中的值集合,不經常使用。rem
操做文件屬性,依靠 Item
對象屬性相關的 getter / setter 函數,即 Get / Set-ItemProperty
:get
PS /tmp> (Get-ItemProperty ./yum.log).IsReadOnly False PS /tmp> Set-ItemProperty ./yum.log -Name isReadOnly -Value $true PS /tmp> (Get-ItemProperty ./yum.log).IsReadOnly True