ビルド(msi)をリモートでインストールするために使用しようとしている次のスクリプトがあります。以下を参照してください。
問題はそれが機能していないということですが、不思議なことに、PowerShellコンソールからコマンドを実行すると機能します。
1つのリモートサーバーでインストールを実行することをテストしたところ、正常に機能しました(リターンコード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'
その後、すべてが正常に動作します
したがって、明らかに問題は、変数がどのように展開されるかなどについての私の理解の欠如にあります...
任意のガイダンスをいただければ幸いです