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 之前进行确认。

类型:SwitchParameter
别名:cf
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-DisableWildcardHandling

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

类型:SwitchParameter
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-ForceWildcardHandling

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

类型:SwitchParameter
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Id

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

类型:String
别名:QueryId
Position:Named
默认值:None
必需:True
接受管道输入:False
接受通配符:False

-InputObject

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

类型:IResultObject
Position:Named
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-LimitToCollectionId

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

类型:String
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Name

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

类型:String
Position:Named
默认值:None
必需:True
接受管道输入:False
接受通配符:False

-WhatIf

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

类型:SwitchParameter
别名:wi
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

输入

Microsoft.ConfigurationManagement.ManagementProvider.IResultObject

输出

System.Object