Powershell和SCCM - 无法使用CIM进行INNER JOIN查询(__GENERIC CLASS错误)

时间:2017-07-21 13:41:38

标签: powershell wmi sccm wql cim

我目前正在开发一个Powershell模块,以帮助我的同事和我使用SCCM和脚本“无缝地”工作(因为SCCM Cmdlet太慢,因此无法使用)。

在这个模块中,我创建了一个名为Get-CMCollectionsAndFolder的函数,它从SCCM中检索所有集合(使用类SMS_Collection)。我还尝试在该列表中添加这些集合的FolderName和ContainerNodeID,如SMS_ObjectContainerItem类所示。

我的所有模块请求都是使用CIM完成的,但由于一些奇怪的原因,我无法使用CIM编写下面的JOIN查询,只能使用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"

我正在获取一个包含thoses属性的对象数组:

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周的人合作,所以我还有很多需要学习的东西。

谢谢!

0 个答案:

没有答案