Windows

如何調試不生成 MOF 文件的 Powershell Desired State Configuration?

  • August 20, 2019

我正在遵循MSDN 上最基本的範例,但無法使其正常工作。我的配置定義如下:

Configuration MyWebConfig
{
  Param($ComputerName)

  Node $ComputerName {
     WindowsFeature MyRoleExample
     {
         Ensure = "Present"
         Name = "Web-Server"  
     }
   }
}

我正在嘗試使用C:\Scripts> .\IisWithCompressionConfig.ps1 -ComputerName "localhost" -Outputpath C:\Scripts\localhost(以及其他幾個命令行變體)生成 MOF。我沒有得到任何文件輸出,也沒有報告錯誤(退出狀態碼也是 0)。我嘗試了一個沒有$ComputerName變數的版本(而是硬編碼的“localhost”),仍然沒有。是的,我在提升的提示符下執行它。

我已經確定我正在執行 PowerShell 4.0:

C:\Scripts> $PSVersionTable

Name                           Value                                                                                            
----                           -----                                                                                            
PSVersion                      4.0                                                                                              
WSManStackVersion              3.0                                                                                              
SerializationVersion           1.1.0.1                                                                                          
CLRVersion                     4.0.30319.34003                                                                                  
BuildVersion                   6.3.9600.16394                                                                                   
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}                                                                             
PSRemotingProtocolVersion      2.2

任何想法我錯過了什麼?

使用 DSC,我將配置定義點源到目前會話中,然後呼叫它。

# dot source will load PS1 into current session
. .\IisWithCompressionConfig.ps1
# Then call the config
MyWebConfig -ComputerName "localhost"

配置與函式非常相似,即您希望呼叫MyWebConfig(config) 而不是IisWithCompressionConfig(file)。事實上,已定義的 DSC 將在Function:PSDrive 中。嘗試在點源 PS1 之前和之後執行以下命令。之前,您應該看不到任何結果,之後,您應該MyWebConfigFunction:PSDrive 中看到。

Get-ChildItem Function:* | Where-Object { $_.CommandType -eq 'Configuration' }

在提供的 TechNet 範例中,他們使用的是 ISE。在第 4 步中,他們在MyWebConfig目前 PS 會話中定義(而不是採購)配置權。這在功能上等同於點源 PS1 文件。在第 6 步之後,他們呼叫MyWebConfig了生成 MOF。

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