Установите программное обеспечение из списка с помощью Powershell - PullRequest
0 голосов
/ 21 июня 2019

Я создаю сценарий для автоматизации сборки и настройки компьютера. Идея состоит в том, что из WDS он получается максимально чистым, автоматически запускает этот сценарий, который проверяет серийный номер, запрашивает нашу базу данных ресурсов Workday и конфигурирует ОС в соответствии с что нужно пользователю, назначенному для этой системы.

Сейчас я сосредоточен на трех больших группах: ноутбук, настольный компьютер и лаборатория. Все 3 будут иметь некоторые SW, которые будут одинаковыми, а некоторые будут специфичными для каждого. Моя проблема с msiexec: изначально я жестко запрограммировал все установки для каждой группы. но это означает, что мне придется менять скрипт каждый раз, когда что-то обновляется (скажем, новое приложение выкатывается по умолчанию). что не идеально.

    function Install-Desktop {
    #Write-Output "Here will be the install Desktop computer script"
    $IPATH="<Path To root sw folder>"
    #Software List
    <#          SOFTWARE LIST           #>
    $office="$IPATH\script\o365"
    $webex="$IPATH\script\webex"
    $chrome="$IPATH\script\chrome"
    #install Ofice:
    Invoke-Expression "$office\setup.exe /configure $office\O365.xml"
    $params = '/i', "$webex\webexapp.msi",'/qb!','/norestart'
    Start-Process msiexec -ArgumentList "$params"  -Wait -PassThru
    $params = '/i', "$chrome\GoogleChromeStandaloneEnterprise64.msi",'/qb!','/norestart'
    Start-Process msiexec -ArgumentList $params  -Wait -PassThru
    }

Этот фрагмент кода работает хорошо.

Теперь моя идея заключалась в том, чтобы импортировать из списка устанавливаемое программное обеспечение (поддерживать список проще, чем каждый раз изменять скрипт). что-то вроде:

function install-software {
    param (
        [String]$Type
    )
    $IPATH=<ROOT SW Folder>
    $SoftWares=Import-Csv -Path "$IPath\script\$Type`.csv" #there will be a Laptop.csv in that path
    foreach ($Software in $SoftWares) {
        #detect if it is msiexect or other:
        # (this has to do with how the csv is built, the first parameter is '/i' if it is an msi installer)
        if ($Software.param1 -eq "'/i'") {
            Start-Process msiexec -ArgumentList $Software  -Wait -PassThru
        }
        else {
            $Params=[string]::Join(" ",$Software.param1,$Software.param2,$Software.param3,$Software.param4)
            Invoke-Expression "$Params" 
        }
    }
}

Это работает только для остальной части. Однако на стороне msiexec if MSI открывается как без аргументов. Я пробовал много способов передать аргументы, но ни один из них не сработал. Я ни в коем случае не гуру PowerShell, поэтому, возможно, мне чего-то не хватает здесь.

1 Ответ

1 голос
/ 21 июня 2019

Ну, похоже, вам нужно пройти полный путь, он даже не позволяет использовать подключенный сетевой диск: так что ответ был на CSV. вместо S: \ <<em> путь к установщику > это должен был быть \ <<em> полный путь к установщику >, а также мне пришлось избавиться от всех кавычек и двойных кавычек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...