我正在尝试使用以下脚本远程安装我们的构建(一个 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'
然后一切正常
很明显,问题归结于我对变量如何扩展等缺乏了解......
任何指导将不胜感激