2017-09-13 40 views
0

問題) 如何獲取DSC腳本資源以等到代碼完成後再繼續? (代碼是調用表達「路徑\ file.exe程式」)DSC腳本資源 - 執行.exe,但不等到完成

詳細信息) 我使用PowerShell版本5 並想獲得DSC設置來處理我們的SQL Server安裝。 我的經理要求我使用開箱即用的DSC組件。 即沒有可能幫助的定製模塊的下載。 我已經建立了處理基礎服務器構建的配置文件 - 一切都很好。 安裝sql server的腳本資源很好。 在繼續之前,它會執行並等待完全安裝。 當我開始安裝sql server累積更新的腳本資源時,出現問題。 可執行文件被調用並開始安裝(應該需要10-15分鐘),但是dsc配置不會等到它安裝完畢,然後再繼續運行。 這意味着將在安裝完成之前調用DependsOn以用於將來的步驟。 如何讓腳本資源等到它完成?

回答

1

您是否嘗試過關鍵字「DependsOn」?

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

感謝這個,是的,我曾試圖依賴。自從這篇文章以來,我已經找出造成這個問題的原因。執行sql修補的累積更新文件產生一個拆包窗口(類似於解壓縮),當這開始解包所需文件時,焦點返回到powershell,並且powershell認爲任務已完成並繼續前進。作爲解決方案,我手動解包了所有的sql修補文件,現在直接調用安裝程序。它佔用更多的空間,但它讓我超越了我的問題。 –

0

調用,表達似乎並沒有等到過程結束 - 在一個普通的PowerShell控制檯試試這個,你會看到你之前的命令返回關閉記事本:

Invoke-Expression -Command "notepad.exe"; 

你可以使用開始處理代替:

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

如果你要檢查的退出代碼,你可以這樣做:

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

最後,使用命令行參數:

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

感謝這個mclayton,我會試試看看它是否解決了我的問題。我發現問題是什麼。執行sql修補的累積更新文件產生一個拆包窗口(類似於解壓縮),當這開始解包所需文件時,焦點返回到powershell,並且powershell認爲任務已完成並繼續前進。作爲一種解決方法,我手動解壓文件,現在它可以工作。但是如果我能夠實現這個目標,它將會更加清潔。 –