2012-10-11 124 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

相关问题