2017-09-13 5 views
0

Frage) Wie bekomme ich eine DSC-Skript-Ressource, um zu warten, bis der Code abgeschlossen ist, bevor Sie fortfahren? (Der Code ist aufrufen Ausdruck "Pfad \ file.exe")DSC-Skript-Ressource - führt .exe aus, wartet aber nicht bis zur Fertigstellung

Details) I Powershell Version 5 bin mit und ich versuche, DSC-Setup zu bekommen unsere SQL Server-Installationen zu behandeln. Mein Manager hat mich gebeten, die Standard-DSC-Komponenten zu verwenden. , d. H. Kein Herunterladen von benutzerdefinierten Modulen, die helfen könnten. Ich habe die Konfigurationsdatei erstellt, die den Build des Basisservers verarbeitet - alles ist gut. Die Skript-Ressource, die SQL Server installiert, ist gut. Es wird ausgeführt und wartet, bis es vollständig installiert wurde, bevor es weitergeht. Wenn ich auf die Skript-Ressource aufstehe, die das kumulative SQL Server-Update installiert, habe ich Probleme. Die ausführbare Datei wird aufgerufen und es beginnt mit der Installation (es sollte 10-15 Minuten dauern), aber die dsc-Konfiguration wartet nicht, bis sie installiert ist, und geht nach einer Sekunde weiter. Dies bedeutet, dass die DependsOn für zukünftige Schritte aufgerufen wird, bevor die Installation abgeschlossen ist. Wie kann ich die Skript-Ressource warten lassen, bis sie beendet ist?

Antwort

1

Haben Sie das Keyword "DependsOn" so ausprobiert?

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

Vielen Dank für diese, ja, ich versucht hatte, hängt davon ab. Seit diesem Post habe ich herausgefunden, was das Problem verursacht. Die kumulative Update-Datei, die das sql-Patching ausführt, erzeugt ein Entpackungsfenster (ähnlich wie unzip), wenn diese mit dem Entpacken der erforderlichen Dateien beginnt, kehrt der Fokus zurück zu powershell und powershell denkt, dass die Aufgabe abgeschlossen ist und weitergeht. Als Umgehung habe ich alle sql-Patch-Dateien manuell entpackt und rufe jetzt das Setup-Programm direkt auf. Es nimmt mehr Platz ein, aber es hat mich an meinem Problem vorbeigeführt. –

0

Invoke-Expression scheint nicht zu warten, bis der Prozess abgeschlossen ist - versuchen, dies in einer allgemeinen Powershell-Konsole und Sie den Befehl zurückkehrt, bevor Sie schließen Notizblock sehen:

Invoke-Expression -Command "notepad.exe"; 

Sie Startprozess kann statt:

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

Und wenn Sie den Exit-Code überprüfen möchten, können Sie dies tun:

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

Schließlich Befehlszeilenargumente zu verwenden:

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

Danke für dieses McLayton, ich werde es ausprobieren und sehen, ob es um mein Problem geht. Ich habe herausgefunden, worum es ging. Die kumulative Update-Datei, die das sql-Patching ausführt, erzeugt ein Entpackungsfenster (ähnlich wie unzip), wenn diese mit dem Entpacken der erforderlichen Dateien beginnt, kehrt der Fokus zurück zu powershell und powershell denkt, dass die Aufgabe abgeschlossen ist und weitergeht. Als Workaround habe ich die Datei manuell entpackt, jetzt funktioniert es. Aber wenn ich das zur Arbeit bringen könnte, wäre es viel sauberer. –

Verwandte Themen