You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell函数返回PSCustomObject在Out-GridView中显示异常求助

问题描述

以下PowerShell函数封装后,调用并通过Out-GridView显示结果时出现异常,但将代码直接运行(不封装为函数)时显示正常:

function Get-UserNameSIDfromAD {
    param(
        [string] $LoginName
    )
    
    [string] $domain
    [string] $username

    $domain, $username = $LoginName.split('\')

    $w32usracc = Get-CimInstance -ClassName win32_useraccount -Filter "Name='$username' and Domain='$domain'" | Select-Object -Property SID

    $res = [pscustomobject] @{
        ID      = 1
        SqlSID  = $w32usracc.SID
        Message = 'OK'
    }

    return $res
}

# 调用函数并将结果存入变量,用Out-GridView显示
$val = Get-UserNameSIDfromAD -LoginName 'mydomain\user1'
$val | Out-GridView 

PowerShell输出截图

解决方法
  • 移除未赋值的变量声明,直接在拆分时给变量赋值:
    修改后的函数代码:
    function Get-UserNameSIDfromAD {
        param(
            [string] $LoginName
        )
        
        # 直接拆分赋值,避免声明未赋值变量产生额外输出
        $domain, $username = $LoginName.split('\')
    
        $w32usracc = Get-CimInstance -ClassName win32_useraccount -Filter "Name='$username' and Domain='$domain'" | Select-Object -Property SID
    
        $res = [pscustomobject] @{
            ID      = 1
            SqlSID  = $w32usracc.SID
            Message = 'OK'
        }
    
        return $res
    }
    
  • 如果需要保留变量声明,必须给变量赋初始值,避免空值流入输出流:
    [string] $domain = ''
    [string] $username = ''
    
原因说明

PowerShell函数的返回逻辑是收集所有未被捕获的输出流内容,而非仅return指定的对象。当你声明[string] $domain和[string] $username但不赋值时,这两个变量的默认空字符串会被加入输出流,导致$val实际是包含两个空字符串和自定义对象的数组,Out-GridView处理数组时出现显示异常。而直接运行代码时,脚本级别的未赋值变量不会自动输出,因此显示正常。

内容的提问来源于stack exchange,提问作者Misael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:27:34