Powershell 调用时 MSI 未正确执行

问题描述 投票:0回答:1

为互联网的聪明人干杯。

我正在尝试做的事情的粗略细分:

通过 MDT 部署不同的 Windows 版本和软件。 其中一个软件是监控软件。监控软件提供商为我的客户的每个位置提供了一个 MSI 文件,我可以安装该文件来直接为其分配一台机器。 所以我构建了两个 Powershell 脚本。一个脚本仅位于更安全的服务器上,它将所有安装程序收集并放入 NAS 上的文件夹中。一个脚本是供操作员(实习生)通过 MDT 将操作系统部署到机器上的。该脚本由 MDT TaskSequenz 调用,操作员会收到一个提示,其中包含一个包含所有客户及其位置的表,他们可以从中选择当前准备的客户机器。

我目前的问题:

该脚本从我的 NAS 调用 MSI 文件。有时它会正确执行并安装监控软件,有时却不会。如果没有,它只会启动 MSIEXEC,弹出安装 Windows 并在一秒钟左右后将其关闭。 MSIEXEC 不会显示任何错误,也不会返回 Powershell。

这是路径被组装并使用 MSIEXEC 执行的脚本部分。

$vtmp=($folders | Where-Object ListenID -EQ $inp1 | Select-Object Kunde,Standorte)

    if($vtmp.Standorte -gt 1){
        $trash=@()
        $i2=1
        foreach($location in $(Get-ChildItem "$($path)\$($vtmp.Kunde)"-Recurse -Directory)){

            $addtrash=@{
                ListenID=$i2++
                Standort="$($location.Name)"
            }

            $trash += New-Object -TypeName psobject -Property $addtrash
        }
        $trash | Format-Table
        $inp2=Read-Host "Select the desired Location"

        ## check if human input trash or usable information
        while ($trash.ListenID -notcontains $inp2){
            write-host -BackgroundColor Red -ForegroundColor Yellow "The entered ID is not conaited in the above list. Try again"
            if($inp2 -imatch '\d[a-zA-Z]*' -or '[a-zA-Z]')
                    {
                        Write-Host "You entered LETTERS."
                        Write-Host -ForegroundColor Red "DONT do that."
                        write-Host "Only numbers listed above are allowed"
                        Write-Host ""
                    }
            $inp2=Read-Host "Enter the ID of the desired Organisation"
        }
        ##
        
        $vtmp2=($trash | Where-Object ListenID -eq $inp2|Select-Object Standort)
        $msipath=((Get-ChildItem "$path\$($vtmp.kunde)\$($vtmp2.Standort)"-File "*.msi").FullName)
    }
    else{
        ((get-childitem "$path\$($vtmp.Kunde)\" -File "*.msi" -Recurse).FullName)       
    }
    start-process msiexec.exe -ArgumentList "/i $msipath /passive /norestart -log C:\Windows\Temp\Monitoring.log" -wait

对于所有不会说德语的人,简短翻译:

  • 昆德 = 顾客
  • Standorte = 地点

这是 MSIEXEC “运行”脚本调用的 MSI 时的日志。

(如屏幕截图,因为否则它不可读,或者我不擅长格式化文本) MSI执行日志

我已经尝试过的:

  • 检查了我的 NAS 凭据(工作正常,否则我什至无法获得客户列表)
  • 尝试了不同的凭据(在 ADMIN-User 中构建,相同的结果)
  • 添加了 MSIEXEC 的日志记录并检查日志:我找不到任何可疑的内容。 (但也不完全理解日志)
  • 检查了本地 Maschine 上执行用户的权限(这是在 Admin 中构建的)
  • 检查了 MSI 文件:如果手动执行(通过鼠标单击),所有这些文件都可以正常工作。
  • 重新启动 Maschine:没有任何变化
  • 谷歌搜索症状:什么都没有......
  • 也许文件路径/名称太长? C: est\Customer.MSI 也不起作用
powershell scripting windows-installer
1个回答
0
投票

感谢您的评论 Theo 和 mklement0 我发现了我的错误。 我忘记在

$msipath
的ELSE条件中设置
if($vtmp.Standorte -gt 1)
。我确实组装了路径,但从未将其放入
$msipath
变量中。因此脚本尝试访问尚未设置的路径。由于只有一个位置的客户要多得多,因此脚本很少需要走“多个位置”路径。 我们在机器上(作为脚本独立)和 MDT 部署中对其进行了多次测试。 现在工作得很好。有时“只见树木,不见森林

© www.soinside.com 2019 - 2024. All rights reserved.