4

我的电脑上有一个简单的功能

MYPC> $txt = "Testy McTesterson"
MYPC> function Do-Stuff($file) { 
  cd c:\temp; 
  $txt > $file; 
}

我想在远程计算机上运行它

MYPC> Invoke-Command -ComputerName OTHERPC { Do-Stuff "test.txt" }

可以理解,Do-Stuff在 OTHERPC 上不存在,这不起作用。我怎样才能让它工作呢?该Do-Stuff函数抽象了一些基本代码并在其他几个地方调用,所以我不想复制它。

请注意,在我的示例中,值是通过参数和范围闭包传递给函数的。那可能吗?

4

3 回答 3

9

我不知道您如何使用闭包值,但您可以将两者都作为参数传递,如下所示:

$txt = "Testy McTesterson"
$file = "SomeFile.txt"
function Do-Stuff { param($txt,$file) cd c:\temp; $txt > $file }
Invoke-Command -ComputerName SomeComputer -ScriptBlock ${function:Do-Stuff} -ArgumentList $txt, $file
于 2013-04-12T20:11:52.440 回答
5

不确定是否有人仍然关心,但您实际上可以通过 PSSession 将保存在 .ps1 文件中的自定义函数加载到远程计算机。我试过了,它对我有用。 看看这个人的解决方案

于 2015-10-01T06:47:15.127 回答
1

有人真正关心的风险更小:),但这是一种方法。

MYPC> $myPCscript = @'
$txt = "Testy McTesterson"
function Do-Stuff($file) { 
    cd c:\temp
    $txt > $file
}
'@
MYPC> Invoke-Command -ComputerName OTHERPC { Invoke-Expression $using:myPCscript; Do-Stuff "test.txt" }
于 2018-01-05T14:24:51.900 回答