PowerShell 技能连载 - 用 Splatting 技术封装 WMI 调用

Splatting 是向 cmdlet 传递多个参数的好方法。以下例子演示了如何封装 WMI 调用,并且使它们支持不同的名称:

function Get-BIOSInfo
{
    param
    (
        $ComputerName,
        $Credential,
        $SomethingElse
    )

    $null = $PSBoundParameters.Remove('SomethingElse')

    Get-WmiObject -Class Win32_BIOS @PSBoundParameters
}

Get-BIOSInfo 通过 WMI 获取 BIOS 信息,并且它支持本地、远程以及通过证书的远程调用。这是因为用户向 Get-BIOSInfo 传递的实参实际上传递给了 Get-WmiObject 对应的参数。所以当一个用户没有传递 -Credential 参数,那么就不会向 Get-WmiObject 传递 -Credential 参数。

Splatting 技术通常使用一个自定义的哈希表,它的每个键代表一个形参,每个值代表一个实参。在这个例子中,使用了一个预定义的 $PSBoundParameters 哈希表。它事先插入了要传递给函数的参数。

请确保不要传给目标 cmdlet 它不知道的参数。举个例子,Get-BIOSInfo 函数定义了一个“SomethingElse”参数。而 Get-WmiObject 没有这个参数,所以您在 splat 之前,您必须先调用 Remove() 方法从哈希表中把这个键移掉。

PowerShell 技能连载 - 用 Splatting 技术封装 WMI 调用

http://blog.vichamp.com/2014/06/04/use-splatting-to-encapsulate-wmi-calls/

作者

吴波

发布于

2014-06-04

更新于

2022-07-06

许可协议

评论