PowerShell 執行 ps1配置

2021-10-03 10:24:33 字數 3499 閱讀 5666

乙個powershell僅僅是乙個包含powershell**的文字檔案。如果這個文字檔案執行,powershell直譯器會逐行解釋並執行它的的語句。powershell指令碼非常像以前cmd控制台上的批處理檔案。您可以通過非常簡單的文字編輯工具建立powershell指令碼。

通過重定向建立指令碼

如果您的指令碼不是很長,您甚至可以直接在控制台中要執行的語句重定向給乙個指令碼檔案。

ps e:> '"hello,powershell script"' > myscript.ps1

ps e:> .\myscript.ps1

hello,powershell script

這樣有個缺點,就是您的**必須放在閉合的引號中。這樣的書寫方式一旦在指令碼內部也有引號時,是一件很痛苦的事。甚至您還可能希望在指令碼中換行。下面的here-strings例子不錯,也就是將指令碼檔案通過@『 』@閉合起來。

ps e:> @'

>> 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

here-string以 @『開頭,以』@結束.任何文字都可以存放在裡面,哪怕是一些特殊字元,空號,白空格。但是如果您不小心將單引號寫成了雙引號,powershell將會把裡面的變數進行解析。

通過編輯器建立指令碼

其實非常方便的還是最地道的文版編輯器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-executionpolicy

restricted

ps e:> set-executionpolicy unrestricted

執行策略更改
執行策略可以防止您執行不信任的指令碼。更改執行策略可能會使您面臨 about_execution_policies

幫助主題中所述的安全風險。是否要更改執行策略?

[y] 是(y) [n] 否(n) [s] 掛起(s) [?] 幫助 (預設值為「y」): y

指令碼執行策略型別為:microsoft.powershell.executionpolicy

檢視所有支援的執行策略:

ps e:>  [system.enum]::getnames([microsoft.powershell.executionpolicy])

unrestricted

remotesigned

allsigned

restricted

default

bypass

undefined

unrestricted:許可權最高,可以不受限制執行任何指令碼。

default:為powershell預設的策略:restricted,不允許任何指令碼執行。

allsigned:所有指令碼都必須經過簽名才能在執行。

remotesigned:本地指令碼無限制,但是對來自網路的指令碼必須經過簽名。

關於powershell指令碼的簽名在後續會談到。

像命令一樣執行指令碼

怎樣像執行乙個命令一樣執行乙個指令碼,不用輸入指令碼的相對路徑或者絕對路徑,甚至*.ps1副檔名。

那就將指令碼的執行語句儲存為別名吧:

ps e:> set-alias invok-myscript .myscript.ps1

ps 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...