【问题标题】:How to properly pass a Win32 class object to a function如何正确地将 Win32 类对象传递给函数
【发布时间】:2019-11-09 18:51:42
【问题描述】:

我尝试使用 Win32 编写返回 CPU 名称的脚本 (PowerShell):

$temp = Get-WmiObject Win32_Processor

$temp.Name

function Get-CPU-Name {
    [parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][System.Management.ManagementBaseObject]$Temp1
    return $Temp1.Name
}

Get-CPU-Name

函数调用应该返回处理器的名称,但它不返回任何内容。如何正确地将带有“Get-WmiObject Win32_Processor”命令结果的变量传递给函数

【问题讨论】:

    标签: function powershell winapi


    【解决方案1】:

    你快到了,但忘了把参数放在param(..)中。

    这应该可行:

    function Get-CPU-Name { 
        param (
            [parameter(Mandatory=$true, Position = 0)]
            [System.Management.ManagementBaseObject]$Temp1
        )
        $Temp1.Name
    }
    
    Get-CPU-Name (Get-WmiObject Win32_Processor)
    

    【讨论】:

    • $Value = Get-WmiObject Win32_Processor -ErrorAction Stop function Get-CPU-Name { param ([parameter(Mandatory=$true, Position = 0)][System.Management.ManagementBaseObject]$Temp1) return ($Temp1.Name) } Get-CPU-Name -Temp1 $Value
    • 很好,西奥。 @Blademoon:忘记param(...) 会被悄悄地忽略 这很棘手——我问过this GitHub issue 是否可以改变这一点
    • 谁能回答如何检查这样一个传输的参数是否为空?为了保护函数免受可能的错误?
    • 为什么不直接使用(Get-WmiObject Win32_Processor).Name
    • @Blademoon: [ValidateNotNullOrEmpty()],就像您最初的尝试一样,将强制执行非空 - 只要它正确位于 param(...) 块内。
    猜你喜欢
    • 2019-08-24
    • 2019-11-05
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2018-12-25
    • 1970-01-01
    相关资源
    最近更新 更多