【问题标题】:Powershell Invoke-Command Function within a Script脚本中的 Powershell 调用命令函数
【发布时间】:2012-08-01 20:24:40
【问题描述】:

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

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

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

谁能告诉我我需要做些什么来实现这一点?

【问题讨论】:

  • 您可能需要分享一些实际代码来帮助解决此问题。
  • 我不太确定 - 我只需要知道是否可以使用 Invoke-Command cmdlet 在脚本中执行函数。如果不是,那么目标脚本需要是什么样的 - 它如何知道要执行哪个函数?

标签: powershell


【解决方案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

【讨论】:

  • 感谢 Bartek 的工作。由于脚本文件中只包含一个函数,因此我决定删除该函数{}
【解决方案2】:

您说它“包含一个名为”的函数...因此,如果您使用这些参数在本地计算机上运行该脚本...即:

.\ExecuteBizTalkAppMSI.ps1 $MSI $InstallFolderOnTargetServer $Environment

这是行不通的,因为您正在运行的脚本只是加载一个函数,然后停止,对吗?那是你的问题。

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

param($MSI, $InstallFolderOnTargerServer, $Environment)

然后在底部,你必须添加的函数之外:

Install-BizTalkApplication $MSI $InstallFolderonTarget $Environment

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

【讨论】:

    猜你喜欢
    • 2019-08-15
    • 2022-07-07
    • 1970-01-01
    • 2012-09-11
    • 2013-07-09
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    相关资源
    最近更新 更多