2017-09-13 3 views
0

Question) Comment obtenir une ressource de script DSC pour attendre que le code soit terminé avant de poursuivre? (Le code est Invoke-expression "chemin \ file.exe")DSC Script Resource - exécute .exe, mais n'attend pas la fin

Détails) J'utilise la version 5 powershell et essaie d'obtenir la configuration de DSC pour gérer nos installations de serveurs SQL. Mon responsable m'a demandé d'utiliser les composants DSC prêts à l'emploi. , c'est-à-dire aucun téléchargement de modules personnalisés qui peuvent aider. J'ai créé le fichier de configuration qui gère la construction du serveur de base - tout va bien. La ressource de script qui installe le serveur SQL est bonne. Il s'exécute et attend qu'il soit complètement installé avant de poursuivre. Lorsque j'arrive à la ressource de script qui installe la mise à jour cumulative du serveur sql, j'ai des problèmes. L'exécutable est appelé et il commence l'installation (cela devrait prendre 10 à 15 minutes), mais la configuration dsc n'attend pas l'installation et se poursuit après une seconde. Cela signifie que DependsOn pour les étapes futures sera appelé avant que l'installation ne soit terminée. Comment puis-je attendre que la ressource de script ait terminé?

Répondre

1

Avez-vous essayé le mot-clé "DependsOn" comme ça?

Script MyNewSvc 
{ 
    GetScript = { 
     $SvcName = 'MyNewSvc' 

     $Results = @{} 
     $Results['svc'] = Get-Service $SvcName 

     $Results 
    } 
    SetScript = { 
     $SvcName = 'MyNewSvc' 

     setup.exe /param 
     while((Get-Service $SvcName).Status -ne "Running"){ Start-Sleep 10 } 
    } 
    TestScript = { 
     $SvcName = 'MyNewSvc' 
     $SvcLog = 'c:\svc.log' 

     If (condition) { #like a a running svc or a log file 
      $True 
     } 
     Else { 
      $False 
     } 

    } 
} 


WindowsFeature Feature 
{ 
    Name = "Web-Server" 
    Ensure = "Present" 
    DependsOn = "[Script]MyNewSvc" 
} 
+0

Merci pour cela, oui, je l'avais essayé dépend. Depuis ce post, j'ai compris ce qui cause le problème. Le fichier de mise à jour cumulative qui effectue le correctif sql génère une fenêtre de décompression (similaire à unzip), lorsque cela déballe les fichiers requis, le focus revient à powershell et powershell pense que la tâche est terminée et continue à avancer. Pour contourner le problème, j'ai décompressé manuellement tous les fichiers de correctifs sql et j'appelle maintenant directement le programme d'installation. Cela prend plus de place mais cela m'a permis de dépasser mon problème. –

0

Invoke-Expression ne semble pas attendre jusqu'à ce que le processus est terminé - essayez ceci dans une console PowerShell générique et vous verrez la commande retourne avant de fermer le bloc-notes:

Invoke-Expression -Command "notepad.exe"; 

Vous peuvent utiliser Start-Process à la place:

Start-Process -FilePath "notepad.exe" -Wait -NoNewWindow; 

Et si vous voulez vérifier le code de sortie, vous pouvez le faire:

$process = Start-Process -FilePath "notepad.exe" -Wait -NoNewWindow -PassThru; 
$exitcode = $process.ExitCode; 
if($exitcode -ne 0) 
{ 
    # handle errors here 
} 

Enfin, d'utiliser des arguments de ligne de commande:

$process = Start-Process -FilePath "setup.exe" -ArgumentList @("/param1", "/param2") -Wait -PassThru; 
$exitcode = $process.ExitCode; 
+0

Merci pour ce mclayton, je vais essayer et voir si cela contourne mon problème. J'ai découvert quel était le problème. Le fichier de mise à jour cumulative qui effectue le correctif sql génère une fenêtre de décompression (similaire à unzip), lorsque cela déballe les fichiers requis, le focus revient à powershell et powershell pense que la tâche est terminée et continue à avancer. Comme une solution de contournement, j'ai décompressé le fichier manuellement, alors maintenant cela fonctionne. Mais si je peux obtenir ce travail, ce serait beaucoup plus propre. –