我的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 line:
+ $ function:Zip $ appPath $ backupFile
+ ~~~~~~~~ 表达式或语句中出现意外的标记'$ appPath'。
答案 0 :(得分: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
此外,目标机器无法识别该功能,您必须在脚本块中定义它或将其传递给机器。
这是一个例子: How do I include a locally defined function when using PowerShell's Invoke-Command for remoting?
此示例将其置于您的视角中: PowerShell ScriptBlock and multiple functions
答案 1 :(得分:0)
我会找到一些方法将您的共享功能放到您的服务器上。我们在部署公共代码的所有服务器上都有标准共享。当我们远程运行代码时,该代码可以引用并使用共享代码。