PowerShell如何把 高級函式ps1 當作字串執行
一般來說如果在ps1檔案開頭加上 [CmdletBinding()]
可以把檔案升級成高函式,也就是那個檔案本身會當作是一個函式來看待
比如說這樣一個檔案
TestFunction.ps1
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$InputString
)
Write-Host by PSVersion:: $PSVersionTable.PSVersion
Write-Output "输入的字符串是: $InputString"
可以在終端機如此使用該檔案
.\TestFunction.ps1 Test
這樣就能直接呼叫這個檔案了並執行了
那如果不把它當作當按執行而是要當作文字呢,考慮到下面的範例文字
$PwshScript = @'
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$InputString
)
Write-Host by PSVersion:: $PSVersionTable.PSVersion
Write-Output "输入的字符串是: $InputString"
'@
該如何執行這串代碼並帶入參數的方法是
Invoke-Expression "&{ $PwshScript } AAA"
如此一來就可以不把它當作檔案執行,而是用讀取的方式執行字串了
這個有個例子是 PowerShell 的線上安裝腳本,蠻精妙的方式
官方說明網址是:PowerShell/tools/install-powershell.ps1-README.md · GitHub
實際應用的案例是 (PowerShell自動更新的ps1腳本)
iex "& { $(irm aka.ms/install-powershell.ps1) } -UseMSI"
如此就能把參數帶進去執行了,這會自動下在最新版本 msi 到暫存並自動打開
沒有留言:
張貼留言