我有以下函数,它检索当前用户的SID,将其显示在MessageBox
中,然后返回SID值:
function Get-UserSid {
$objUser = New-Object System.Security.Principal.NTAccount($username)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
MsgBox $strSID.Value
$strSID.Value
}
这似乎最初工作正常,但如果我从其他地方调用此函数,例如:
function SecondFunction {
$usersid = Get-UserSid
MsgBox $usersid
}
SID突然在其前面加上“OK”:
有谁知道为什么会这样?我假设它与被复制到返回值的MessageBox
中的“确定”按钮有关 - 但为什么会这样做呢?
MsgBox功能:
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
function MsgBox {
param (
[string]$message
)
[System.Windows.Forms.MessageBox]::Show($message)
}
答案 0 :(得分:0)
您的MsgBox函数正在将[System.Windows.Forms.MessageBox]::Show($message)
命令的结果放在管道上。
您可以将其分配给变量并忽略它
function Get-UserSid {
$objUser = New-Object System.Security.Principal.NTAccount($username)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
#Ignore this...
$ignore = MsgBox $strSID.Value
#return the SID
$strSID.Value
}
或将其传递给Out-Null
function Get-UserSid {
$objUser = New-Object System.Security.Principal.NTAccount($username)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
#Ignore this...
MsgBox $strSID.Value | Out-Null
#return the SID
$strSID.Value
}