Потрібна допомога щодо написання сценарію Powershell для автоматизації безшумної установки клієнта Avamar на декілька машин


2

Я пишу сценарій Powershell, щоб автоматизувати безшумну установку клієнта Avamar на декількох машинах.

Ось сценарій, про який я писав до цього часу, але він постійно виникає з помилками:

#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

Що я роблю неправильно?

Відповіді:


0

Визначення-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є).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.