MessageBox 函数将字符串添加到 Return 值

MessageBox Function Prepending String to Return Value

我有以下函数,它检索当前用户的 SID,将其显示在 MessageBox 中,然后 returns 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 中的 "OK" 按钮被复制到 return 值有关 - 但为什么要这样做?

MsgBox 函数:

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

function MsgBox {
    param (
        [string]$message
    )

    [System.Windows.Forms.MessageBox]::Show($message)
}

您的 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
}