Windows

無法通過 powershell 寫入 ROOTCIMV2TerminalServices

  • July 23, 2020

我正在嘗試使用 powershell 將新的 SSL 證書自動安裝到 Windows Server 上。我已經完成了大部分工作,但我有一個小問題。當我嘗試更新終端服務 SSL 證書時,我不斷收到錯誤消息,而且我終其一生都無法弄清楚原因。

   $NewCert = Import-Certificate -FilePath $FileName -CertStoreLocation cert:\LocalMachine\My
   $RDPInstance = Get-CimInstance -ClassName Win32_TSGeneralSetting -Namespace ROOT\CIMV2\TerminalServices
   $RDPInstance.SSLCertificateSHA1Hash = $NewCert.Thumbprint
   Set-CimInstance -CimInstance $RDPInstance -Passthru

我從 Microsoft 的網站上獲取了大部分程式碼,以便能夠進行此更新,但它會引發錯誤:

   Set-CimInstance : Invalid parameter
   At line:1 char:1
   + Set-CimInstance -CimInstance $RDPInstance -Passthru
   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       + CategoryInfo          : InvalidArgument: (Win32_TSGeneral...me = "RDP-Tcp"):CimInstance) [Set-CimInstance], CimException
       + FullyQualifiedErrorId : HRESULT 0x80041008,Microsoft.Management.Infrastructure.CimCmdlets.SetCimInstanceCommand

我嘗試了幾個版本的 Set-CimInstance,但它們似乎都拋出了相同的 Invalid 參數。

啊! 我發現了這個問題。事實證明,某些屬性是只讀的,因此我可以將整個實例重新放回原處,這就是它失敗的地方。我已經改變了它,所以它現在只是更新屬性 SSLCertificateSHA1Hash。

Set-CimInstance -CimInstance $RDPInstance -Property @{SSLCertificateSHA1Hash=$Thumbprint} -PassThru

引用自:https://serverfault.com/questions/1025992