Powershell Start-process - lista de argumentos não está funcionando

2
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

Na linha normal do cmd, isso funcionaria assim:

wusa $files /quiet /norestart

Eu quero usar o Powershell para fazer o que normalmente faria com a linha de comando.

    
por Joel T 27.01.2015 / 19:49

3 respostas

1

Você pode usar o mesmo comando na verdade. Ou você estava atrás de algo mais idiomático? Acho mais fácil iniciar executáveis usando a sintaxe CMD, a menos que você veja alguns erros estranhos ( K.I.S.S. ). Mesmo redirecionamento funciona:

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

Quando tentei isso contra atualizações falsas, o arquivo de log estava vazio. Eu acho que isso pode estar relacionado com a opção silenciosa. Parece quieto na linha de comando também!

    
por 27.01.2015 / 20:40
0

No powershell, você o chama exatamente como faria no CMD. Não é necessário usar Start-Process .

    
por 27.01.2015 / 20:25
0

A resposta de Johns resolveu o problema.

Código final

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
    
por 29.01.2015 / 17:37