11
votes

Y a-t-il un moyen de faire attendre PowerShell pour une installation de finition?

J'ai une liste de packages Windows que j'installez via PowerShell à l'aide de la commande suivante:

& mypatch.exe / passif / norestart

mypatch.exe est passé à partir d'une liste et il n'attend pas que l'installation antérieure ait fini - cela continue de continuer. Il construit une vaste fenêtre d'installations en attente d'installation. De plus, je ne peux pas utiliser $ lastexitCode pour déterminer si l'installation a réussi ou échoué.

y a-t-il de toute façon pour que les installations attendent avant de commencer la suivante?


0 commentaires

3 Réponses :


1
votes

Bien sûr, écrivez un script de lots d'une ligne qui exécute l'installateur. Le script de lot attendra que l'installateur ait fini avant de revenir. Appelez le script de PowerShell qui attendra au courant du script de lot.

Si vous avez accès à la manière dont myPatch est écrit, vous aurez peut-être pu créer un fichier aléatoire lorsqu'il complète que PowerShell peut vérifier son existence dans une boucle de temps et dort simplement pendant que le fichier n'a pas. t existent.

Si vous ne le faites pas, vous pouvez également avoir ce script de lot créer un fichier factice lorsque le programme d'installation est terminé.

Encore une autre manière, bien que probablement le pire de toutes ces choses est de simplement coder une minuterie de sommeil (Démarrer-Sommeil) une fois que vous appelez l'installateur.

Modifier vient de voir la réponse de Jensg. Je ne savais pas à ce sujet. Nice


0 commentaires

12
votes
Start-Process <path to exe> -Wait 

0 commentaires

6
votes

jesng est correct en utilisant start-processus, Cependant, comme la question a montré des arguments de passage, la ligne devrait être la suivante:

try {
    Start-Process "mypatch.exe" -argumentlist "/passive /norestart" -wait
} catch {
    # Catch will pick up any non zero error code returned
    # You can do anything you like in this block to deal with the error, examples below:
    # $_ returns the error details
    # This will just write the error
    Write-Host "mypatch.exe returned the following error $_"
    # If you want to pass the error upwards as a system error and abort your powershell script or function
    Throw "Aborted mypatch.exe returned $_"
}


0 commentaires