Invoke-WmiMethod

调用 WMI 方法。

语法

Invoke-WmiMethod
      [-Class] <String>
      [-Name] <String>
      [-ArgumentList <Object[]>]
      [-AsJob]
      [-Impersonation <ImpersonationLevel>]
      [-Authentication <AuthenticationLevel>]
      [-Locale <String>]
      [-EnableAllPrivileges]
      [-Authority <String>]
      [-Credential <PSCredential>]
      [-ThrottleLimit <Int32>]
      [-ComputerName <String[]>]
      [-Namespace <String>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Invoke-WmiMethod
      -InputObject <ManagementObject>
      [-Name] <String>
      [-ArgumentList <Object[]>]
      [-AsJob]
      [-ThrottleLimit <Int32>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Invoke-WmiMethod
      -Path <String>
      [-Name] <String>
      [-ArgumentList <Object[]>]
      [-AsJob]
      [-Impersonation <ImpersonationLevel>]
      [-Authentication <AuthenticationLevel>]
      [-Locale <String>]
      [-EnableAllPrivileges]
      [-Authority <String>]
      [-Credential <PSCredential>]
      [-ThrottleLimit <Int32>]
      [-ComputerName <String[]>]
      [-Namespace <String>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Invoke-WmiMethod
      [-Name] <String>
      [-AsJob]
      [-Impersonation <ImpersonationLevel>]
      [-Authentication <AuthenticationLevel>]
      [-Locale <String>]
      [-EnableAllPrivileges]
      [-Authority <String>]
      [-Credential <PSCredential>]
      [-ThrottleLimit <Int32>]
      [-ComputerName <String[]>]
      [-Namespace <String>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Invoke-WmiMethod
      [-Name] <String>
      [-AsJob]
      [-Impersonation <ImpersonationLevel>]
      [-Authentication <AuthenticationLevel>]
      [-Locale <String>]
      [-EnableAllPrivileges]
      [-Authority <String>]
      [-Credential <PSCredential>]
      [-ThrottleLimit <Int32>]
      [-ComputerName <String[]>]
      [-Namespace <String>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Invoke-WmiMethod
      [-Name] <String>
      [-AsJob]
      [-Impersonation <ImpersonationLevel>]
      [-Authentication <AuthenticationLevel>]
      [-Locale <String>]
      [-EnableAllPrivileges]
      [-Authority <String>]
      [-Credential <PSCredential>]
      [-ThrottleLimit <Int32>]
      [-ComputerName <String[]>]
      [-Namespace <String>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

说明

Invoke-WmiMethod cmdlet 可调用 Windows Management Instrumentation (WMI) 对象的方法。

Windows PowerShell 3.0 中引入的新 CIM cmdlet 可执行与 WMI cmdlet 相同的任务。 CIM cmdlet 符合 WS-Management (WSMan) 标准和 CIM 标准,从而使得这些 cmdlet 可以使用相同的技术来管理 Windows 计算机和运行其他操作系统的那些计算机。 请不要使用 Invoke-WmiMethod,而是考虑使用 Invoke-CimMethod

示例

示例 1:列出 WMI 方法参数的必需顺序

此命令按所需的顺序列出对象。

Get-WmiObject Win32_Volume |
    Get-Member -MemberType Method -Name Format |
    Select-Object -ExpandProperty Definition

System.Management.ManagementBaseObject Format(System.String FileSystem, System.Boolean QuickFormat,
 System.UInt32 ClusterSize, System.String Label, System.Boolean EnableCompression,
 System.UInt32 Version)

若要在 PowerShell 3.0 中调用 WMI,则与备用方法不同,并要求对象值以特定的顺序输入。

示例 2:启动应用程序的实例

([Wmiclass]'Win32_Process').Create.OverloadDefinitions

System.Management.ManagementBaseObject Create(System.String CommandLine, System.String CurrentDirectory,
 System.Management.ManagementObject#Win32_ProcessStartup ProcessStartupInformation)

Invoke-WmiMethod -Path Win32_Process -Name Create -ArgumentList C:\Windows\system32\notepad.exe

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 2
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ProcessId        : 11312
ReturnValue      : 0
PSComputerName   :

此命令通过调用 Win32_Process 类的 Create 方法来启动记事本实例。

如果命令完成,则以 0 填充 ReturnValue 属性,并以一个整数(下一进程 ID 号)填充 ProcessId 属性。

示例 3:重命名文件

$invokeWmiMethodSplat = @{
    Path = "CIM_DataFile.Name='C:\scripts\test.txt'"
    Name = 'Rename'
    ArgumentList = 'C:\scripts\test_bu.txt'
}
Invoke-WmiMethod @invokeWmiMethodSplat

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ReturnValue      : 0

此命令重命名文件。 它使用 Path 参数来引用 CIM_DataFile 类的实例。 然后,它将 Rename 方法应用于该特定实例。

如果命令完成,则以 0 填充 ReturnValue 属性。

示例 4:使用“-ArgumentList”传递值数组

使用后跟 $null 值的对象 $binSD 的数组的示例。

$acl = Get-Acl test.txt
$binSD = $acl.GetSecurityDescriptorBinaryForm()
$invokeWmiMethodSplat = @{
    Class = 'Win32_SecurityDescriptorHelper'
    Name = 'BinarySDToSDDL'
    ArgumentList = $binSD, $null
}
Invoke-WmiMethod @invokeWmiMethodSplat

参数

-ArgumentList

指定要传递给被调用方法的参数。 此参数的值必须是对象数组,这些对象必须按被调用方法所需的顺序进行显示。 Invoke-CimCommand cmdlet 没有这些限制。

若要确定列出这些对象所采用的顺序,请运行 WMI 类上的 GetMethodParameters() 方法,如接近本主题末尾的示例 1 中所示。

重要

如果第一个值为包含多个元素的数组,则要求第二个值为 $null。 否则,该命令将生成错误,例如 Unable to cast object of type 'System.Byte' to type 'System.Array'.。 请参见上述示例 4。

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AsJob

指示此 cmdlet 将命令作为后台作业运行。 使用此参数可运行需要较长时间才能完成的命令。

使用 AsJob 参数时,该命令将返回表示后台作业的对象,然后显示命令提示符。 当作业完成时,你可以继续在此会话中工作。 如果 Invoke-WmiMethod 用于远程计算机,则作业在本地计算机上创建,并且来自远程计算机的结果将自动返回本地计算机。 若要管理作业,请使用包含 Job 名词的 cmdlet (Job cmdlet)。 若要获取作业结果,请使用 Receive-Job cmdlet。

若要将此参数用于远程计算机,必须为本地和远程计算机配置远程处理。 此外,在 Windows Vista 和更高版本的 Windows 中,必须使用“以管理员身份运行”选项启动 Windows PowerShell。 有关详细信息,请参阅 about_Remote_Requirements

有关 Windows PowerShell 后台作业的详细信息,请参阅 about_Jobsabout_Remote_Jobs

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

-Authentication

指定用于 WMI 连接的身份验证级别。 此参数的可接受值为:

  • -1Unchanged
  • 0Default
  • 1None(不执行身份验证。)
  • 2Connect(仅当客户端与应用程序建立了关系时才执行身份验证。)
  • 3Call(应用程序收到请求时只在每次调用的开始执行身份验证。)
  • 4Packet(对从客户端收到的所有数据执行身份验证。)
  • 5PacketIntegrity(所有在客户端和应用程序之间传送的数据都经过身份验证和验证。)
  • 6PacketPrivacy(使用其他身份验证等级的属性,并且所有数据都加密。)
Type:AuthenticationLevel
Accepted values:Default, None, Connect, Call, Packet, PacketIntegrity, PacketPrivacy, Unchanged
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Authority

指定用于对 WMI 连接进行身份验证的授权机构。 可以指定标准 Windows NT LAN 管理器 (NTLM) 或 Kerberos 身份验证。 若要使用 NTLM,请将授权机构设置设为 ntlmdomain:<DomainName>,其中 <DomainName> 标识有效的 NTLM 域名。 若要使用 Kerberos,请指定 kerberos:<DomainName>\<ServerName>。 连接到本地计算机时不能包含授权机构设置。

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

-Class

指定包含要调用的静态方法的 WMI 类。

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

-ComputerName

将此 cmdlet 在其上运行命令的计算机指定为字符串数组。 默认为本地计算机。

键入一台或多台计算机的 NetBIOS 名称、IP 地址或完全限定的域名。 若要指定本地计算机,请键入计算机名称、点 (.) 或 localhost

此参数不依赖于 Windows PowerShell 远程处理。 即使计算机未配置为运行远程命令,也可以使用 ComputerName 参数。

Type:String[]
Aliases:Cn
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

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

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

-Credential

指定有权执行此操作的用户帐户。 默认为当前用户。 键入用户名,例如 User01Domain01\User01User@Contoso.com。 或者输入 PSCredential 对象,例如 Get-Credential cmdlet 返回的对象。 键入用户名时,将会提示你输入密码。

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

-EnableAllPrivileges

指示此 cmdlet 在命令进行 WMI 调用之前启用当前用户的所有权限。

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

-Impersonation

指定要使用的模拟级别。 此参数的可接受值为:

  • 0Default(读取本地注册表的默认模拟级别,通常设置为“3Impersonate”。)
  • 1Anonymous(隐藏调用方的凭据。)
  • 2Identify(允许对象查询调用方的凭据。)
  • 3Impersonate(允许对象使用调用方的凭据。)
  • 4Delegate(允许对象允许其他对象使用调用方的凭据。)
Type:ImpersonationLevel
Accepted values:Default, Anonymous, Identify, Impersonate, Delegate
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

指定要用作输入的 ManagementObject 对象。 如果使用此参数,则忽略 FlagArgument 参数之外的所有其他参数。

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

-Locale

指定 WMI 对象的首选区域设置。 按首选顺序将 Locale 参数的值指定为 MS_<LCID> 格式的数组。

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

-Name

指定要调用的方法的名称。 此参数是必需的,不能为 null 或为空。

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

-Namespace

当此参数与 Class 参数一起使用时,它将指定引用的 WMI 类或对象所在的 WMI 存储库命名空间。

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

-Path

指定 WMI 类的 WMI 对象路径,或指定 WMI 类实例的 WMI 对象路径。 指定的类或实例必须包含 Name 参数中指定的方法。

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

-ThrottleLimit

为可同时执行的 WMI 操作数目指定一个限制值。 此参数与 AsJob 参数一起使用。 节流限制仅适用于当前命令,而不适用于会话或计算机。

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

-WhatIf

显示运行该 cmdlet 时会发生什么情况。 cmdlet 未运行。

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

输入

None

此 cmdlet 不接受任何输入。

输出

None

此 cmdlet 将不生成任何输出。

备注

Windows PowerShell 包含以下 Invoke-WmiMethod 别名:

  • iwmi