前面的一篇文章我們說了部分在PS中進行文件瀏覽的基本概念,說到了幾個虛擬驅動器的概念。並沒有深入的描述相關的命令,這里我們進一步對這一知識點進行描述。
2.1 管理當前工作路徑/位置
在日常管理中經常需要對當前的路徑進行查詢和管理;PS提供了四個管理的cmdlet: get-location、set-location、push-location、pop-location。
get-location: 相當於unix/Linux中的‘pwd’;用於獲取當前的工作路徑
set-location: 相當於chdir、cd命令,用於改變當前工作路徑
push-location: 這是PS中新增加的特性, 當用這個命令的時候,PS就會創建一個歷史路徑堆棧,這個堆棧用來存儲push-location的路徑信息, push-location用來將路徑保存
到歷史路徑堆棧。
pop-location: 用來將當前工作路徑切換到歷史路徑堆棧的最后一條記錄中的位置,並且刪除最上的一條記錄。
Exp:利用push/pop-loction命令切換工作路徑
PS C:\Users\vol_20120330> push-location -path c:\ _____________________________________________________________________________ PS C:\> get-location Path ---- C:\ _____________________________________________________________________________ PS C:\> pop-location _____________________________________________________________________________ PS C:\Users\vol_20120330> get-location Path ---- C:\Users\vol_20120330
如上所示: 首先用push-location命令保存當前路徑並且將當前工作路徑切換到C:\ ; 接下來用get-location查看是否切換成功; 然后用pop-location命令切回到原先
保存的路徑,並用get-location驗證。
2、2 獲取當前系統支持的驅動器信息
get-psdrive 命令獲取當前系統支持的驅動器。
Exp: 利用get-psdrive獲取當前我的系統上支持的驅動器
PS C:\Users\vol_20120330> get-psdrive 警告: 列“CurrentLocation”無法顯示,已被刪除。 Name Used (GB) Free (GB) Provider Root ---- --------- --------- -------- ---- Alias Alias C 17.89 11.41 FileSystem C:\ cert Certificate \ D 7.01 22.29 FileSystem D:\ E 35.61 22.98 FileSystem E:\ Env Environment F 26.06 32.54 FileSystem F:\ Function Function G 14.95 33.88 FileSystem G:\ H 31.67 17.15 FileSystem H:\ HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE I FileSystem I:\ K FileSystem K:\ N FileSystem N:\ Variable Variable WSMan WSMan
前面簡述過get-psdrive命令的psprovider參數,這里不再進行介紹,同時如果需要獲取相關信息,可以get-help online一下,可以得到比較詳細的信息。
我們也說過可以利用new-item 命令創建虛擬驅動器;這里我們介紹一個新的命令: new-psdrive。
new-psdrive常用的參數有: name 用來指定新的驅動器盤符名
psprovider 用來指定驅動器的提供程序
root 用來指定新驅動器代表的路徑
Exp: 利用new-psdrive命令創建mydirve: 盤符
PS C:\Users\vol_20120330> new-psdrive -name mydrive -psprovider filesystem -root $home 警告: 列“CurrentLocation”無法顯示,已被刪除。 Name Used (GB) Free (GB) Provider Root ---- --------- --------- -------- ---- mydrive 11.40 FileSystem C:\Users\vol_20120330
如實例所示,我們創建了一個盤符:mydrive。我們可以進入盤符進行操作:
PS C:\Users\vol_20120330> cd mydrive:\ _____________________________________________________________________________ PS mydrive:\> gl Path ---- mydrive:\
我們還可以刪除當前添加的盤符,這通過remove-psdrive命令實現,見實例。
Exp: 利用remove-psdrive命令刪除剛添加的驅動器盤符。
PS mydrive:\> remove-psdrive mydrive Remove-PSDrive : 無法刪除驅動器“mydrive”,因為它在使用中。 所在位置 行:1 字符: 15 + remove-psdrive <<<< mydrive + CategoryInfo : InvalidOperation: (:) [Remove-PSDrive], PSInvalid OperationException + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.Re movePSDriveCommand _____________________________________________________________________________ PS mydrive:\> cd c:\ _____________________________________________________________________________ PS C:\> remove-psdrive mydrive _____________________________________________________________________________ PS C:\> cd mydrive:\ Set-Location : 找不到驅動器。名為“mydrive”的驅動器不存在。 所在位置 行:1 字符: 3 + cd <<<< mydrive:\ + CategoryInfo : ObjectNotFound: (mydrive:String) [Set-Location], DriveNotFoundException + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.SetLo cationCommand
2、3 目錄和文件的建立、復制、移動和刪除
在windows PS中,用item表示在系統驅動器中的項目,因此用item作為cmdlet名詞部分的cmdlet都與文件或目錄的操作有關。
Exp:利用get-command的發現功能查詢文件操作相關命令
PS C:\> get-command *-item CommandType Name Definition ----------- ---- ---------- Cmdlet Clear-Item Clear-Item [-Path] <String[]... Cmdlet Copy-Item Copy-Item [-Path] <String[]>... Cmdlet Get-Item Get-Item [-Path] <String[]> ... Cmdlet Invoke-Item Invoke-Item [-Path] <String[... Cmdlet Move-Item Move-Item [-Path] <String[]>... Cmdlet New-Item New-Item [-Path] <String[]> ... Cmdlet Remove-Item Remove-Item [-Path] <String[... Cmdlet Rename-Item Rename-Item [-Path] <String>... Cmdlet Set-Item Set-Item [-Path] <String[]> ...
從上面可以看到一共有9個相關的命令,但是這並沒有包括全部的命令,因為還一個非常實用的命令:get-childitem;下面我們一一進行介紹:
1) get-item
get-item的作用是獲取指定位置的項的相關信息。
Exp:利用get-item獲取當前路徑下項的信息
PS C:\> get-item .\ 目錄: Mode LastWriteTime Length Name ---- ------------- ------ ---- d--hs 2012/4/20 6:38 C:\
Exp: 利用get-item獲取當前用戶home目錄的信息
PS C:\> get-item $home 目錄: C:\Users Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/5/12 17:31 vol_20120330
這個命令具體可以參考幫助,其他就多說了。
2)get-childitem
這個命令獲取某個項目中子項, 這個命令有很多的參數,但常用的有-name、 -recurse、-path、-force參數。
name: 指定獲取子項的時候僅枚舉子項的名稱。
recurse: 遞歸獲取
path: 指定要枚舉的路徑,這個參數可以省略
force: 獲取所有的子項,包括隱藏的子項
這個命令還有include、exclude兩個常用的參數,具體就不介紹了,大家可以查看幫助。
Exp:例舉當前路徑下的子項名稱
PS C:\> get-childitem -name DRIVERS PerfLogs Program Files Users Windows autoexec.bat config.sys gdiplus.dll
Exp: 獲取指定路徑下的子項——獲取$home路徑下的子項
PS C:\> get-childitem -path $home 目錄: C:\Users\vol_20120330 Mode LastWriteTime Length Name ---- ------------- ------ ---- d-r-- 2012/3/30 18:27 Contacts d-r-- 2012/5/12 17:19 Desktop d-r-- 2012/5/12 17:18 Documents d-r-- 2012/5/12 5:34 Downloads d-r-- 2012/5/2 9:51 Favorites d-r-- 2012/3/30 18:27 Links d-r-- 2012/4/30 14:15 Music d-r-- 2012/3/30 18:27 Pictures d-r-- 2012/3/30 18:27 Saved Games d-r-- 2012/3/30 18:27 Searches d-r-- 2012/3/30 18:27 Videos -a--- 2012/5/12 17:25 10346 process.txt -a--- 2012/5/12 17:31 5254 process1.txt -a--- 2012/4/15 19:14 509 regwizard.log -a--- 2012/4/15 19:14 9853 sanct.log _____________________________________________________________________________ PS C:\> get-childitem $home 目錄: C:\Users\vol_20120330 Mode LastWriteTime Length Name ---- ------------- ------ ---- d-r-- 2012/3/30 18:27 Contacts d-r-- 2012/5/12 17:19 Desktop d-r-- 2012/5/12 17:18 Documents d-r-- 2012/5/12 5:34 Downloads d-r-- 2012/5/2 9:51 Favorites d-r-- 2012/3/30 18:27 Links d-r-- 2012/4/30 14:15 Music d-r-- 2012/3/30 18:27 Pictures d-r-- 2012/3/30 18:27 Saved Games d-r-- 2012/3/30 18:27 Searches d-r-- 2012/3/30 18:27 Videos -a--- 2012/5/12 17:25 10346 process.txt -a--- 2012/5/12 17:31 5254 process1.txt -a--- 2012/4/15 19:14 509 regwizard.log -a--- 2012/4/15 19:14 9853 sanct.log
Exp: 獲取所有的子項,利用force參數
PS C:\> get-childitem -force 目錄: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d--hs 2012/3/30 18:27 $Recycle.Bin d--hs 2009/7/14 12:53 Documents and Settings d---- 2012/3/30 18:30 DRIVERS d-rh- 2012/4/3 16:33 MSOCache d---- 2009/7/14 10:37 PerfLogs d-r-- 2012/5/5 16:00 Program Files d--h- 2012/5/5 16:00 ProgramData d--hs 2012/3/30 18:26 Recovery d--hs 2012/5/6 9:18 System Volume Information d-r-- 2012/3/30 18:27 Users d---- 2012/5/5 14:54 Windows -a--- 2009/6/11 5:42 24 autoexec.bat -a--- 2009/6/11 5:42 10 config.sys -a--- 2008/9/10 15:00 1724416 gdiplus.dll -a-hs 2012/5/12 3:32 1551273984 hiberfil.sys -a-hs 2012/5/12 3:32 2068369408 pagefile.sys
Exp:遞歸獲取路徑下的子項
PS C:\> get-childitem -path $home -recurse 目錄: C:\Users\vol_20120330 Mode LastWriteTime Length Name ---- ------------- ------ ---- d-r-- 2012/3/30 18:27 Contacts d-r-- 2012/5/12 17:19 Desktop d-r-- 2012/5/12 17:18 Documents d-r-- 2012/5/12 5:34 Downloads d-r-- 2012/5/2 9:51 Favorites d-r-- 2012/3/30 18:27 Links d-r-- 2012/4/30 14:15 Music d-r-- 2012/3/30 18:27 Pictures d-r-- 2012/3/30 18:27 Saved Games d-r-- 2012/3/30 18:27 Searches d-r-- 2012/3/30 18:27 Videos -a--- 2012/5/12 17:25 10346 process.txt -a--- 2012/5/12 17:31 5254 process1.txt -a--- 2012/4/15 19:14 509 regwizard.log -a--- 2012/4/15 19:14 9853 sanct.log 目錄: C:\Users\vol_20120330\Contacts Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2012/3/30 18:27 68381 vol_20120330.contact
get-childitem還有一個值得一提的功能: 就是支持通配符 * 、?和 [] ; 具體不舉實例了,基本和cmd里面的通配符差不多。
3) new-item
通過new-item命令創建新項, 這個命令支持的常用參數有: path、itemtype。
path: 指定要創建的新項的存放位置
itemtype:指定要創建的新項的類型
Exp: 在 home路徑下創建一個vol的文件夾,創建一個vol.txt 的文件
PS C:\Users\vol_20120330> new-item -path $home\vol.txt -itemtype file 目錄: C:\Users\vol_20120330 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2012/5/12 18:56 0 vol.txt
如上所示就為創建的文件。
PS C:\Users\vol_20120330> new-item -path $home\vol -itemtype directory 目錄: C:\Users\vol_20120330 Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/5/12 18:57 vol
如上所示創建的是文件夾/目錄。
4、重命名項
利用rename-item來重命名項。
exp:
PS C:\Users\vol_20120330> rename-item vol.txt volcanol.txt _____________________________________________________________________________ PS C:\Users\vol_20120330> ls 目錄: C:\Users\vol_20120330 Mode LastWriteTime Length Name ---- ------------- ------ ---- d-r-- 2012/3/30 18:27 Contacts d-r-- 2012/5/12 17:19 Desktop d-r-- 2012/5/12 17:18 Documents d-r-- 2012/5/12 5:34 Downloads d-r-- 2012/5/2 9:51 Favorites d-r-- 2012/3/30 18:27 Links d-r-- 2012/4/30 14:15 Music d-r-- 2012/3/30 18:27 Pictures d-r-- 2012/3/30 18:27 Saved Games d-r-- 2012/3/30 18:27 Searches d-r-- 2012/3/30 18:27 Videos d---- 2012/5/12 18:57 vol -a--- 2012/5/12 17:25 10346 process.txt -a--- 2012/5/12 17:31 5254 process1.txt -a--- 2012/4/15 19:14 509 regwizard.log -a--- 2012/4/15 19:14 9853 sanct.log -a--- 2012/5/12 18:56 0 volcanol.txt
如上所示,命令執行成功后vol.txt變為volcanol.txt; 注意rename-item不能用於移動項目。
5、移動項目
通過move-item移動項目
Exp: 通過move-item將當前路徑下的volcanol.txt 移動到vol目錄下
PS C:\Users\vol_20120330> cd vol _____________________________________________________________________________ PS C:\Users\vol_20120330\vol> ls _____________________________________________________________________________ PS C:\Users\vol_20120330\vol> move-item ..\volcanol.txt .\ _____________________________________________________________________________ PS C:\Users\vol_20120330\vol> ls 目錄: C:\Users\vol_20120330\vol Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2012/5/12 18:56 0 volcanol.txt
如上所示,命令成功執行,volcanol.txt 被移動到vol目錄下。
6、復制項
通過copy-item復制項,但是這里copy-item命令有一點特殊的特性,copy-item僅能復制容器,不能復制容器內的類容。
PS C:\Users\vol_20120330> copy-item vol .\desktop _____________________________________________________________________________ PS C:\Users\vol_20120330> get-childitem vol 目錄: C:\Users\vol_20120330\vol Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2012/5/12 18:56 0 volcanol.txt _____________________________________________________________________________ PS C:\Users\vol_20120330> get-childitem .\Desktop 目錄: C:\Users\vol_20120330\Desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/5/12 19:10 vol -a--- 2012/5/5 14:54 2001 QQ影音.lnk -a--- 2012/5/12 17:05 79858 截圖00.jpg -a--- 2012/5/12 17:10 129290 截圖01.jpg -a--- 2012/5/12 17:16 10264 截圖02.jpg -a--- 2012/5/12 17:19 97789 截圖03.jpg -a--- 2012/4/6 19:36 1007 騰訊QQ.lnk _____________________________________________________________________________ PS C:\Users\vol_20120330> get-childitem .\Desktop\vol _____________________________________________________________________________
如上面的執行情況所示,vol目錄被成功的復制到desktop目錄,但是vol下的volcanol.txt文件沒有復制到desktop\vol下面。
為了復制容器下的項目需要添加recurse參數。
exp:復制容器下的項目
PS C:\Users\vol_20120330> copy-item vol .\desktop -recurse _____________________________________________________________________________ PS C:\Users\vol_20120330> get-childitem vol 目錄: C:\Users\vol_20120330\vol Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2012/5/12 18:56 0 volcanol.txt _____________________________________________________________________________ PS C:\Users\vol_20120330> get-childitem .\Desktop 目錄: C:\Users\vol_20120330\Desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2012/5/12 19:14 vol -a--- 2012/5/5 14:54 2001 QQ影音.lnk -a--- 2012/5/12 17:05 79858 截圖00.jpg -a--- 2012/5/12 17:10 129290 截圖01.jpg -a--- 2012/5/12 17:16 10264 截圖02.jpg -a--- 2012/5/12 17:19 97789 截圖03.jpg -a--- 2012/4/6 19:36 1007 騰訊QQ.lnk _____________________________________________________________________________ PS C:\Users\vol_20120330> get-childitem .\Desktop\volcanol PS C:\Users\vol_20120330> get-childitem .\Desktop\vol 目錄: C:\Users\vol_20120330\Desktop\vol Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2012/5/12 18:56 0 volcanol.txt _____________________________________________________________________________
如上所示,vol下的文件也被復制。
7、刪除項目
利用remove-item刪除項目
Exp:利用remove-item刪除上面復制的內容
PS C:\Users\vol_20120330> remove-item .\Desktop\vol _____________________________________________________________________________ PS C:\Users\vol_20120330> remove-item .\Desktop\vol -recurse _____________________________________________________________________________ PS C:\Users\vol_20120330> get-item .\Desktop\vol Get-Item : 找不到路徑“C:\Users\vol_20120330\Desktop\vol”,因為該路徑不存在。 所在位置 行:1 字符: 9 + get-item <<<< .\Desktop\vol + CategoryInfo : ObjectNotFound: (C:\Users\vol_20120330\Desktop\vo l:String) [Get-Item], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetIte mCommand
如上,第一個命令: “PS C:\Users\vol_20120330> remove-item .\Desktop\vol” 在執行的時候當vol下面有文件的時候,會彈出一個
對話框詢問是否刪除非空目錄。
第二個命令: “PS C:\Users\vol_20120330> remove-item .\Desktop\vol -recurse” 將直接刪除目錄容器及其包含的內容,而且不提示,因此
在使用的時候需要注意。
第三個命令: “PS C:\Users\vol_20120330> get-item .\Desktop\vol” 的執行情況,說明第二個命令成功執行了。
7、執行項目
通過在PS中使用 invoke-item 命令可以實現執行項目的作用。
Exp: 在PS中執行$home
invoke-item $home #這個命令像在windows資源管理器中雙擊$home 目錄一樣,將會打開資源管理器,並且定位到$home目錄。
三、小結
PS中關於重定向和文件目錄管理的功能,還是非常易於使用的,掌握這些對系統管理將大有幫助。