【问题标题】:Silent installation by using Powershell scripting使用 Powershell 脚本进行静默安装
【发布时间】:2017-08-24 16:50:42
【问题描述】:

我正在尝试使用 PowerShell 静默脚本安装一个客户端的软件。下面是我创建的脚本,它不工作并抛出如下错误:

无法验证参数“ArgumentList”上的参数。参数为 null、空,或参数集合的元素包含 null 值。提供一个不包含任何空值的集合,然后重试该命令

下面这行是正确的还是有任何错误在这里我遇到了问题。

$Args = @("/S", "/L1033", -INSTALL_TYPE=PRESERVE_VERSION, START_MENU=AStartMenuFolder\Software\production\)

完整脚本:

$INSTALLDIR = "C:\Software\Software.exe"
$Args = @("/S", "/L1033", -INSTALL_TYPE=PRESERVE_VERSION, START_MENU=AStartMenuFolder\Software\production\)
$logfile = "D:\BACKUP\Install_Logfile.txt"
$ErrorActionPreference = 'Stop'
try {
    $exitcode = (Start-Process $Installer -ArgumentList $Args -NoNewWindow -Wait -Passthru).ExitCode    
    if ($exitcode -eq 0) {
        [System.Windows.MessageBox]::Show('Installation Completed Successfully')
    } else {
        [System.Windows.MessageBox]::Show('Installation Failled')
    }
} catch {
    "$_" | Out-File $logfile -Append
    {[System.Windows.MessageBox]::Show('Installation Failled')}
}

编辑:

$Installer = "C:\OTE\OTE.exe"
$params = @("/S", "/L1033", "-INSTALL_TYPE=PRESERVE_VERSION", "-START_MENU=AStartMenuFolder\OTE\production\")
$logfile = "C:\Install_Logfile.txt"
$ErrorActionPreference = 'Stop'

& $Installer @params
if ($LastExitCode -eq 0) {
    [Windows.MessageBox]::Show('Installation Completed Successfully')
} else {
    "$_" | out-file $logfile -append
    [Windows.MessageBox]::Show('Installation Failled')
}

在上面的脚本中,我收到如下错误,

无法验证参数“ArgumentList”上的参数。参数为 null、空,或参数集合的元素包含 null 值。提供一个不包含任何空值的集合,然后重试该命令。

【问题讨论】:

  • 将所有 $args 元素放在引号中。这行应该会抛出一个错误
  • 它也没有显示任何消息..消息框代码是正确的仪式..?
  • 在你的 ise $Args=@("/S", "/L1033", -INSTALL_TYPE=PRESERVE_VERSION, START_MENU=AStartMenuFolder\Software\production) 中只运行这行代码,它会抛出一个错误

标签: powershell


【解决方案1】:

您可能需要在代码中修复几处:

  • $argsautomatic variable。不要试图覆盖它。使用不同的变量名,例如$params。正如其他人已经提到的,在定义数组时将参数放在引号中。
  • 除非您有特殊原因使用Start-Process,否则使用call operatorsplatting 会更容易。
  • 外部程序不会抛出 PowerShell 异常,因此对它们使用 try/catch 毫无意义。
  • PowerShell 自动将外部程序的退出代码记录在自动变量$LastExitCode 中。
$installer = 'C:\Software\Software.exe'
$params = '/S', '/L1033', '-INSTALL_TYPE=PRESERVE_VERSION',
          'START_MENU=AStartMenuFolder\Software\production'

& $Installer @params
if ($LastExitCode -eq 0) {
    [Windows.MessageBox]::Show('Installation Completed Successfully')
} else {
    [Windows.MessageBox]::Show('Installation Failled')
}

【讨论】:

  • 感谢您的帮助
  • 我有些困惑的是,“-INSTALL_TYPE”将在 powershell 脚本中工作,因为它是我正在安装的软件的默认开关。
  • 是的,我试过了。但我得到以下错误..无法验证参数'ArgumentList'上的参数。参数为 null、空或参数集合的元素包含 null 值。提供一个不包含任何空值的集合,然后重试该命令。
  • 呼叫操作员没有参数ArgumentList。如果您发布的他的代码确实给了您该错误,那么它来自您的可执行文件。在不知道它到底是什么的情况下,我们无法为您提供帮助。
【解决方案2】:

创建数组时,您的项目需要在引号内:

$Args=@("/S", "/L1033", "-INSTALL_TYPE=PRESERVE_VERSION", "START_MENU=AStartMenuFolder\Software\production\")

【讨论】:

  • -INSTALL_TYPE 和 START_MENU 开关正确..??
  • 我们不知道您正在安装什么软件 (C:\Software\Software.exe),并且开关可能是特定于个人安装程序的。
猜你喜欢
  • 2019-02-19
  • 1970-01-01
  • 2021-10-12
  • 2022-10-05
  • 1970-01-01
  • 2015-01-03
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多