2

我的powershell脚本如下。我尝试在远程机器上压缩文件夹。我不想将 Zip 函数放入ScriptBlock其中,因为它将用于脚本的其他部分。

function Zip{  
    param([string]$sourceFolder, [string]$targetFile)  
    #zipping   
}  

$backupScript = {  
    param([string]$appPath,[string]$backupFile)      
    If (Test-Path $backupFile){ Remove-Item $backupFile }  
    #do other tasks      
    $function:Zip $appPath $backupFile  
}  

Invoke-Command -ComputerName $machineName -ScriptBlock $backupScript -Args $appPath,$backupFile

$backupScript,它在 $function:Zip 行中给出错误:

+ $function:Zip $appPath $backupFile
+ ~~~~~~~~ 表达式或语句中出现意外的标记“$appPath”。

4

2 回答 2

2

您必须引用脚本块中的参数,例如:

$backupScript = {  
    param([string]$appPath,[string]$backupFile)      
    If (Test-Path $backupFile){ Remove-Item $backupFile }  
    #do other tasks      
    $function:Zip $args[0] $args[1]  
}  
Invoke-Command -ComputerName $machineName -ScriptBlock $backupScript -Args       $appPath,$backupFile

此外,目标机器不知道该函数,您必须在脚本块中定义它或将其传递给机器。

这是一个示例: 使用 PowerShell 的 Invoke-Command 进行远程处理时,如何包含本地定义的函数?

这个例子把它放在你的角度: PowerShell ScriptBlock and multiple functions

于 2013-07-12T13:52:59.157 回答
0

我会找到一些方法将您的共享功能放到您的服务器上。我们在部署通用代码的所有服务器上都有一个标准共享。当我们远程运行代码时,该代码可以引用和使用共享代码。

于 2013-07-12T16:06:45.503 回答