2010-12-21 10 views
0

私はmsiを呼び出し、パラメータを渡すcmdファイルを持っています。私はこのdeploy.cmdファイルをpowershellスクリプトから呼び出しています。どのように私はこれを達成することができますか?私のpsスクリプトでcmdファイルを実行する方法は?

私はここに何か不足している可能性があります。 PSが実行されたとき

# Assigning Build Number and Drop Location for the MSI in scope 
$buildNumber = $TfsDeployerBuildData.BuildNumber 
$dropLocation = $TfsDeployerBuildData.DropLocation 

# Assign values 
if($buildNumber -eq $null) 
{ 
$buildNumber = $args[0] 
$dropLocation = $args[1] 
} 

# Move old uninstall folder to Archive folder 
Move-Item "D:\deploy\ABC_Uninstalled\*" "D:\deploy\ABC_Archive" -force 

# Move old build folder to uninstalled folder 
Move-Item "D:\deploy\ABC_Installed\*" "D:\deploy\ABC_Uninstalled" -force 

# Logging 
Add-Content -Path "C:\Log\TfsDeployer_Log.txt" -Value $dropLocation 
Add-Content -Path "C:\Log\TfsDeployer_Log.txt" -Value $buildNumber 

# Copy the msi from drop location to local physical drive 
Copy-Item $dropLocation "D:\deploy\ABC_Installed" -recurse 
Add-Content -Path "C:\Log\TfsDeployer_Log.txt" -Value "Copied the Msi to D:\deploy\Installed" 

# Start execution 
& "D:\deploy\ABC_Installed\$buildNumber\en-us\ETRM_QA.cmd" 

は、しかし、それはCMDの内側にあるものをプリントアウトし

Msiexec /i ABCInstaller.msi^
DB.SERVER=ABC\QA^
APPLICATION.ENV.TYPE=Qa^
[email protected]^
SVCPASSWORD=xxx^
LOCAL.EMAILING="true"^
EMAIL.GMAT="[email protected]"^
EMAIL.GMATR="[email protected]"^
EMAIL.SUCCESSFUL.VALIDATION.SUBJECT="[QA] Successful validation of ABC Message"^
/lv "ABC_Installer_QA_Log.txt" 

これは私のPowerShellスクリプトがどのように見えるかで、

これは私のcmdは次のようになります、ファイルを実行するのではなく、実行の出力は

Output: C:\WINDOWS\system32>Msiexec /i ABCInstaller.msi^
DB.SERVER=ABC\QA^
APPLICATION.ENV.TYPE=Qa^
[email protected]^
SVCPASSWORD=xxx^
LOCAL.EMAILING="true"^
EMAIL.GMAT="[email protected]"^
EMAIL.GMATR="[email protected]"^
EMAIL.SUCCESSFUL.VALIDATION.SUBJECT="[QA] Successful validation of ABC Message"^
/lv "ABC_Installer_QA_Log.txt" /passive T 

です。cmdファイルは次のとおりです。

+0

私は、単純なCMDファイル、次の処理を行い(Copy.cmd)を作成する場合は、 Xcopyを "C:\フォルダ1"^ "C:\フォルダ2" そして、PowerShellスクリプト 「Cでそれを呼び出す:\ Copy.cmd " これは機能します。 ただし、Msiexecを使用する傾向がある場合は、cmdファイルを実行するのではなく印刷します。だから私の(copy.cmd)は、以下の ます。Msiexecが含まれている場合は/私は をEtrmInstaller.msiそして、PowerShellスクリプトが & "C:\フォルダ1 \ Copy.cmd" である その後、出力はC:\ DocumentsとSettings \ tarora \ My Documents> Msiexec/i EtrmInstaller.msi 何も実行されていません! C:\ DocumentsとSettings \ tarora \マイドキュメント> Msiexecは/ Iが Tpの –

+0

ヒントをEtrmInstaller.msi:読みやすく質問はより多くの回答を得かもしれない持ちます – fenster

答えて

0

てみ:-(実行されません:

Invoke-Expression "D:\deploy\ABC_Installed\$buildNumber\en-us\ETRM_QA.cmd" 
0

MSIEXECは、おそらく、それはすぐにCMDに制御を返すバックグラウンドプロセスとして起動するので、あなたはそれを見ていないされ、実行されています。

"C:\Program Files\Microsoft Office\Office11\WINWORD.EXE" 

そして、このようにそれを呼び出す:私はこのようになりますCMDスクリプト作成する場合たとえば、

&launchWord.cmd 

を私はPowerShellコンソールに表示すべてに、cmdスクリプトの内容ですが、単語が別のウィンドウで開きます。 msiexecは起動に失敗するのではなく、単に起動して失敗するのではないですか?