使用Powershell脚本进行无提示安装

时间:2017-08-23 06:06:57

标签: powershell

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

  

无法验证参数' ArgumentList'的参数。参数为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,为空,或者参数集合的元素包含空值。提供不包含任何空值的集合,然后再次尝试该命令。

2 个答案:

答案 0 :(得分:2)

您可能需要在代码中修复以下几项内容:

  • $paramsautomatic variable。不要试图覆盖它。使用其他变量名称,例如Start-Process。正如其他人已经提到的那样,在定义数组时将参数放在引号中。
  • 除非您有特定理由使用try,否则您可以更轻松地使用call operatorsplatting
  • 外部程序不会抛出PowerShell异常,因此在其上使用catch / $LastExitCode毫无意义。
  • PowerShell会自动在自动变量$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') } 中记录外部程序的退出代码。
{{1}}

答案 1 :(得分:0)

创建数组时,您的项目必须在引号内:

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