2012-10-11 164 views
0

我得到了下面的腳本,我試圖用來遠程安裝我們的構建(一個MSI),見下文。powershell命令從控制檯工作,但不是從腳本

事情是它不工作,但好奇的是,如果我從PowerShell控制檯運行命令,那麼它的工作原理。

我剛剛測試運行安裝一個遠程服務器上,它工作得很好(我有一個返回碼0,我也檢查了遠程服務器,並安裝了罰款)

所以我的問題是我在這裏想念什麼?

爲什麼命令在從PS控制檯運行它們時工作正常,但在使用腳本時不能運行它們?

TIA

param ($serverfile, $targetdir, $domainname, $username, $password,) 

    if (-not($serverfile) -or -not($targetdir) -or -not($domainname) -or -not($username)) 
    { 
    echo "error" 
    exit 
    } 

    #default to c:\temp, this needs to be in the server 
    $dest = "c$\temp\" 

    #This is really good as it allows us to have some sort of type safety 
    $srvs = Import-Csv $serverfile 

    foreach ($item in $srvs) 
    { 
    if ($item.Type -eq "App") 
    { 
     $name = $item.Hostname 
     $path = "\\$name\" + $dest 

     New-Item -ItemType directory -Path $path -Force 

     Copy-Item -Path '.\Deployment.msi' -Destination $path -Force 

     $wmi = "\\" +$name + "\ROOT\CIMV2:Win32_Product" 

     echo "Start Install Product" 

     $product = ([WMIClass]$wmi) 
     $var = $product.Install("c:\temp\Deployment.msi", "TARGETDIR=$targetdir DOMAINNAME=$domainname EMANRESU=$username PASSWORD=$password", $true) 

     if ($var.ReturnValue -ne 0) 
     { 
      echo "Error installing Deployment.msi on $name" 
      echo "exit code: $var.ReturnValue" 
     } 

     echo "Installed Product on $name" 
    } 

編輯:

如果我硬編碼的服務器的名稱,例如:

$path = '\\uk703\c$\temp\' 
$wmi = '\\uk703\ROOT\CIMV2:Win32_Product' 

然後一切工作正常

所以很明顯的問題是直到我對變量如何擴展等缺乏瞭解......

任何指導,可以理解

+0

我編輯了帖子以包含參數 – ManyRootsofAllEvil

+0

你可以發佈你試圖在控制檯上運行的命令以及其他方法嗎? –

回答

0

我知道了工作的全部細節在我的博客here

從本質上說我用[字符串] ::格式(),它似乎工作

0

這可能是因爲你的腳本不能在任何需要它的環境簽字(即PS模式具有「限制」執行策略)。這裏有一個post來幫助你。

+0

政策設置爲無限制 – ManyRootsofAllEvil

0

一個次要miscode(沒有明顯的腳本失敗的原因),你正在擴大在一個字符串變量屬性在錯誤的道路:

"exit code: $var.ReturnValue" 

的正確方法是:

"exit code: $($var.ReturnValue)" 
+0

謝謝我不知道 – ManyRootsofAllEvil

相關問題