2016-05-10 41 views
0

我的DSC腳本在成功安裝JAVA後,通過自定義模塊設置JAVA_HOME。環境變量使用Powershell DSC刷新{不工作}!

我再嘗試使用下面的行腳本資源檢索更新JAVA家 -

SetScript = "[Environment]::SetEnvironmentVariable('JAVA_HOME',[System.Environment]::GetEnvironmentVariable('JAVA_HOME','Machine'))" 

我可以看到執行詳細日誌,說明資源。但是,在腳本完成後,我的控制檯仍然保持以前的JAVA_HOME

我遇到的問題是,我的腳本(進一步向下)需要調用一個使用JAVA_HOME的批處理文件,但因爲會話傳遞了錯誤的值,所以它失敗「系統找不到指定的路徑「

任何人都可以請幫助一些解決方案來克服這個問題?

聲明:我對PowerShell非常陌生。請詳細解釋。

+0

你說 '再往下' 你的腳本失敗。如果您發佈了完整的腳本,包括設置環境以及使用它的位置,那就太好了。有了不完整的repro,我只能告訴你它是如何工作的,希望你能弄清楚如何解決它。 – TravisEz13

回答

0

SetEvironmentVariable設置變量爲它的(默認情況下,它也可以將其設置爲機器或用戶)運行作爲運行的系統帳戶一個單獨的進程DSC腳本運行的進程,並無法更新您的控制檯。它基於它已經在機器級別更新的腳本顯示。從機器環境

  • 啓動使用shell
  • 更新變量一個新的控制檯(如你在DSC代碼前面所做的那樣):拿起控制檯中的變量,你必須做兩件事情之一。
1

下面的代碼展示瞭如何做到這一點:

configuration envtest 
{ 
    Script s1 
    { 
     GetScript = { 

     } 
     SetScript = { 
      $ENV:FOOBAR > c:\temp\env.txt 
     } 
     TestScript = { 
      [environment]::SetEnvironmentVariable("FOOBAR", "hi there", "MACHINE") 
      $ENV:FOOBAR = [environment]::GetEnvironmentVariable("FOOBAR", "MACHINE") 
      $false 
     } 
    } 

    Script s2 
    { 
     GetScript = { } 
     TestScript = { $false } 
     SetScript = { $ENV:FOOBAR > c:\temp\env2.txt } 
     DependsOn = "[script]s1" 
    } 
} 

envtest 
Start-DscConfiguration -force -Wait -Verbose -Path envtest 

注意的是,在DSC腳本本身,只有腳本資源可以像一個新的變量ENV但是處理由催生了運行時的變化的優勢只要腳本資源首先運行,腳本就會選取新變量。

另外,儘管ISE會告訴您腳本資源需要一個字符串,但我們建議使用scriptblock而不是字符串 - 這會更簡單並且會導致引用錯誤更少。如果您需要腳本來獲取編譯時變量的值,請使用$ using:myCompileTimeVariable而不是$ myCompileTimeVariable,並且所有內容都應該正常工作。

+0

是的布魯斯,當你安裝了更新你的路徑的東西時,這是一個不錯的小技巧。 DSC不會從路徑中拾取它(直到lcm重新啓動?),但重新加載路徑是一種享受! $ ENV:Path = [environment] :: GetEnvironmentVariable(「PATH」,「MACHINE」) –

0

作爲一個更清潔的替代品,有環境的DSC資源。從他們在GitHub中的代碼看來,它似乎也是[環境] :: GetEnvironmentVariable(「FOOBAR」,「MACHINE」)部分,如果你想嘗試。

Environment [string] #ResourceName 
{ 
    Name = [string] 
    [ Ensure = [string] { Absent | Present } ] 
    [ Path = [bool] ] 
    [ DependsOn = [string[]] ] 
    [ Value = [string] ] 
} 

參考:https://docs.microsoft.com/en-us/powershell/dsc/environmentresource

代碼:@Line 647

https://github.com/PowerShell/PSDscResources/blob/2c33e69634aa9c641ab27427d457fe9f49884e7c/DscResources/MSFT_EnvironmentResource/MSFT_EnvironmentResource.psm1#L647