歡迎轉載本系列文章;轉載請注明出處:www.cnblogs.com/volcanol
自從微軟推出.Net以來,微軟旗下的windows體系就發生了很大的變化,首先是操作系統的界面的變化,例如vista與XP的界面變化,
其次是一些應用的變化,例如在XP下就沒有Aero桌面效果,而在Win7下就有Aero桌面效果(本人沒有用過vista,不知道有沒有Aero的效果)。
但這些都是用戶直觀的感受,除了這些還有更深層次的變化,如C++的CLR和CLI、以及一些時下非常流行的技術(像WPF、WCF還有什么
WorkFlow等等,這些我都不懂,只聽說過這些);這里介紹的是這些變化外的另外一個變化: console shell的變化。
XP下面主要的腳本有:vbscript、javascript和batchfile批處理;這些功能均很強大,並且很多時候都有一些意想不到的效果;例如我前
兩天弄的那個去除代碼前導數字的批處理。而在vista之后,微軟為windows開發了一個全新的console shell——PowerShell。
一、PowerShell的功能
1、與標准的windows命令和應用程序兼容
2、全新的命令格式:cmdlets
3、支持對象/面向對象
4、適合管理員應用
5、多語言支持
6、發現功能:Get-Command、Get-Help、Get-Member命令
二、啟動PowerShell
1、cmd -——> powershell
2、start ——>All Program ——>附件——>Windows PowerShell——>Windows PowerShell
啟動后界面如下所示:
三 Powershell基礎
3、1 如何執行程序/命令
1) 直接輸入命令或者程序名稱以執行程序或命令
Exp:
Program.exe arguments
ScriptName.psl arguments
batchfilename.bat/cmd arguments
2) 運行命令中包含空格的命令,需要用單引號將命令括起來,同時在命令前面加: & 符號; 這在Powershell中稱為調用操作
(Invoke Operator)
Exp:
& ‘C:\Program Files\Program\Program.exe’ arguments
3)運行當前目錄或者路徑下的命令或者程序
這一點,Powershell借鑒了Linux/Unix的經驗, 當在powershell中執行非系統路徑下的程序或者命令時,必須明確的指定命令
或者程序的路徑。
運行當前目錄或者路徑下的命令或者程序通過在命令前面加上:“ .\ ”來實現。
Exp:
.\program.exe arguments
4) 運行當前目錄或者路徑下,命令或者程序名包含空格的程序或者命令, 則結合規則2)和規則3)來執行。
Exp:
& ‘.\show system infomation.pls’
5) Powershell中的特殊點
我們知道在cmd提示符下,雙引號用於實現訪問帶空格的命令或者路徑下的命令,而在Powershell中雙引號有特殊的用途:
表示字符串。
Exp:
如果我們在PS的命令提示符下輸入: “hello ” + “world” 則輸出:
hello world
即在PS中雙引號沿用了C語言的規范。
6) 在任意路徑下輸入powershell的內置cmdlet均可以執行,而不需要加上 .\ 或者& 等特殊控制符號。
Exp:
Get-Process
輸入上述命令則實現cmd中tasklist的功能。
3、2 cmdlet
powershell中內置的命令稱為cmdlets;cmdlet實現具有以下特點:
1)統一的命令形式
2)支持管道功能
3)輸出易於管理的對象,支持面向對象的概念
3、3 自定義powershell提示符和命令別名
Powershell的出現,彌補了windows先天不足的console shell功能,在powershell中借鑒了很多bash shell 或其他linux/unix shell
的經驗; 自定義命令的別名就是其中一個。
在powershell中有一個內置的變量: $profile;這個變量指示了powershell用戶自定義配置文件。可以在powershell中輸入 $profile
來查看這個變量的內容:
PS C:\Users\vol_20120330> $profile C:\Users\vol_20120330\Documents\WindowsPowerShell\Microsoft.PowerShell_profile. ps1 PS C:\Users\vol_20120330>
通過下面的命令來創建新的用戶配置文件腳本文件:
new-item -type file force $profile
用戶的自定義powershell環境配置文件通過$profile文件來引用, 可以通過下面的命令來打開然后編輯這個配置文件:
notepad $profile
通過下面的命令來獲取配置文件: $profile 的信息
Exp:
get-item $profile
get-item 這個命令獲取配置文件的一般信息。同樣可以通過下面的命令來獲取$profile的信息:
Get-childitem $PROFILE
下面我們通過一個實例來修改powershell的命令提示符形式;首先通過notepade $profile 打開用戶配置腳本文件,然后輸入以下信息:
Function Prompt { "PS [$env:COMPUTERNAME]>volcanol>" }
這樣我們的命令提示符就會變成下面的樣式:
PS [vol_20120305]volcanol>"
注意我的電腦的名稱為: vol_20120305
3、4 powershell的安全執行策略
默認情況下,powershell不允許執行腳本文件,上面的用戶配置文件也包括在內;如果不修改powershell的安全執行策略,則上面的用戶
配置文件是不能執行的。這里不插圖了,讀者可以自己實驗。
下面先簡單的介紹一下如何修改powershell的安全執行策略。
1)以管理員的身份打開powershell的提示符窗口
2)輸入下面的命令:
set-executionpolicy remotesigned
3) 然后重新以管理的員的身份啟動powershell;然后就可以看到ps的提示符編程了自定義的形式。
或者可以不退出ps; 而是執行一次 $profile 用戶配置腳本即可。
3、5 自定義命令別名
通過在用戶配置腳本文件中自定義命令別名可以提高腳本的編輯效率,因為ps的命令比cmd命令長多了,例如
cd命令現在用set-location命令替代了;dir命令用get-childitem命令替代了。
通過: set-alias 命令來設置命令別名。
set-alias new new-objector
Exp: 設置IE瀏覽器啟動命令的別名。
set-alias iexplorer 'c:\program files\internet explorer\iexplorer.exe'
這樣就可以在powershell中用 iexplorer命令來啟動IE瀏覽器了。當然這需要重啟Powershell或者執行一次用戶配置文件腳本。
3、6 查找命令
在用cmd的時候,我們有這樣的經驗,有時候不知道用什么命令來實現所需要的功能,這時我們就或利用help命令來大體的搜索一下;
然后看是否有我們需要的命令。在powershell中這一過程同樣被支持,我們可以搜索命令;這通過 Get-Command 來實現。
1) 獲取全部的可使用的命令,輸入以下命令
get-command
2)獲取指定命令的幫助信息
get-command command_name
例如: get-command get-process
3)利用通配符進行搜索
powershell支持通配符搜索,這一功能的完美支持,完全可以媲美linux下的正則表達式。
get-command *char*
當僅有 * 號進行搜索時相當於: get-command
get-command *
例如搜索命令中帶有txt的命令: get-command *txt*
5)帶參數的搜索
在powershell中利用get-command搜索的時候可以帶選項參數,-verb和-noun; 其中-verb選項用來搜索帶指定動詞的命令,而-noun
選項則用來搜索帶指定名詞的命令。命令格式如下:
get-command -verb verb_name get-command -noun noun_name
例如搜索帶動詞get的命令: get-command -verb get
搜索帶名詞service的命令: get-command -noun service
3.7 cmdlets——一致的命令接口模式
powershell采用一種稱為cmdlets的命令接口模式,所有的命令都遵循這樣的命令模式:
動詞-名詞
如:get-command 命令, get就是動詞,而command就是名詞
get-process 命令,get是動詞,而process是名詞
get-eventlog 命令, get是動詞,而eventlog是名詞。
cmdlets中命令的動詞部分取自於一個制定的動詞集合,而cmdlet命令的名詞部分描述了cmdlet命令要操作的對象。
3.8 獲取幫助信息
在cmd中獲取幫助有三種方法:a) 利用help命令, 如 help cd
b) 利用 /? 命令選項,如 cd /?
c) 查看系統幫組信息
在Powershell中則有四種方法:
a)利用 get-command 命令
b)利用 get-help 命令
c) 利用 -? 命令選項
d)查看系統幫助信息
利用get-command命令和利用get-help命令獲取命令幫助信息是不同的;get-command直接從cmdlet、函數、變量
腳本或者別名中獲取信息,而get-help命令則從系統幫助主題文件中獲取信息, 通常get-help命令獲取的幫助信息比get-command
命令詳細。
1)用get-command命令獲取幫助信息:
Exp : 利用get-command 獲取get-help幫助信息
get-command get-help
如果需要用get-command命令獲取較為詳細的命令則需用到管道和format-list命令;如下所示:
get-command command_name | format-list
2) 利用get-help命令獲取幫助信息:
Exp: 利用get-help 獲取自身的幫助信息
get-help get-help
利用get-help命令獲取幫助信息可以指定命令選項來獲取不同詳細程度的幫組信息:
a) -detailed 選項 ; 獲取特定命令的幫助信息詳情;例如: get-help -detailed get-process
b) -full 選項; 獲取特定命令的全部幫助信息; 例如: get-help -full set-location
c) -examples 選項;獲取特定命令的實例幫助信息; 例如: get-help -examples get-childitem
上面就是本次的所有內容,待續。