无法在远程 System Center Configuration Manager 2007 控制台上访问 WEDM 2011 节点
最近,一名不是远程站点服务器管理员的用户在远程 ConfigMgr 2007 管理控制台中访问 WEDM 节点时遇到了问题,我们帮助该客户解决了这一问题。我们检查了 WMI 和 DCOM 权限,以及所有看上去正确配置的选项。但是,经过进一步调查,我们发现 WEDM 有其独立于 ConfigMgr 命名空间的自有 WMI 命名空间。当我们为该命名空间正确设置了权限后,该问题便迎刃而解。下文描述了系统在您遇到这一问题时所生成的错误,以及修复方式。
注意:我们打算将以下文章发布为一篇 KB 文章。如果现在尚不可用,则其应在不久后作为KB2723355 发布。
症状
当使用 WEDM 2011 并试图在远程 ConfigMgr 2007 控制台中访问 [Embedded Device Management](嵌入式设备管理)节点下的 [Deployments](部署)、[Configuration Items](配置项目)和 [Configuration Packages](配置包)节点时,这些节点将显示错误。
[*The ConfigMgr Provider reported an error.*]
该问题仅在登录用户没有远程站点服务器上的管理员特权时发生。用户可在远程 ConfigMgr 2007 控制台中访问他们没有权限的所有其他节点。此外,如果用户直接登录到服务器,并使用在站点服务器上直接使用 ConfigMgr 2007 控制台,那么他们将无法访问 WEDM 节点。
检查运行远程控制台的 PC 上的 SMSAdminUI.log 后可发现其显示了以下错误:
[3][<Date> <Time>] :Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlQueryException\r\nThe ConfigMgr Provider reported an error.\r\n
at Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlQueryResultsObject.<GetEnumerator>d__0.MoveNext()
at Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlQueryProcessor.ProcessQueryWorker(AsyncOperationDatabase asyncData)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)\r\nConfigMgr Error Object:
instance of __ExtendedStatus
{
Operation = "ExecQuery";
ParameterInfo = "SELECT DeploymentID,JobCreationTime,CollectionID,CollectionName,DeploymentName,DeploymentComment,IncludeSubCollection,OEMPluginID,ImageFileLocation,
StartTimeEnabled,StartTimeIsGMT,ExpirationTimeEnabled,ExpirationTimeIsGMT,StartTime,ExpirationTime,DeploymentStatusName,DeploymentStatus,RemoteServerName
FROM EDM_ImageDeployment";
ProviderName = "WinMgmt";
};
Error Code:
ProviderLoadFailure
\r\nSystem.Management.ManagementException\r\nProvider load failure \r\n at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()
at Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlQueryResultsObject.<GetEnumerator>d__0.MoveNext()\r\nManagementException details:
instance of __ExtendedStatus
{
Operation = "ExecQuery";
ParameterInfo = "SELECT DeploymentID,JobCreationTime,CollectionID,CollectionName,DeploymentName,DeploymentComment,IncludeSubCollection,OEMPluginID,ImageFileLocation,
StartTimeEnabled,StartTimeIsGMT,ExpirationTimeEnabled,ExpirationTimeIsGMT,StartTime,ExpirationTime,DeploymentStatusName,DeploymentStatus,RemoteServerName
FROM EDM_ImageDeployment";
ProviderName = "WinMgmt";
};
\r\n[3][<Date> <Time>] :Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlQueryException\r\nThe ConfigMgr Provider reported an error.\r\n
at Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlQueryResultsObject.<GetEnumerator>d__0.MoveNext()
at Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlQueryProcessor.ProcessQueryWorker(AsyncOperationDatabase asyncData)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)\r\nConfigMgr Error Object:
instance of __ExtendedStatus
{
Operation = "ExecQuery";
ParameterInfo = "SELECT ProvisioningItemUniqueId, Type, Description, SupportedDeviceTypes, SourceSite FROM EDM_ProvisioningItem";
ProviderName = "WinMgmt";
};
Error Code:
ProviderLoadFailure
\r\nSystem.Management.ManagementException\r\nProvider load failure \r\n at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()
at Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlQueryResultsObject.<GetEnumerator>d__0.MoveNext()\r\nManagementException details:
instance of __ExtendedStatus
{
Operation = "ExecQuery";
ParameterInfo = "SELECT ProvisioningItemUniqueId, Type, Description, SupportedDeviceTypes, SourceSite FROM EDM_ProvisioningItem";
ProviderName = "WinMgmt";
};
\r\n[3][<Date> <Time>] :Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlQueryException\r\nThe ConfigMgr Provider reported an error.\r\n
at Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlQueryResultsObject.<GetEnumerator>d__0.MoveNext()
at Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlQueryProcessor.ProcessQueryWorker(AsyncOperationDatabase asyncData)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)\r\nConfigMgr Error Object:
instance of __ExtendedStatus
{
Operation = "ExecQuery";
ParameterInfo = "Select ProvisioningPackageUniqueId, Description,ProvisioningItemUniqueIds,SourceSite,PlatFormType,PackageID FROM EDM_ProvisioningPackage";
ProviderName = "WinMgmt";
};
Error Code:
ProviderLoadFailure
\r\nSystem.Management.ManagementException\r\nProvider load failure \r\n at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()
at Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlQueryResultsObject.<GetEnumerator>d__0.MoveNext()\r\nManagementException details:
instance of __ExtendedStatus
{
Operation = "ExecQuery";
ParameterInfo = "Select ProvisioningPackageUniqueId, Description,ProvisioningItemUniqueIds,SourceSite,PlatFormType,PackageID FROM EDM_ProvisioningPackage";
ProviderName = "WinMgmt";
};
\r\n
站点服务器上的 SMSProv.log 并不会显示任何错误。
使用运行远程控制台的 PC 上的 WBEMTest 来在 \\<site_server>\root\SMS\site_<site_code> 命名空间上执行以下两项操作中的一项:
- 尝试运行 SMSAdminUI.log 中显示的 WMI 查询
- 尝试访问 EDM_ImageDeployment、EDM_ProvisioningItem 或 EDM_ProvisioningPackage 类的实例
将生成以下错误消息:
Error
Number: 0x80041013
Facility: WMI
Description: Provider load failureError 0x80041013 is:
hex 0x80041013 / decimal -2147217389
WBEM_E_PROVIDER_LOAD_FAILURE
原因
除了 \\<site_server>\root\SMS\site_<site_code> 的标准 ConfigMgr WMI 命名空间以外,WEDM 2011 还在 \\<site_server>\root\EDM 下使用了第二个 WMI 命名空间。当系统访问 WEDM 2001 节点时,ConfigMgr 2007 控制台将使用 EDM 命名空间。尽管用户可在 ConfigMgr 命名空间下查看 WEDM 的类别和实例,但实际上他们将通过代理提供程序映射回 WEDM 命名空间。默认情况下,站点服务器上的管理员将拥有 EDM 命名空间的远程特权。而站点服务器的非管理员用户没有 EDM 命名空间的远程特权。
解决方法
要解决这一问题,请在站点服务器上将 EDM WMI 命名空间的适当权限分配给本地组 SMS 管理员:
在站点服务器上,打开 Server Manager。
在 Server Manager 控制台中,展开 [Configuration](配置)节点。
右键单击 [WMI Control](WMI 控制),并选择 [Properties](属性)。
在 [WMI Control Properties](WMI 控制属性)窗口中,单击 [Security](安全)选项卡。
展开 [Root](根)树,并选择“Edm”。
选中“Edm”节点后,单击 [Security](安全)按钮。
在 [Security for ROOT\Edm](根\Edm 安全)窗口中,单击 [Add...](添加...)按钮。
在 [Select Users, Computers, Service Accounts, or Groups](选择用户、计算机、服务帐户或组)窗口中,单击 【Locations...](位置...)按钮。
在 [Locations](位置)窗口中,选择本地站点服务器,而非 [Entire Directory](整个目录)下的域。 本地站点服务器通常将是列表中的首个项目。
在 [Locations](位置)窗口中选择了本地站点服务器后,单击 [OK](确定)按钮。
在 [Select Users or Groups](选择用户或组)窗口中,在 [Enter the object names to select](输入要选择的对象名称)下的文本框中键入“SMS Admins”。在 [Select Users or Groups](选择用户或组)窗口中,单击 [OK](确定)按钮。
在 [Group or user names:](组或用户名称:)中,确保突出显示“SMS Admins”。
在 [Permissions for SMS AdminsSMS](管理员的权限)下,为以下项目选中 [Allow](允许)复选框:
[Execute Methods](执行方法)
[Provider Write](提供程序写入)
[Enable Account](启用帐户)
[Remote Enable](启用远程)在 [Security for ROOT\Edm](根\Edm 安全)窗口中,单击 [OK](确定)按钮。
在 [WMI Control Properties](WMI 控制属性)窗口中,单击 [OK](确定)按钮。
Frank Rojas
高级支持升级工程师