在远程计算机上运行本地功能?

Geo*_*uer 4 powershell powershell-remoting

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

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

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

MYPC> Invoke-Command -ComputerName OTHERPC { Do-Stuff "test.txt" }
Run Code Online (Sandbox Code Playgroud)

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

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

dug*_*gas 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
Run Code Online (Sandbox Code Playgroud)

  • 为了澄清我的上述评论,我发现了以下内容:如果该函数是在本地模块中定义的,并且它是通过 $PSModulePath 中存在的位置自动加载的,则该函数无法传递到远程计算机。但是,如果在父脚本中显式加载本地模块,则可以将该函数传递到远程计算机。 (2认同)

Sal*_*808 5

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