需要帮助编写 Powershell 脚本以在多台计算机上自动静默安装 Avamar Client

需要帮助编写 Powershell 脚本以在多台计算机上自动静默安装 Avamar Client

我正在编写一个 Powershell 脚本,以便在多台机器上自动静默安装 Avamar Client。

这是我目前编写的脚本,但它不断出现错误:

#Variables
$computername=Get-Content C:PSdeploy\list.txt
$sourcefile= "\\mydomain.org\public\AvamarClient-windows-x86_64-7.1.100-370.msi"
$credentials = Get-Credential
#This section will install the software
foreach ($computer in $computername)
{
    $destinationFolder = "\\$computer\C$\Temp"
    #This section will copy the $sourcefile to the $destinationFolder. If the Folder does not exist it will create it.
    if (!(Test-Path -path $destinationFolder))
    {
        New-Item $destinationfolder -Type Directory
    }
    Copy-Item -Path $sourcefile -Destination $destinationFolder
    Invoke-Command -ComputerName $computer -ScriptBlock {Start-Process 'c:\temp\AvamarClient-windows-x86_64-7.1.100-370.msi' -ArgumentList msiexec /I} -credential $creds
}

这是我收到的错误:

PS C:\Users\n1254937> C:\Users\myuserid\Desktop\AvamarClient remote install.ps1
cmdlet Get-Credential at command pipeline position 1
Supply values for the following parameters:
A positional parameter cannot be found that accepts argument '/I'.
    + CategoryInfo          : InvalidArgument: (:) [Start-Process], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
    + PSComputerName        : test.mydomain.org

我究竟做错了什么?

答案1

定义-ArgumentList<String[]>,这是一个字符串数组

按原样,它将其视为-ArgumentList msiexec,后跟的/I不是有效的参数Start-Process

要指定多个参数,您需要将它们作为字符串数组提供,在 PowerShell 中可以将其写为逗号分隔的列表。因此,要指定两个参数,您可以使用-ArgumentList 'msiexec','/I'

话虽如此,我认为即使你做了这样的修正,它也不会起作用。照原样,你告诉它运行 .MSI 文件,并向 .MSI 文件提供两个参数:msiexec/I

您应该要做的是开始msiexec,指定 .MSI 文件和/I的参数msiexec

因此,尝试如下方法:

{Start-Process 'msiexec' -ArgumentList 'c:\temp\AvamarClient-windows-x86_64-7.1.100-370.msi','/I'}

要不就:

{Start-Process 'msiexec' 'c:\temp\AvamarClient-windows-x86_64-7.1.100-370.msi','/I'}

...因为-ArgumentList实际上是可选的(就像-FilePath是)。

相关内容