Начинать-процесс Powershell - Список аргументов, не работающий

Start-Transcript c:\scripts\InstallUpdates.log -Append # -NoClobber
$SourceMSUFiles = (get-content install-list.txt | where {$_ -like "*.msu"})

#Install MSU files

foreach($file in $SourceMSUFiles)
{
    $Argument= "$Files",' /quiet',' /norestart'
    & start wusa -ArgumentList @Argument -Wait # -RedirectStandardOutput "c:\scripts\InstallUpdates.log"
    Write-Host "Installing $file" `n
}
stop-transcript

В нормальной cmd строке это работало бы как это:

wusa $files /quiet /norestart

Я хочу использовать Powershell, чтобы сделать то, что я обычно делал бы с командной строкой.

2
задан 27 January 2015 в 22:30
3 ответа

В PowerShell вы называете это так же, как в CMD. Нет необходимости использовать Start-Process .

0
ответ дан 3 December 2019 в 12:49

Фактически вы можете просто использовать ту же команду. Или вы искали чего-то более идиоматичного? Я думаю, что проще запускать исполняемые файлы, используя синтаксис CMD, если вы не видите каких-то странных ошибок ( K.I.S.S. ). Даже перенаправление работает:

Get-Content install-list.txt | Where-Object {$_ -like "*.msu} | Foreach-Object {
    wusa $_ /quiet /norestart >> "c:\script\installupdates.log" | Wait-Process
}

Когда я пробовал это против поддельных обновлений, файл журнала был пуст. Думаю, дело в тихом варианте. В командной строке тоже вроде тихо!

1
ответ дан 3 December 2019 в 12:49

Ответ Джонса решил проблему.

Final Code

Get-Content install-list.txt | Where-Object {$_ -like "*.msu"} | Foreach-Object {
    wusa $_ /quiet /norestart >> "c:\script\installupdates.log" | Wait-Process
}
Write-Host "Installed patches on"
((get-date -DisplayHint Date))
get-hotfix|where {$_.InstalledOn -gt ((get-Date).AddDays(-1))}|Select HotfixId
0
ответ дан 3 December 2019 в 12:49

Теги

Похожие вопросы