【发布时间】:2022-11-24 03:54:01
【问题描述】:
我正在寻找一个允许我静默安装 msi 文件的 Powershell 脚本。 我们有超过 25000 台个人电脑,所以我必须用脚本来做到这一点。
不幸的是,目前在执行后弹出一个窗口(Windows Installer),其中显示了 msi 文件的参数。仅此而已,没有弹出其他“错误消息”。
脚本应该做的第一件事是检查 PC 是台式机还是移动设备。 如果它是桌面设备,他应该在文件中写上“使用了桌面配置”。 同时,msi 安装程序应该以一些参数启动。 如果是笔记本电脑,程序应该几乎相同。
安装成功后,用户应注销。
我需要这个脚本来在我们公司实施 2FA。
目前的代码如下所示:
IF ( ((Get-ComputerInfo | select -expand CsPCSystemType) -LIKE "Desktop") )
{
Write-Output "Desktop Configuration was used." >> \\XXX\XXX\XXX\XXX\Log\$env:Computername.txt
msiexec.exe /i "%~dp0setup.msi" /passive /norestart /L*v "%~dp0setup.log"
}
ELSE {
Write-Output "Laptop Configuration was used." >> \\XXX.XXX.XX\X\XX\XXX\XXXX\$env:Computername.txt
msiexec.exe /i "%~dp0setup.msi" /passive /norestart /L*v "%~dp0setup.log"
}
Write-Output "Lock Configuration was used." >> \\XXX\XXX\XXX\XXX\Log\$env:Computername.txt
rundll32.exe user32.dll,LockWorkStation
非常感谢任何帮助。
【问题讨论】:
-
不幸的是,目前我收到无法安装 msi 文件的错误。也许用确切的错误更新问题?
-
完成 :) 非常抱歉我一开始没有这样做。它显示一个窗口 (Windows Installer),其中包含所有 msiexec 参数。没有其他错误信息。
-
当通过 PowerShell 调用带有参数的可执行文件时,我通常会将参数作为数组传递,但我不确定这是否会解决您面临的问题。而不是
msiexec.exe /i "%~dp0setup.msi" /passive /norestart /L*v "%~dp0setup.log"尝试$parameters = "/i", "%~dp0setup.msi","/passive","/norestart","/L*v", "%~dp0setup.log"然后像这样调用 msiexec&msiexec.exe $parameters。 -
日志文件包含什么?这可能会告诉您它不喜欢哪些命令行参数 - 例如 msi 文件可能丢失或不可用(我认为
%~dp0由命令提示符,因此它可能会尝试查找字面上名为%~dp0setup.msi的文件,而不是扩展标记。此外,如果它是用于笔记本电脑和台式机的完全相同的msiexec命令,则无需在if的两个分支中复制它 - 只需将其放在后面即可。
标签: powershell if-statement windows-installer silent-installer