2012-08-01 79 views
0

我有一個名爲「ExecutBizTalkAppMSI.ps1」的Powershell腳本文件,它包含一個名爲「Install-BizTalkApplication」的函數。我需要在遠程服務器上執行的功能,所以我用「調用命令」 cmdlet的如下:腳本中的Powershell調用命令功能

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

問題是,儘管目標腳本運行(我的帕拉姆後直接加入一個寫主機()部分),函數「Install-BizTalkApplication」不會執行。

任何人都可以讓我知道我需要做些什麼才能做到這一點?

+0

您可能需要分享一些實際的代碼才能幫助您解決問題。 – JNK 2012-08-01 12:10:01

+0

我不太確定 - 我只需要知道是否可以使用Invoke-Command cmdlet在腳本中執行函數。如果不是,那麼目標腳本需要看起來像什麼 - 它如何知道要執行哪個函數? – 2012-08-01 12:20:55

回答

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 
+0

感謝Bartek的工作。由於我只有腳本文件中包含的單個函數,因此我決定刪除函數{} – 2012-08-01 12:42:34

0

你說它「包含一個叫做」的函數......所以,如果你用這些參數在本地機器上運行該腳本..即:

.\ExecuteBizTalkAppMSI.ps1 $MSI $InstallFolderOnTargetServer $Environment 

這不起作用,因爲你正在運行一個腳本,它只是加載一個函數,然後停止,正確?那是你的問題。

如果是這樣,你需要設置了一個param語句添加到腳本的頂部,該功能前:

param($MSI, $InstallFolderOnTargerServer, $Environment) 

,然後在底部,功能之外,你必須添加:

Install-BizTalkApplication $MSI $InstallFolderonTarget $Environment 

這將允許腳本接受參數,然後將這些參數傳遞給調用該函數的語句。