[英]Variables don't seem to be working inside of the function in PowerShell
[英]Can't seem to do a Function.Invoke with multiple parameters in powershell?
我試圖將一個函數傳遞給一個方法,然后將參數傳遞給調用該函數時所傳遞的方法,但是如果我傳遞多個參數,則該方法將失敗並顯示錯誤:
function debugMeStuffs($someBlah, $somePoo) {
Write-Host $someBlah
Write-Host $somePoo
}
function invokeOnHosts ([scriptblock]$funcToCall, $param1, $param2, $startRange, $endRange) {
#Param($funcToCall)
$i = $startRange
for($i = [int]$startRange; $i -le $endRange; $i++) {
# HOW DO I MAKE THIS WORK WITH MULTIPLE PARAMETERS?!?!?!?
$funcToCall.Invoke('blah' 'poo')
}
}
invokeOnHosts $function:debugMeStuffs "param1" "param2" 4 7
我嘗試過的事情:
$funcToCall("blah" "poo")
$funcToCall('blah' 'poo')
$funcToCall.Invoke("blah" "poo")
$funcToCall.Invoke('blah' 'poo')
$funcToCall 'blah' 'poo'
$funcToCall.Invoke 'blah' 'poo'
$funcToCall "blah" "poo"
$funcToCall.Invoke "blah" "poo"
以上似乎都不起作用。 我還需要做其他事情才能使這項工作嗎?
.Invoke()
是.NET 方法 ,因此通常的方法調用語法適用 :您需要
(...)
-圍繞參數列表 ,
$funcToCall.Invoke('blah', 'poo')
這與PowerShell自己的調用cmdlet和函數的語法相反,后者類似於shell [1] :
參數列表周圍沒有 (...)
參數必須用空格分隔。
& $funcToCall blah poo # equivalent of the method call above.
在參數模式下解析上述命令,這就是為什么在這種簡單情況下引用參數是可選的 。
注意需要&
,PowerShell的調用運算符 , 執行存儲在$funcToCall
的腳本塊是必需的; 這通常對於調用存儲在變量中的命令以及引用的命令名稱/路徑是必需的。
鑒於很容易將PowerShell的命令語法與.NET的方法語法混淆,因此, 最好盡可能使用PowerShell的本機功能 [2] 。
也就是說,能夠直接在.NET類型上調用方法是一個很好的擴展性選項。
為幫助避免在調用PowerShell命令時意外使用方法語法,可以使用Set-StrictMode -Version 2
或更高版本,但是請注意,這需要進行額外的嚴格性檢查。
[1] PowerShell畢竟是一種外殼程序 -但它也是一種功能全面的腳本語言 ,可提供對.NET框架的幾乎無限的訪問。
調和這兩種個性是一種困難的平衡,對於具有編程背景的新手來說,類似於shell的命令調用語法是一個常見問題,因為該語言的其余部分看起來像傳統的編程語言,並且.NET上的調用方法類型確實使用傳統語法。
[2]這意味着偏愛PowerShell的cmdlet,函數和運算符使用底層.NET類型的方法; 這樣做通常還可以使您在更高的抽象水平上進行操作而獲得回報。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.