2016-03-28 105 views
1

我試圖使用Azure自動拉取服務器將DSC配置添加到VM。通常情況下,你可以使用環境變量$env:COMPUTERNAME得到當前計算機的名稱 - 即是這樣的:在Azure自動化DSC中獲取計算機名稱

xComputer JoinDomain 
{ 
    Name = $env:COMPUTERNAME 
    DomainName = $ConfigurationData.NonNodeData.DomainDetails.DomainName    
    Credential = $domainAdminCredential 
} 

但使用Azure的自動化$env:COMPUTERNAME時似乎總是返回CLIENT不管當前的機器名。使用Azure自動化時,在DSC配置中動態獲取當前虛擬機名稱的最佳/最推薦的方法是什麼?

在此先感謝。

此致

托馬斯

+0

您不需要在此處指定計算機名稱。只有當您在域加入時更改機器的名稱時纔會執行此操作。 – FoxDeploy

+1

Name屬性是強制性的,所以不能省略。 –

+0

啊,我錯了!但我現在回想一下如何做到這一點,所以我會添加我的答案。 – FoxDeploy

回答

1

總之的DSC構造下施加爲:在PowerShell中

  • 編譯配置

    1. 作者的配置 - 這產生MOF文件
    2. 將mof文件發送給LocalConfigurationManager(LCM),該協議執行相同的操作

    實際指定的代碼在步驟#2中獲取計算機的名稱。請注意,#2可能發生在與您想要應用配置的計算機不同的計算機上。在這種情況下,它恰好是AA服務端的一個。

    不幸的是,目前除非您選擇使用腳本資源,否則無法獲取執行配置的計算機的名稱。因此,總之,您可以通過配置數據指定計算機名稱,或者使用腳本資源進行域加入

  • 1

    要捎帶@NanaLakshaman的答案,讓我們參數化這個配置。

    爲了便於理解,我將假裝您只配置計算機名稱和域連接。

    configuration DomainJoin 
    { 
    param 
    (
        [string[]]$NodeName ='localhost', 
        [string]$DomainName, 
        [string]$credential 
    ) 
    
    #Import the required DSC Resources 
    Import-DscResource -Module xComputer 
    
    Node $NodeName 
    { #ConfigurationBlock 
    
    
        xComputer JoinDomain 
         { 
          Name  = $nodename 
          DomainName = $DomainName    
          Credential = $Credential 
    
         } 
        } 
    } 
    

    現在,通過點擊F5或運行腳本(在Azure Automation中,您將運行腳本)將其編譯到內存中。然後,像調用一個函數一樣調用配置來生成新的所需狀態配置。 這裏是你可以指定本地計算機名稱的地方。

    DomainJoin -NodeName $env:ComputerName -DomainName SomeDomain -Credential (Get-Cred) 
    

    這將創建一個新的configuration.mof文件,然後你就可以申請使用:

    Start-DscConfiguration -ComputerName localhost -Wait -Force -Verbose 
    
    相關問題