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

解决方法
- 移除未赋值的变量声明,直接在拆分时给变量赋值:
修改后的函数代码: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
相关产品推荐
相关产品推荐

