MessageBox函数将字符串预先设置为返回值

时间:2016-07-19 15:54:35

标签: .net powershell messagebox

我有以下函数,它检索当前用户的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
}    

enter image description here

这似乎最初工作正常,但如果我从其他地方调用此函数,例如:

function SecondFunction {
    $usersid = Get-UserSid
    MsgBox $usersid
}

SID突然在其前面加上“OK”:

enter image description here

有谁知道为什么会这样?我假设它与被复制到返回值的MessageBox中的“确定”按钮有关 - 但为什么会这样做呢?

MsgBox功能:

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

function MsgBox {
    param (
        [string]$message
    )

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

1 个答案:

答案 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
}