簡體   English   中英

似乎無法在Powershell中使用多個參數執行Function.Invoke嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM