脚本中的Powershell Invoke-Command函数

时间:2012-08-01 12:03:36

标签: powershell

我有一个名为“ExecutBizTalkAppMSI.ps1”的Powershell脚本文件,它包含一个名为“Install-BizTalkApplication”的函数。我需要在远程服务器上执行该函数,因此我使用“Invoke-Command”cmdlet,如下所示:

Invoke-Command -Computer $TargetServer -FilePath .\ExecuteBizTalkAppMSI.ps1 -argumentlist $MSI, $InstallFolderOnTargetServer, $Environment

问题是,虽然目标脚本运行(我在Param()部分之后直接添加了一个Write-Host),但是没有执行“Install-BizTalkApplication”功能。

任何人都可以让我知道我需要做些什么才能实现这一目标?

2 个答案:

答案 0 :(得分:1)

我怀疑脚本看起来像那样:

# start
function Foo {}
# end

那不行。两个选项:

  • 删除函数名{}并按原样运行脚本
  • 首先定义一个函数,然后将其作为脚本的最后一步运行

示例:

# script 1
param ($foo, $bar)
# function body...

# script 2
param ($foo, $bar)
function foo {
param ($foo, $bar)
# function body
}

foo -foo $foo -bar $bar

答案 1 :(得分:0)

你说它“包含一个名为”的函数......所以,如果你在本地机器上用那些参数运行那个脚本..即:

.\ExecuteBizTalkAppMSI.ps1 $MSI $InstallFolderOnTargetServer $Environment

它不起作用,因为你正在运行一个只加载一个函数的脚本,然后停止,正确吗?那是你的问题。

如果是这样,你需要在函数之前在脚本顶部添加一个param语句:

param($MSI, $InstallFolderOnTargerServer, $Environment)

然后在底部,你必须添加的功能之外:

Install-BizTalkApplication $MSI $InstallFolderonTarget $Environment

这将允许脚本接受参数,然后将这些参数传递给调用函数的语句。