1

我知道-List在 WMI 存储库命名空间中获取 WMI 类的名称,但我真的不明白它在以下上下文中的含义:

(Get-WmiObject -list Win32_ShadowCopy).Create("C:\","ClientAcessible")
4

1 回答 1

2

注意:CIM cmdlet 已取代 WMI cmdlet,但答案在某种程度上适用,只是Get-CimInstance不支持-List,但有一个专用Get-CimClasscmdlet,调用类方法的最简单方法是始终使用专用Invoke-CimMethodcmdlet。


(Get-WmiObject -list Win32_ShadowCopy).Create("C:\","ClientAcessible")

使用-List参数来访问Win32_ShadowCopy ,以便能够通过它的方法实例化.Create()它,这需要参数

相比之下,许多 WMI 类的实例不需要参数,因此一个简单的Get-WmiObject <class-name>调用通常就足够了;例如:

Get-WmiObject Win32_ComputerSystem # no arguments needed; returns instance directly

Ansgar Wiechers指出,获取 WMI 类的一种更简单(更快)的方法是将其名称转换为类型 Accelerator[wmiclass],因此与-List基于 - 的命令等效的是:

([wmiclass] Win32_ShadowCopy).Create("C:\","ClientAcessible")

也就是说,在 WMI类上调用方法更类似于 PowerShell 的方式是使用
Invoke-WmiMethod
. 同样,-List基于 - 的命令的等价物是:

Invoke-WmiMethod Win32_ShadowCopy -Name Create -ArgumentList "C:\", "ClientAcessible"

至于参数的一般用途-List

让我们问一下 PowerShell 自己的帮助系统,也可以在线获取

PS> Get-Help Get-WmiObject -Parameter List

-List [<SwitchParameter>]
    Gets the names of the WMI classes in the WMI repository namespace that is specified 
    by the Namespace parameter.

    If you specify the List parameter, but not the Namespace parameter, 
    Get-WmiObject uses the Root\Cimv2 namespace by default. 
    This cmdlet does not use the Default Namespace registry entry in the
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting registry key 
    to determine the default namespace.

换句话说:-List的目的是列出(枚举)WMI 类,可选择按类名模式过滤

  • 如果您没有明确使用-NameSpace,ROOT\Cimv2则假定。

  • 第一个位置参数 -Win32_ShadowCopy在您的情况下 - 绑定到-ClassName( -Class) 参数,在这种情况下充当filter

    • 因为Win32_ShadowCopy是一个文字类名,只有那个类被匹配,但你也可以使用通配符(见下文)。

ROOT\Cimv2例如,要查找名称中包含单词的所有 WMI 类(在命名空间中) shadow,请使用:

PS> Get-WmiObject -List -Class *shadow*


   NameSpace: ROOT\cimv2

Name                                Methods              Properties
----                                -------              ----------
Win32_ShadowProvider                {}                   {Caption, CLSID, Description, ID...}
Win32_ShadowCopy                    {Create, Revert}     {Caption, ClientAccessible, Count, Description...}
Win32_ShadowContext                 {}                   {Caption, ClientAccessible, Description, Differential...}
Win32_ShadowStorage                 {Create}             {AllocatedSpace, DiffVolume, MaxSpace, UsedSpace...}
Win32_ShadowVolumeSupport           {}                   {Antecedent, Dependent}
Win32_ShadowFor                     {}                   {Antecedent, Dependent}
Win32_ShadowOn                      {}                   {Antecedent, Dependent}
Win32_ShadowBy                      {}                   {Antecedent, Dependent}
Win32_ShadowDiffVolumeSupport       {}                   {Antecedent, Dependent}
于 2018-03-09T03:57:45.583 回答