我目前正在开发一个 Powershell 模块来帮助我的同事,并且我可以更加“无缝”地使用 SCCM 和脚本(因为 SCCM Cmdlet 太慢,因此无法使用)。
在这个模块中,我创建了一个名为 Get-CMCollectionsAndFolder 的函数,它从 SCCM 中检索所有集合(使用类 SMS_Collection)。我还尝试将这些集合的 FolderName 和 ContainerNodeID 添加到该列表中,如 SMS_ObjectContainerItem 类中所示。
我所有的模块请求都是使用 CIM 完成的,但是由于某些奇怪的原因,我不能使下面编写的 JOIN 查询使用 CIM,只能使用 WMI。
所以,如果我运行这个:
Get-WmiObject -ComputerName $computername -Namespace root\sms\site_$sitecode -Query "SELECT SMS_Collection.*,SMS_ObjectContainerNode.ContainerNodeId,SMS_ObjectContainerNode.Name FROM SMS_ObjectContainerItem INNER JOIN SMS_Collection ON SMS_Collection.SiteID = SMS_ObjectContainerItem.InstanceKey INNER JOIN SMS_ObjectContainerNode ON SMS_ObjectContainerNode.ContainerNodeID = SMS_ObjectContainerItem.ContainerNodeID"
我得到一个对象数组,包含那些属性:
TypeName : System.Management.ManagementObject#root\sms\site_IP3\__GENERIC
Name MemberType Definition
---- ---------- ----------
PSComputerName AliasProperty PSComputerName = __SERVER
SMS_Collection Property System.Management.ManagementObject#SMS_Collection SMS_Collection {get;set;}
SMS_ObjectContainerNode Property System.Management.ManagementObject#SMS_ObjectContainerNode SMS_ObjectContainerNode {get;set;}
__CLASS Property string __CLASS {get;set;}
__DERIVATION Property string[] __DERIVATION {get;set;}
__DYNASTY Property string __DYNASTY {get;set;}
__GENUS Property int __GENUS {get;set;}
__NAMESPACE Property string __NAMESPACE {get;set;}
__PATH Property string __PATH {get;set;}
__PROPERTY_COUNT Property int __PROPERTY_COUNT {get;set;}
__RELPATH Property string __RELPATH {get;set;}
__SERVER Property string __SERVER {get;set;}
__SUPERCLASS Property string __SUPERCLASS {get;set;}
ConvertFromDateTime ScriptMethod System.Object ConvertFromDateTime();
ConvertToDateTime ScriptMethod System.Object ConvertToDateTime();
然后我只需要“扩展” SMS_Collection 和 SMS_ObjectContainerNode 属性来获取我的信息,这还不错。
但是当我尝试相同的查询并用 Get-CIMInstance 替换 Get-WMIObject 时,我得到了那个错误:
Get-CIMInstance : The WS-Management service cannot process the request. The class __GENERIC does not exist in the
root/sms/site_SMS namespace.
At line:1 char:1
+ Get-CIMInstance -ComputerName $computername -Namespace root\sms\site_ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (:) [Get-CimInstance], CimException
+ FullyQualifiedErrorId : HRESULT 0x80338000,Microsoft.Management.Infrastructure.CimCmdlets.GetCimInstanceCommand
我想我错过了一些明显的东西,但我显然没有看到。有人可以给我一个解决方案和/或这种行为的原因吗?我是 WMI 和 CIM 的菜鸟,仅在过去 3 周内与这些人一起工作,所以我还有很多东西要学。
谢谢!