Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

Computer: Rename computer is incorrectly triggered - requires conditional in Set-TargetResource

未關閉
#429 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

評估

難度
2/5
預估耗時
1-3 小時
新手友好度
35/100
Issue 類型
缺陷
描述清晰度
描述清楚
活躍度
停滯
技術堆疊
powershell

研究方向

先閱讀第 234 行和第 327 行所識別的網域與工作組重新命名分支附近的 Set-TargetResource 和 Test-TargetResource 函式。比較現有的名稱檢查與建議的條件,並確認為相符的電腦名稱套用設定時不再呼叫 Rename-Computer,同時仍會更新 Description 等其他屬性。

由索引模型根據 Issue 內容生成。

描述

bug help wanted
Problem description

Issue:
The Computer resource is forcing a Rename-Computer command when the computer name is already correctly set, causing an error.

Details:
The Test-TargetResource function is checking multiple attributes:

Computer Name
Description
Workgroup or Domain
However, the Set-TargetResource function will always attempt to rename the computer, regardless of the current name, as referenced on line 234 (for domain) and line 327 (for workgroup). If the computer already has the correct name, this results in an error from Rename-Computer.

Impact:
While this may seem like a minor issue, it causes the status check to show as failed on the first run. This can be misleading, particularly during server deployments.

Additionally, Infrastructure as Code (IaC) cloud providers often set the computer name during VM deployments. Our Desired State Configuration (DSC) setups are targeted at server roles rather than individual servers, so we typically use "localhost" as the computer name.

Verbose logs
VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' = SendConfigurationApply,'className' = MSFT_DSCLocalConfiguratio
nManager,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguration'.
VERBOSE: An LCM method call arrived from computer MVUDEVTST001 with user sid S-1-5-21-**************.
VERBOSE: [MVUDEVTST001]: LCM:  [ Start  Set      ]
VERBOSE: [MVUDEVTST001]: LCM:  [ Start  Resource ]  [[Computer]DomainJoin]
VERBOSE: [MVUDEVTST001]: LCM:  [ Start  Test     ]  [[Computer]DomainJoin]
VERBOSE: [MVUDEVTST001]:                            [[Computer]DomainJoin] Testing computer state for 'localhost'.
VERBOSE: [MVUDEVTST001]:                            [[Computer]DomainJoin] Checking if computer description is 'Windows Automation Worker node'.
VERBOSE: [MVUDEVTST001]:                            [[Computer]DomainJoin] Perform operation 'Enumerate CimInstances' with following parameters, ''name
spaceName' = root\cimv2,'className' = Win32_OperatingSystem'.
VERBOSE: [MVUDEVTST001]:                            [[Computer]DomainJoin] Operation 'Enumerate CimInstances' complete.
VERBOSE: [MVUDEVTST001]: LCM:  [ End    Test     ]  [[Computer]DomainJoin]  in 0.4690 seconds.
VERBOSE: [MVUDEVTST001]: LCM:  [ Start  Set      ]  [[Computer]DomainJoin]
VERBOSE: [MVUDEVTST001]:                            [[Computer]DomainJoin] Setting computer state for 'localhost'.
VERBOSE: [MVUDEVTST001]:                            [[Computer]DomainJoin] Setting computer description to 'Windows Automation Worker node'.
VERBOSE: [MVUDEVTST001]:                            [[Computer]DomainJoin] Perform operation 'Enumerate CimInstances' with following parameters, ''name
spaceName' = root\cimv2,'className' = Win32_OperatingSystem'.
VERBOSE: [MVUDEVTST001]:                            [[Computer]DomainJoin] Operation 'Enumerate CimInstances' complete.
VERBOSE: [MVUDEVTST001]:                            [[Computer]DomainJoin] Perform operation 'Modify CimInstance' with following parameters, ''namespac
eName' = root/cimv2,'instance' = Win32_OperatingSystem: Microsoft Windows Server 2019 Datacenter'.
VERBOSE: [MVUDEVTST001]:                            [[Computer]DomainJoin] Operation 'Modify CimInstance' complete.
VERBOSE: [MVUDEVTST001]:                            [[Computer]DomainJoin] Perform operation 'Enumerate CimInstances' with following parameters, ''name
spaceName' = root\cimv2,'className' = Win32_ComputerSystem'.
VERBOSE: [MVUDEVTST001]:                            [[Computer]DomainJoin] Operation 'Enumerate CimInstances' complete.
Skip computer 'mvudevtst001' with new name 'MVUDEVTST001' because the new name is the same as the current name.
    + CategoryInfo          : InvalidArgument: (MVUDEVTST001:) [], CimException
    + FullyQualifiedErrorId : NewNameIsOldName,Microsoft.PowerShell.Commands.RenameComputerCommand
    + PSComputerName        : localhost
 
VERBOSE: [MVUDEVTST001]:                            [[Computer]DomainJoin] Renamed computer to 'MVUDEVTST001'.
VERBOSE: [MVUDEVTST001]: LCM:  [ End    Set      ]  [[Computer]DomainJoin]  in 0.7350 seconds.
The PowerShell DSC resource '[Computer]DomainJoin' with SourceInfo '::35::9::Computer' threw one or more non-terminating errors while running the 
Set-TargetResource functionality. These errors are logged to the ETW channel called Microsoft-Windows-DSC/Operational. Refer to this channel for more 
details.
    + CategoryInfo          : InvalidOperation: (:) [], CimException
    + FullyQualifiedErrorId : NonTerminatingErrorFromProvider
    + PSComputerName        : localhost
 
VERBOSE: [MVUDEVTST001]: LCM:  [ End    Set      ]
The SendConfigurationApply function did not succeed.
    + CategoryInfo          : NotSpecified: (root/Microsoft/...gurationManager:String) [], CimException
    + FullyQualifiedErrorId : MI RESULT 1
    + PSComputerName        : localhost
 
VERBOSE: Operation 'Invoke CimMethod' complete.
VERBOSE: Time taken for configuration job to complete is 6.048 seconds
DSC configuration
# real domain replaced with testdomain
        Computer DomainJoin
        {
            Name        = "localhost" # IaC providers always set the computername
            Description = "Test Server"
            DomainName  = "testdomain.local"
            Credential  = $Cred
            JoinOU      = "CN=Computers,DC=testdomain,DC=local"
        }
Suggested solution

Add the same conditional check around the Rename-Computer command from the Test-TargetResource. This way, if the Set is triggered due to the description not matching, it won't force the rename as well.

Example Code:
Line 234:

        if ($DomainName -eq (Get-ComputerDomain))
            {
              if (($Name -ne 'localhost') -and ($Name -ne $env:COMPUTERNAME))
              {
                # Rename the computer, but stay joined to the domain.
                Rename-Computer -NewName $Name -DomainCredential $Credential -Force
                Write-Verbose -Message ($script:localizedData.RenamedComputerMessage -f $Name)
              }
            }...

Line 327:

            if ($WorkGroupName -eq (Get-CimInstance -Class 'Win32_ComputerSystem').Workgroup)
            {
              if (($Name -ne 'localhost') -and ($Name -ne $env:COMPUTERNAME))
              {
                # Rename the computer, but stay in the same workgroup.
                Rename-Computer `
                    -NewName $Name

                Write-Verbose -Message ($script:localizedData.RenamedComputerMessage -f $Name)
              }
            }

As the rename at line 300 there to address a known issue I'm not sure if you would just leave that as is.

Operating system the target node is running
OsName               : Microsoft Windows Server 2019 Datacenter
OsOperatingSystemSKU : DatacenterServerEdition
OsArchitecture       : 64-bit
WindowsVersion       : 1809
WindowsBuildLabEx    : 17763.1.amd64fre.rs5_release.180914-1434
OsLanguage           : en-US
OsMuiLanguages       : {en-US}
PowerShell version and build the target node is running
Name                           Value                                                                                                                  
----                           -----                                                                                                                  
PSVersion                      5.1.17763.5933                                                                                                         
PSEdition                      Desktop                                                                                                                
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                                
BuildVersion                   10.0.17763.5933                                                                                                        
CLRVersion                     4.0.30319.42000                                                                                                        
WSManStackVersion              3.0                                                                                                                    
PSRemotingProtocolVersion      2.3                                                                                                                    
SerializationVersion           1.1.0.1
ComputerManagementDsc version
Name                  Version Path                                                                                             
----                  ------- ----                                                                                             
ComputerManagementDsc 9.1.0   C:\Program Files\WindowsPowerShell\Modules\ComputerManagementDsc\9.1.0\ComputerManagementDsc.psd1
主要語言
PowerShell
星號
338
分支
80
PR 合併指標
30 天內沒有已合併 PR

環境準備

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

dsccommunity/ComputerManagementDsc 的其他 Issue

查看 dsccommunity/ComputerManagementDsc 的全部 Issue

相似的 Issue

更多 Operating Systems Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。