powershell - तर्क के साथ एक समारोह पर Invoke-Command-ScriptBlock का उपयोग करना




powershell-v2.0 (2)

मैं एक PowerShell स्क्रिप्ट लिख रहा हूं जो Invoke-Command और its -ScriptBlock पैरामीटर का उपयोग कर रिमोट होस्ट पर कमांड निष्पादित करेगा। उदाहरण के लिए,

function Foo {
    ...
    return "foo"
}
$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock ${function:Foo}

यह ठीक काम करता है। मैं अब क्या करना चाहता हूं वही बात है, लेकिन स्थानीय तर्कों के साथ एक समारोह को कॉल करें। उदाहरण के लिए,

function Bar {
    param( [String] $a, [Int] $b )
    ...
    return "foo"
}
[String] $x = "abc"
[Int] $y = 123
$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock ${function:Foo($x,$y)}

लेकिन यह काम नहीं करता है:

Invoke-Command: पैरामीटर 'स्क्रिप्टब्लॉक' पर तर्क मान्य नहीं कर सकता। तर्क शून्य है। एक गैर-शून्य तर्क की आपूर्ति करें और फिर से आदेश का प्रयास करें।

मैं एक -ScriptBlock साथ Invoke-Command का उपयोग कैसे कर सकता हूं जो तर्क के साथ एक स्थानीय फ़ंक्शन है?

मुझे एहसास है कि मैं पूरे फंक्शन और पैरामीटर को एक बड़े कोड ब्लॉक में लपेट सकता हूं, लेकिन यह मेरी राय में ऐसा करने का एक साफ तरीका नहीं है।


आप कार्यों को ब्लॉक में लपेट सकते हैं और ब्लॉक पास कर सकते हैं;

$a = {
  function foo{}
  foo($args)
}

$a.invoke() // Locally

$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock $a //remotely

यद्यपि यह शायद ही सुरुचिपूर्ण है।


मुझे लगता है कि आप चाहते हैं:

function Foo ( $a,$b) {
    $a
    $b
    return "foo"
}

$x = "abc"
$y= 123

Invoke-Command -Credential $c -ComputerName $fqdn -ScriptBlock ${function:Foo} -ArgumentList $x,$y