powershell命令在控制台上运行,但不是从脚本运行

时间:2012-10-11 08:26:12

标签: powershell

我得到了以下脚本,我正在尝试远程安装我的版本(msi),见下文。

问题在于它不起作用,但奇怪的是,如果我从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'

然后一切正常

很明显,问题在于我对如何扩展变量等缺乏了解......

任何指导将不胜感激

3 个答案:

答案 0 :(得分:0)

可能是您的脚本未在需要它的环境中签名(即PS模式具有“受限制”执行策略)。这是一个post来帮助你。

答案 1 :(得分:0)

一个小错误代码(显然不是脚本失败的原因),您正在以错误的方式扩展字符串中的变量属性:

"exit code: $var.ReturnValue"

正确的方法是:

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

答案 2 :(得分:0)

我已经在我的博客here

中完成了详细信息

本质上我使用了[string] :: Format(),它似乎可以工作