![如何调试未生成 MOF 文件的 Powershell 所需状态配置?](https://linux22.com/image/621542/%E5%A6%82%E4%BD%95%E8%B0%83%E8%AF%95%E6%9C%AA%E7%94%9F%E6%88%90%20MOF%20%E6%96%87%E4%BB%B6%E7%9A%84%20Powershell%20%E6%89%80%E9%9C%80%E7%8A%B6%E6%80%81%E9%85%8D%E7%BD%AE%EF%BC%9F.png)
我最关注的是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
知道我遗漏了什么吗?
答案1
使用 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 之前和之后运行以下命令。之前,您应该看不到任何结果,之后,您应该MyWebConfig
在Function:
PSDrive 中看到结果。
Get-ChildItem Function:* | Where-Object { $_.CommandType -eq 'Configuration' }
在提供的 TechNet 示例中,他们使用的是 ISE。在步骤 4 中,他们MyWebConfig
在当前 PS 会话中定义(而不是获取)配置。这在功能上等同于获取 PS1 文件的点。在步骤 6 之后,他们调用MyWebConfig
,从而生成了 MOF。