·What is PowerShell?
? 提供了命令行界面的互動(dòng)式Shell環(huán)境和腳本語(yǔ)凡恍,以協(xié)助管理員執(zhí)行彈性化拂共、自動(dòng)化的工作圈驼。
·環(huán)境依賴基于
? .NET FrameWork
·PowerShell Cmdlets
? · Command lets [動(dòng)詞-名詞]
? · 用.NET語(yǔ)言所寫成的指令妆绞,每個(gè)Cmdlets只具單 任務(wù)裆熙,而Cmdlets與Cmdlets通過(guò)管道符鏈接結(jié)合就可以協(xié)作出復(fù)雜的功能工作
? · Get-Command 顯示可用的Cmdlets
? · CLI中的主要命令
? ? - Shell Function(CLI可用代碼)
? ? - Powershell Scripts(.ps1)
? ? - Native commands(.exe,.bat,etc.)
·Pipelines - 管道
? · 用于從一個(gè)Cmdlets向另一個(gè)Cmdlets傳遞數(shù)據(jù)
? · 提供了一個(gè)創(chuàng)建簡(jiǎn)單命令行代碼腳本的機(jī)制
? · 實(shí)現(xiàn)并發(fā)執(zhí)行
? · 為了便于閱讀,可以分為多行
·PowerShell中的操作技巧
? · Aliases 別稱
? ? - Cmdlet的縮寫或者昵稱
? ? - Transitional alias
? ? - 類似曾經(jīng)用過(guò)的命令- dir,copy,ls,cat
? ? - 可以自定義別稱方便使用
? · Convenience alias
? ? - Cmdlet的縮寫
? ? - get-command = gcm,get-wmiobject = gwmi
·PowerShell 中的腳本執(zhí)行
? ·使用Set-ExecutionPolicy更改
? ·改變PS的執(zhí)行策略
? ? - Restricted,默認(rèn)設(shè)置偎快,不允許運(yùn)行任何腳本
? ? - AllSigned,僅運(yùn)行受信任腳本
? ? - RemoteSigned洒放,運(yùn)行本地腳本,不管這些腳本是否受信任滨砍;
? ? ? 如果是從Internet下載的腳本往湿,則必須是受信任的腳本才能夠運(yùn)行。
? ? - Unrestricted,允許運(yùn)行所有腳本惋戏,甚至是不受信任的腳本
·DEMO
? ·自定義別稱领追、更改執(zhí)行策略
? ? set-Alias gps Get-process
? Get-Command [獲取當(dāng)前可以使用的所有cmdlet命令]
? Get-Process [獲取當(dāng)前系統(tǒng)所有的進(jìn)程]
? Get-Process | where ($_.CPU -gt 20)
? gps | sort cpu -Descending(使用管道鏈接并行執(zhí)行)
? demo.ps1 (使用腳本文件的方式執(zhí)行)
·PS中的變量定義、使用
? · 不需要定義或聲明數(shù)據(jù)類型
? · 在變量前加“$”
? · 定義變量的規(guī)則
? ? - 變量可以是數(shù)字 $618
? ? - 變量可以是字符串 $0xW
? ? - 變量可以是特殊字符${@0xW}
? · 內(nèi)置的變量
? ? - $pshome
? ? - $home
? ? - $profile
·強(qiáng)大的幫助系統(tǒng)
? · get-help响逢,help or ?
? · 可以使用通配符獲取選項(xiàng)列表
? ? -get-help get-*
? ? -get-help *service*
·DEMO
$var = 0618
$var = "silvers"
$var = "0xW"
$var1 = "_Silvers"
$var2 = "$var $var1"
$var3 = '$var $var1' (輸出結(jié)果為[$var $var1]''會(huì)被當(dāng)成字符串來(lái)處理)
Get-Date (獲取當(dāng)前系統(tǒng)的日期時(shí)間)
$data = Get-Date
$data.AddDays(5)(輸出結(jié)果為當(dāng)前時(shí)間后推5天)
Get-Help get-Command
Get-Help get-Command |more (逐行輸出)
Get-Help get-Command -detailed/full (全部的詳細(xì)信息)
Get-Help Get-Process -full
Get-Process | Sort-Object ws
? · 使用管道符鏈接命令的方式執(zhí)行
Get-Process |
sort ws |
fl (fl是format list命令的縮寫)
·屬性和方法
? · 使用get-member方法來(lái)獲取屬性和方法的詳細(xì)列表
? · $var = 618; $var | get-member
? ? $var = "silvers"; $var | get-member
? · 使用TAB鍵來(lái)選擇變量的屬性和方法
? ? 例:$var.[TAB]
·語(yǔ)法和操作
? · 引號(hào)的使用绒窑,單引號(hào)和雙引號(hào)的區(qū)別
? ? 單引號(hào)里的是字符串;雙引號(hào)里的是引用變量
? · 定向輸出舔亭。使用“>”符號(hào)定向輸出
? · 變量的注釋些膨。使用“#”符號(hào)編寫注釋
? · 優(yōu)先運(yùn)算符
? · 豐富的語(yǔ)法
? ? -eq;-ne;-gt;-ge;-lt;-le;-like;
? ? -notlike;-contains;-notcontains
? · 支持算術(shù)運(yùn)算符
? ? +;*;-;/;=;+=;-=;*=;/=;%=
? · 支持邏輯運(yùn)算符
? ? -and;-or;-xor;-not;-is;-isnot;-as
·變量和數(shù)據(jù)類型
? ·變量間的操作
? 變量之間可以進(jìn)行乘法
? ·變量的強(qiáng)制類型轉(zhuǎn)換
? ·Set-variable,new-variable,clear-variable和remove-rariable的使用
? 變量的聲明、創(chuàng)建钦铺、刪除订雾、清除等
? ·變量的4中模式:
? local,script,global,private
? 變量的作用域
·數(shù)組、安全矛洞、Whatif
? · 數(shù)組的定義及使用方法
? ? - $var = 1..10
? ? - $var +=12,43
? · 創(chuàng)建受信任的安全腳本
? 使用makecert.exe創(chuàng)建受信任的安全腳本
? · 使用-Whatif預(yù)覽執(zhí)行結(jié)果
·循環(huán)洼哎、判斷語(yǔ)句
? · 循環(huán)語(yǔ)句
? ? - Foreach/for
? ? - While
? ? - Do while
? ? - Do until
? · 判斷語(yǔ)句
? ? - If
? ? - switch
? · 循環(huán)控制語(yǔ)句
? ? - Break
? ? - continue
·循環(huán)語(yǔ)句
? · Foreach
? ? - 集合的操作
? ? - 每個(gè)對(duì)象都進(jìn)行操作
? ? - Foreach是foreach-object的昵稱
? ? - 使用foreach的同時(shí),我們已經(jīng)默認(rèn)定義了$n,$i兩個(gè)變量沼本,$n用與存放foreach運(yùn)行的次數(shù)噩峦,$i用于存放每次foreach運(yùn)行的結(jié)果
? · For
? ? - 與foreach相似
while,do while,do until,if,switch,break,continue
? · While
? ? 當(dāng)條件成立時(shí)抽兆,執(zhí)行操作
? · Do while
? ? - 操作至少執(zhí)行一次
? · Do until
? ? - 操作至少執(zhí)行一次
? ? - 當(dāng)條件不成立時(shí)识补,結(jié)束執(zhí)行
? · If/switch
? ? - If與else、elseif使用辫红。不需要then/end if
? ? - Switch與select case相似
? · Break:匹配時(shí)跳出循環(huán)
? ? continue:調(diào)回循環(huán)起始位置
·格式的限定
? · 使用format限定操作結(jié)果的顯示格式
? · Format的4種顯示格式
? ? - Format-list (fl)
? ? - Format-table(ft)
? ? - Format-wide (fw)
? ? - Format-custom(fc)
? · 在命令結(jié)尾使用 -format來(lái)限定結(jié)果的顯示格式
·文件的導(dǎo)出凭涂、函數(shù)的定義
? · 使用導(dǎo)出命令將結(jié)果導(dǎo)出至指定文件
? ? - 支持CSV
? ? - 支持XML
? ? - 支持HTML
? · 導(dǎo)入文件同樣被支持
? ? - 可以支持CSV文件導(dǎo)入
? ? - 可以支持XML文件導(dǎo)入
·錯(cuò)誤調(diào)試
? · 確定錯(cuò)誤
? ? - 使用$?測(cè)試命令執(zhí)行成功or失敗
? ? - 使用$erroractionpreference設(shè)置錯(cuò)誤執(zhí)行模式
? ? ? ·Continue
? ? ? ·Stop
? ? ? ·slientlycontinue
? · 解決錯(cuò)誤
? ? - Trap
? ? ? 調(diào)試特殊錯(cuò)誤
? ? ? 確定錯(cuò)誤響應(yīng)(continue、break)
? ? - -ea
? ? ? 定義當(dāng)錯(cuò)誤發(fā)生以后厉熟,如何繼續(xù)執(zhí)行
·腳本調(diào)試
? · 使用set-psdebug進(jìn)行調(diào)試
? ? - 激活set-psdebug功能
? ? - 控制追蹤等級(jí)
? ? - 腳本逐步執(zhí)行
·DEMO 演示
$ver = 123
$ver | get-member
get-process >d:\gps.txt
$var ="0xW" # This is String
$var *4
$var2 += $var*2
$var -like -like "xw" (False)
$var -notlike "xw"? (True)
$var1 = 10
function one{"the variabale is $var1"}
function two{$var1=20,one}
export-Clixml d:\demo.xml(導(dǎo)出)
import-Clixml d:\demo.xml (導(dǎo)入)
=====以下來(lái)自網(wǎng)路博客為驗(yàn)證測(cè)試导盅,估計(jì)現(xiàn)在不這樣用了吧Windows powershell官方網(wǎng)站
·使用Makecert.exe創(chuàng)建信任腳本
· 使用Makecert命令創(chuàng)建信任證書
? makecert -n "CN=MyRoot" -a sha1-eku1.3.6.1.5.5.7.3.3 -r-sv root.pvk
? root.cer--ss Root -sr localMechine
· 創(chuàng)建信任證書
? makecert -pe-n "CN=MyCertificate"-ss MY -a sh1 -eku 1.3.6.1.5.5.7.3.3 -iv
? root.pvk -c root.cer
· 將存在的.ps1腳本進(jìn)行信任簽名
? Set-AuthenticodeSignature D:myscript ps1 $cert
·使用Makecert.exe創(chuàng)建信任腳本
· 核實(shí)此安裝過(guò)程:gci cert:\CurrentUser\my -codesigning
· 使用$cert = @(gci cert:\currentuser\my -codesigning)[0]檢索首次安裝的代碼簽名證書(如果安裝了多個(gè)證書并希望使用第一個(gè)意外的其他證書,只需將"0"改為相應(yīng)的數(shù)字即可)揍瑟。
· 使用Set-AuthenticodeSignature myscript.ps1 $cert簽名文件
· 打開(kāi)腳本文件觀察變化
·Makecert的參數(shù)
· 選項(xiàng) ·說(shuō)明
-n x509name? ? 指定主題的證書名稱白翻。此名稱必須符合x(chóng)_500標(biāo)準(zhǔn)。最簡(jiǎn)單的方法是在雙引號(hào)中指定此名稱,并加上前綴CN=滤馍;例如岛琼,"CN=myName".
-p? ? ? ? ? ? ? 將所生成的私鑰標(biāo)記為可導(dǎo)出。這樣可將私鑰包括在證書中巢株。
-sk keyname? ? 指定主題的密鑰容器位置槐瑞,該位置包含私鑰。如果密鑰容器不存在阁苞,系統(tǒng)將創(chuàng)建一個(gè)困檩。
-sr location? ? 指定主題的證書存儲(chǔ)位置。location可以是默認(rèn)值或者location
-ss store? ? ? 指定主題的證書存儲(chǔ)名稱那槽,輸出證書即存儲(chǔ)在那里悼沿。
-# number? ? ? 指定一個(gè)介于1和2,147骚灸,483糟趾,647之間的序列號(hào)。默認(rèn)值是由Makecert.exe生成的唯一值甚牲。
-$ authority? ? 指定證書的簽名權(quán)限义郑,必須設(shè)置為comanendal(對(duì)于商業(yè)軟件發(fā)行者使用的證書)或者imdivalhousal(對(duì)于個(gè)人軟件發(fā)行者使用的證書)。
-丈钙?? ? ? ? ? ? 顯示此工具的命令語(yǔ)法和基本選項(xiàng)列表
-非驮!? ? ? ? ? ? 顯示此工具的命令和擴(kuò)展選項(xiàng)列表。
·Makecert的參數(shù)(擴(kuò)展)
·選項(xiàng) ·說(shuō)明
-a algorithm 指定簽名算法著恩。必須是md5(默認(rèn)值)或sha1.
-b mm/dd/yy? ? ? ? ? ? 指定有效的開(kāi)始時(shí)間院尔。默認(rèn)為證書的創(chuàng)建日期。
-cy certType? ? ? ? ? ? 指定證書類型喉誊。有效值是end(對(duì)于最終實(shí)體)和authority(對(duì)于證書頒發(fā)機(jī)構(gòu))。
-d name? ? ? ? ? ? ? ? 顯示主題的名稱
-eku oid[,oid]? ? ? ? ? 將用逗號(hào)分割的增強(qiáng)性密鑰用法對(duì)象標(biāo)識(shí)符(OID)列表插入到證書中纵顾。
-h number? ? ? ? ? ? ? 指定此證書下面的樹(shù)的最大高度伍茄。
-ic file? ? ? ? ? ? ? ? 指定頒發(fā)者的密鑰容器名稱
-ik keyName? ? ? ? ? ? 指定頒發(fā)者的密鑰類型,必須是signalure,exchange或一個(gè)表示提供程序類型的整數(shù)施逾。默認(rèn)情況下敷矫,可傳入1表示交換密鑰,傳入2表示簽名密鑰汉额。
-in name? ? ? ? ? ? ? ? 指定頒發(fā)者的證書名稱曹仗。
·使用PowerShell管理IIS
· 前提:IIS xx PowerShell Provider
· 創(chuàng)建Web站點(diǎn)
? New-Item iis:\Sites\TestSite.bindings
? @{protocol="http";bindingInformation=".80:TestSite"} -physicalPath
? c:\test
· 創(chuàng)建Web應(yīng)用程序
? New-Item 'IIS:\Sites\Default Web Site\DemoApp'-physicalPath
? c:\test-type Application
·使用PowerShell管理IIS
· 改變、查看站點(diǎn)和應(yīng)用程序池狀態(tài)
? Stop-WebItem, Start-WebItem蠕搜、Get-WebItemState
· 回收應(yīng)用程序池
? - 請(qǐng)求默認(rèn)頁(yè)
? - 獲取進(jìn)程的ID(PID)
? - 回收應(yīng)用程序池?