2013-04-12 82 views
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函数提取一些基本代码,并在其他几个地方调用,所以我不想复制它。

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

回答

8

我不知道你是怎么使用的截流值,但是你可以通过这两个像这样的参数:

$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 
+1

这似乎如果函数是在父脚本范围界定工作。但是,如果您的功能位于本地加载的模块中,它似乎不起作用。到目前为止,我还没有找到解决方案来远程运行在本地模块中定义的功能(远程计算机上没有该模块)。 – Robin

+1

为了澄清我的上述评论,我发现了以下内容:如果函数是在本地模块中定义的,并且它的位置出现在$ PSModulePath中时自动加载,则该函数不能传递给远程计算机。但是,如果本地模块显式加载到父脚本中,则可以将该功能传递给远程计算机。 – Robin

4

不知道是否还有人关心,但实际上你可以加载自定义函数保存在.ps1文件通过PSSession传输到远程计算机。我试了一下,它适用于我。 Check out this guy's solution

+1

链接倾向于改变或失踪,你能解释一些内容还是在这里引用它? – abarisone

+0

嘿,真的非常抱歉,对于迟到的回复。工作和生活优先事项。无论如何,你可以尝试像我所做的一样 '调用命令-Session $ myPSSession -FilePath“C:\ dir \ customFunctionFile.ps1”' 只要PSSession是开放的,你应该很好地使用你的任何函数在该加载的文件中定义。当你完成后,不要忘记删除你的会话,只是作为一个旁注,当会话被删除时,加载的文件会被卸载。 LMK如果你需要任何进一步的帮助,但这应该是绰绰有余......阿罗哈! –

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" } 
相关问题