Powershell實(shí)現(xiàn)編寫(xiě)和運(yùn)行腳本
一個(gè)Powershell僅僅是一個(gè)包含Powershell代碼的文本文件。如果這個(gè)文本文件執(zhí)行,Powershell解釋器會(huì)逐行解釋并執(zhí)行它的的語(yǔ)句。Powershell腳本非常像以前CMD控制臺(tái)上的批處理文件。您可以通過(guò)非常簡(jiǎn)單的文本編輯工具創(chuàng)建Powershell腳本。
通過(guò)重定向創(chuàng)建腳本
如果您的腳本不是很長(zhǎng),您甚至可以直接在控制臺(tái)中要執(zhí)行的語(yǔ)句重定向給一個(gè)腳本文件。
PS E:> '"Hello,Powershell Script"' > MyScript.ps1 PS E:> .\MyScript.ps1 Hello,Powershell Script
這樣有個(gè)缺點(diǎn),就是您的代碼必須放在閉合的引號(hào)中。這樣的書(shū)寫(xiě)方式一旦在腳本內(nèi)部也有引號(hào)時(shí),是一件很痛苦的事。甚至您還可能希望在腳本中換行。下面的Here-strings例子不錯(cuò),也就是將腳本文件通過(guò)@‘ '@閉合起來(lái)。
PS E:> @' >> Get-Date >> $Env:CommonProgramFiles >> #Script End >> "files count" >> (ls).Count >> #Script Really End >> >> '@ > myscript.ps1 >> PS E:> .MyScript.ps1 2012年4月27日 8:15:10 C:\Program Files\Common Files files count 20
Here-String以 @‘開(kāi)頭,以'@結(jié)束.任何文本都可以存放在里面,哪怕是一些特殊字符,空號(hào),白空格。但是如果您不小心將單引號(hào)寫(xiě)成了雙引號(hào),Powershell將會(huì)把里面的變量進(jìn)行解析。
通過(guò)編輯器創(chuàng)建腳本
其實(shí)非常方便的還是最地道的文版編輯器Notepad,您可以直接在Powershell控制臺(tái)中打開(kāi)Notepad
PS E:> notepad.exe .\MyScript.ps1 PS E:> notepad.exe
編輯完記得保存即可。
運(yùn)行Powershell腳本
當(dāng)您的腳本編寫(xiě)成功后您可能第一次會(huì)像下面的方式運(yùn)行它,也就是只輸入腳本的文件名,會(huì)報(bào)錯(cuò)。
PS E:> MyScript.ps1
無(wú)法將“MyScript.ps1”項(xiàng)識(shí)別為 cmdlet、函數(shù)、腳本文件或可運(yùn)行程序的名稱。請(qǐng)檢查名稱的拼寫(xiě),如果包括
路徑,請(qǐng)確保路徑正確,然后重試。
所在位置 行:1 字符: 13
+ MyScript.ps1 < <<<
+ CategoryInfo : ObjectNotFound: (MyScript.ps1:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Suggestion [3,General]: 未找到命令 MyScript.ps1,但它確實(shí)存在于當(dāng)前位置。Windows PowerShell 默認(rèn)情況
下不從當(dāng)前位置加載命令。如果信任此命令,請(qǐng)改為鍵入 ".MyScript.ps1"。有關(guān)更多詳細(xì)信息,請(qǐng)參閱 "get-h
elp about_Command_Precedence"。
除非您使用相對(duì)路徑,或者絕對(duì)路徑
PS E:> .\MyScript.ps1 2012年4月27日 8:33:03 C:\Program Files\Common Files files count 20 PS E:> E:MyScript.ps1 2012年4月27日 8:33:11 C:\Program Files\Common Files files count 20
執(zhí)行策略限制
Powershell一般初始化情況下都會(huì)禁止腳本執(zhí)行。腳本能否執(zhí)行取決于Powershell的執(zhí)行策略。
PS E:> .\MyScript.ps1
無(wú)法加載文件 E:MyScript.ps1,因?yàn)樵诖讼到y(tǒng)中禁止執(zhí)行腳本。有關(guān)詳細(xì)信息,請(qǐng)參閱 "get-help about_sign
ing"。
所在位置 行:1 字符: 15
+ .MyScript.ps1 < <<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
只有管理員才有權(quán)限更改這個(gè)策略。非管理員會(huì)報(bào)錯(cuò)。
查看腳本執(zhí)行策略,可以通過(guò):
PS E:> Get-ExecutionPolicy
更改腳本執(zhí)行策略,可以通過(guò)
PS E:> Get-ExecutionPolicy Restricted PS E:> Set-ExecutionPolicy UnRestricted
執(zhí)行策略更改
執(zhí)行策略可以防止您執(zhí)行不信任的腳本。更改執(zhí)行策略可能會(huì)使您面臨 about_Execution_Policies
幫助主題中所述的安全風(fēng)險(xiǎn)。是否要更改執(zhí)行策略?
[Y] 是(Y) [N] 否(N) [S] 掛起(S) [?] 幫助 (默認(rèn)值為“Y”): y
腳本執(zhí)行策略類型為:Microsoft.PowerShell.ExecutionPolicy
查看所有支持的執(zhí)行策略:
PS E:> [System.Enum]::GetNames([Microsoft.PowerShell.ExecutionPolicy])
Unrestricted
RemoteSigned
AllSigned
Restricted
Default
Bypass
Undefined
Unrestricted:權(quán)限最高,可以不受限制執(zhí)行任何腳本。
Default:為Powershell默認(rèn)的策略:Restricted,不允許任何腳本執(zhí)行。
AllSigned:所有腳本都必須經(jīng)過(guò)簽名才能在運(yùn)行。
RemoteSigned:本地腳本無(wú)限制,但是對(duì)來(lái)自網(wǎng)絡(luò)的腳本必須經(jīng)過(guò)簽名。
關(guān)于Powershell腳本的簽名在后續(xù)會(huì)談到。
像命令一樣執(zhí)行腳本
怎樣像執(zhí)行一個(gè)命令一樣執(zhí)行一個(gè)腳本,不用輸入腳本的相對(duì)路徑或者絕對(duì)路徑,甚至*.ps1擴(kuò)展名。
那就將腳本的執(zhí)行語(yǔ)句保存為別名吧:
PS E:> Set-Alias Invok-MyScript .MyScript.ps1 PS E:> Invok-MyScript 2012年4月28日 0:24:22 C:\Program Files\Common Files files count 20
相關(guān)文章
Powershell實(shí)現(xiàn)克隆NTFS文件系統(tǒng)權(quán)限
這篇文章主要介紹了Powershell實(shí)現(xiàn)克隆NTFS文件系統(tǒng)權(quán)限,克隆安全描述需要管理員權(quán)限,注意第一個(gè)目錄的安全規(guī)則將全部覆蓋第二個(gè)的目錄的,需要的朋友可以參考下2014-12-12PowerShell查詢和刪除打印任務(wù)操作代碼實(shí)例
這篇文章主要介紹了PowerShell查詢和刪除打印任務(wù)操作代碼實(shí)例,本文直接給出代碼實(shí)例,需要的朋友可以參考下2015-03-03PowerShell中使用正則表達(dá)式篩選數(shù)組實(shí)例
這篇文章主要介紹了PowerShell中使用正則表達(dá)式篩選數(shù)組實(shí)例,使用match操作符配合相應(yīng)正則表達(dá)式實(shí)現(xiàn)數(shù)組篩選功能,需要的朋友可以參考下2014-07-07PowerShell中按文件后綴過(guò)濾的實(shí)現(xiàn)代碼
這篇文章主要介紹了PowerShell中按文件后綴過(guò)濾的實(shí)現(xiàn)代碼,自定義了一個(gè)過(guò)濾器來(lái)滿足需求,需要的朋友可以參考下2014-08-08PowerShell檢查網(wǎng)卡狀態(tài)和對(duì)應(yīng)的電源設(shè)置
這篇文章主要介紹了PowerShell檢查網(wǎng)卡狀態(tài)和對(duì)應(yīng)的電源設(shè)置,本文直接給出了實(shí)現(xiàn)方法和使用命令及輸出結(jié)果,需要的朋友可以參考下2015-03-03Powershell創(chuàng)建數(shù)組正確、更快的方法
這篇文章主要介紹了Powershell創(chuàng)建數(shù)組正確、更快的方法,Powershell使用ArrayList創(chuàng)建數(shù)組的例子,需要的朋友可以參考下2014-07-07使用 powershell 創(chuàng)建虛擬機(jī)
Azure PowerShell 模塊用于從 PowerShell 命令行或腳本創(chuàng)建和管理 Azure 資源。 本指南詳細(xì)介紹了如何使用 Azure PowerShell 模塊創(chuàng)建虛擬機(jī)。2017-10-10Powershell小技巧之使用Get-ChildItem得到指定擴(kuò)展名文件
本文主要描述了使用Get-ChildItem得到指定擴(kuò)展名文件的方法以及示例,并介紹了Get-ChildItem混合使用參數(shù)的問(wèn)題,有需要的朋友可以參考下2014-09-09