Invoke-CMQuery

运行Configuration Manager查询。

语法

Invoke-CMQuery
      -InputObject <IResultObject>
      [-LimitToCollectionId <String>]
      [-DisableWildcardHandling]
      [-ForceWildcardHandling]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Invoke-CMQuery
      -Id <String>
      [-LimitToCollectionId <String>]
      [-DisableWildcardHandling]
      [-ForceWildcardHandling]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Invoke-CMQuery
      [-LimitToCollectionId <String>]
      -Name <String>
      [-DisableWildcardHandling]
      [-ForceWildcardHandling]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

说明

使用此 cmdlet 在 Configuration Manager 站点中运行查询。 Configuration Manager查询定义 WMI 查询语言 (WQL) 表达式,以便根据提供的条件从站点数据库获取信息。 WQL 类似于 SQL,但仍通过 SMS 提供程序而不是直接访问数据库。 因此,WQL 仍遵循基于角色的访问配置。

运行查询时,站点将处理 WQL 表达式,并在 PowerShell 中返回结果。 根据 WQL 语句的结构,结果的格式可能会有所不同。

查询可以返回大多数类型的Configuration Manager对象,其中包括计算机、站点、集合、应用程序和清单数据。 有关详细信息,请参阅 Configuration Manager 中的查询简介

注意

从Configuration Manager站点驱动器运行Configuration Manager cmdlet,例如 PS XYZ:\>。 有关详细信息,请参阅 入门

示例

示例 1:查看和运行默认查询

此示例首先显示 Get-CMQuery cmdlet,以显示默认查询 “此网站”及其子网站的属性。

然后,它显示 Invoke-CMQuery cmdlet 以运行相同的查询并显示结果。

PS XYZ:\> Get-CMQuery -Id "SMS012"

SmsProviderObjectPath          : SMS_Query.QueryID="SMS012"
Comments                       : This site and all its subsites in the ConfigMgr hierarchy
Expression                     : SELECT SiteCode, SiteName, Version, ServerName FROM sms_siteandsubsites
LimitToCollectionID            :
LocalizedCategoryInstanceNames : {}
Name                           : This Site and its Subsites
QueryID                        : SMS012
ResultAliasNames               : {sms_siteandsubsites, sms_siteandsubsites, sms_siteandsubsites, sms_siteandsubsites}
ResultColumnsNames             : {sms_siteandsubsites.SiteCode, sms_siteandsubsites.SiteName,
                                 sms_siteandsubsites.Version, sms_siteandsubsites.ServerName}
TargetClassName                : sms_siteandsubsites

PS XYZ:\> Invoke-CMQuery -Id "SMS012"

SmsProviderObjectPath : SMS_SiteAndSubsites.SiteCode="XYZ"
ServerName            : cmserver.contoso.com
SiteCode              : XYZ
SiteName              : Production primary site
Version               : 5.00.9043.1000

请注意, 在 Get-CMQuery cmdlet 的输出中,WQL 表达式 很简单。 它从单个类中选择四个属性。

然后,请注意 Invoke-CMQuery cmdlet 的输出是一个简单的表。

示例 2:查看和运行复杂查询

此示例首先显示 Get-CMQuery cmdlet,以显示自定义查询的属性。

然后,它显示 Invoke-CMQuery cmdlet 以运行相同的查询并显示结果。

PS XYZ:\> Get-CMQuery -Id "XYZ00002"

SmsProviderObjectPath          : SMS_Query.QueryID="XYZ00002"
Comments                       :
Expression                     : select SMS_R_System.Name, SMS_R_System.LastLogonUserName,
                                 SMS_G_System_OPERATING_SYSTEM.Caption from SMS_R_System inner join
                                 SMS_G_System_OPERATING_SYSTEM on SMS_G_System_OPERATING_SYSTEM.ResourceID =
                                 SMS_R_System.ResourceId where SMS_G_System_OPERATING_SYSTEM.Caption like "Microsoft Windows Server 2012%"
LimitToCollectionID            : XYZ0025F
LocalizedCategoryInstanceNames : {}
Name                           : Server 2016
QueryID                        : XYZ00002
ResultAliasNames               : {SMS_R_System, SMS_R_System, SMS_G_System_OPERATING_SYSTEM}
ResultColumnsNames             : {SMS_R_System.Name, SMS_R_System.LastLogonUserName,
                                 SMS_G_System_OPERATING_SYSTEM.Caption}
TargetClassName                : SMS_R_System

PS XYZ:\> Invoke-CMQuery -Id "XYZ00002"


SmsProviderObjectPath         : __GENERIC
SMS_G_System_OPERATING_SYSTEM :
                                instance of SMS_G_System_OPERATING_SYSTEM
                                {
                                        Caption = "Microsoft Windows Server 2012 R2 Datacenter";
                                };

SMS_R_System                  :
                                instance of SMS_R_System
                                {
                                        LastLogonUserName = "jqpublic";
                                        Name = "millcreek01";
                                };

此查询具有一个更复杂的 表达式 ,用于联接两个类。 然后,查询的结果会更加复杂。

参数

-Confirm

提示你在运行 cmdlet 之前进行确认。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DisableWildcardHandling

此参数将通配符视为文本字符值。 不能将其与 ForceWildcardHandling 组合使用。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ForceWildcardHandling

此参数处理通配符,并可能导致意外行为 (不建议) 。 不能将其与 DisableWildcardHandling 结合使用。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

指定要运行的查询的 ID。 例如,"XYZ00006"

Type:String
Aliases:QueryId
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

指定要运行的查询对象。 若要获取此对象,请使用 Get-CMQuery cmdlet。

Type:IResultObject
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LimitToCollectionId

如果查询配置为提示输入限制集合,请使用此参数指定集合 ID。 如果查询的 LimitToCollectionID 属性为 <Prompt>,并且运行查询时未包含此参数,则 cmdlet 将失败。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

指定要运行的查询的名称。

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

显示在 cmdlet 运行时发生的情况。 cmdlet 不会运行。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

Microsoft.ConfigurationManagement.ManagementProvider.IResultObject

输出

System.Object