乙個powershell僅僅是乙個包含powershell**的文字檔案。如果這個文字檔案執行,powershell直譯器會逐行解釋並執行它的的語句。powershell指令碼非常像以前cmd控制台上的批處理檔案。您可以通過非常簡單的文字編輯工具建立powershell指令碼。
通過重定向建立指令碼
如果您的指令碼不是很長,您甚至可以直接在控制台中要執行的語句重定向給乙個指令碼檔案。
ps e:> '"hello,powershell script"' > myscript.ps1這樣有個缺點,就是您的**必須放在閉合的引號中。這樣的書寫方式一旦在指令碼內部也有引號時,是一件很痛苦的事。甚至您還可能希望在指令碼中換行。下面的here-strings例子不錯,也就是將指令碼檔案通過@『 』@閉合起來。ps e:> .\myscript.ps1
hello,powershell script
ps e:> @'here-string以 @『開頭,以』@結束.任何文字都可以存放在裡面,哪怕是一些特殊字元,空號,白空格。但是如果您不小心將單引號寫成了雙引號,powershell將會把裡面的變數進行解析。>> get-date
>> $env:commonprogramfiles
>> #script end
>> "files count"
>> (ls).count
>> #script really end
>>
>> '@ > myscript.ps1
>>
ps e:> .myscript.ps1
2023年4月27日 8:15:10
c:\program files\common files
files count
20
通過編輯器建立指令碼
其實非常方便的還是最地道的文版編輯器notepad,您可以直接在powershell控制台中開啟notepad
ps e:> notepad.exe .\myscript.ps1編輯完記得儲存即可。ps e:> notepad.exe
執行powershell指令碼
當您的指令碼編寫成功後您可能第一次會像下面的方式執行它,也就是只輸入指令碼的檔名,會報錯。
ps e:> myscript.ps1除非您使用相對路徑,或者絕對路徑無法將「myscript.ps1」項識別為 cmdlet、函式、指令碼檔案或可執行程式的名稱。請檢查名稱的拼寫,如果包括
路徑,請確保路徑正確,然後重試。
所在位置 行:1 字元: 13
+ myscript.ps1 < <<<
+ categoryinfo : objectnotfound: (myscript.ps1:string) , commandnotfoundexception
+ fullyqualifiederrorid : commandnotfoundexception
suggestion [3,general]: 未找到命令 myscript.ps1,但它確實存在於當前位置。windows powershell 預設情況
下不從當前位置載入命令。如果信任此命令,請改為鍵入 ".myscript.ps1"。有關更多詳細資訊,請參閱 "get-h
elp about_command_precedence"。
ps e:> .\myscript.ps1執行策略限制2023年4月27日 8:33:03
c:\program files\common files
files count
20ps e:> e:myscript.ps1
2023年4月27日 8:33:11
c:\program files\common files
files count
20
powershell一般初始化情況下都會禁止指令碼執行。指令碼能否執行取決於powershell的執行策略。
ps e:> .\myscript.ps1只有管理員才有許可權更改這個策略。非管理員會報錯。無法載入檔案 e:myscript.ps1,因為在此系統中禁止執行指令碼。有關詳細資訊,請參閱 "get-help about_sign
ing"。
所在位置 行:1 字元: 15
+ .myscript.ps1 < <<<
+ categoryinfo : notspecified: (:) , pssecurityexception
+ fullyqualifiederrorid : runtimeexception
檢視指令碼執行策略,可以通過:
ps e:> get-executionpolicy更改指令碼執行策略,可以通過
ps e:> get-executionpolicyrestricted
ps e:> set-executionpolicy unrestricted
執行策略更改
執行策略可以防止您執行不信任的指令碼。更改執行策略可能會使您面臨 about_execution_policies指令碼執行策略型別為:microsoft.powershell.executionpolicy幫助主題中所述的安全風險。是否要更改執行策略?
[y] 是(y) [n] 否(n) [s] 掛起(s) [?] 幫助 (預設值為「y」): y
檢視所有支援的執行策略:
ps e:> [system.enum]::getnames([microsoft.powershell.executionpolicy])unrestricted:許可權最高,可以不受限制執行任何指令碼。unrestricted
remotesigned
allsigned
restricted
default
bypass
undefined
default:為powershell預設的策略:restricted,不允許任何指令碼執行。
allsigned:所有指令碼都必須經過簽名才能在執行。
remotesigned:本地指令碼無限制,但是對來自網路的指令碼必須經過簽名。
關於powershell指令碼的簽名在後續會談到。
像命令一樣執行指令碼
怎樣像執行乙個命令一樣執行乙個指令碼,不用輸入指令碼的相對路徑或者絕對路徑,甚至*.ps1副檔名。
那就將指令碼的執行語句儲存為別名吧:
ps e:> set-alias invok-myscript .myscript.ps1ps e:> invok-myscript
2023年4月28日 0:24:22
c:\program files\common files
files count
20
PowerShell讓系統可以執行 ps1檔案
ps1檔案是powershell寫好的指令碼檔案。在windows系統中,預設情況下是不允許執行.ps1檔案的,那麼怎麼才能讓系統允許執行.ps1檔案呢?這個是powershell寫的指令碼文字,你可以在記事本中寫一段powershell 然後將其儲存為 ps1 後面要使用它的時候,雙擊即可執行了。...
PS1系統變數
ps1系統變數 d 代表日期,格式為 weekday month date,例如 mon aug 12 h 完整的主機名稱 h 僅取主機的第乙個名字 t 顯示時間為24小時格式,如 hh mm ss t 顯示時間為12小時格式 a 顯示時間為24小時格式 hh mm u 當前使用者的賬號名稱 v b...
對PS1的理解
ps1是命令的字首,用來表示你當前是哪個使用者登入上來的 u,主機名 h,以及當前你所在的目錄 預設是 root wenwen echo ps1 u h w 命令引數 d 代表日期,格式為weekday month date,例如 mon aug 1 h 完整的主機名稱。例如 我的機器名稱為 fc4...