Powershell当变量为null时更改错误输出

时间:2014-07-10 06:04:25

标签: powershell

我有以下脚本,我想清理错误输出。它是我为我们的团队制作的GUI应用程序的一部分,并且非常白痴证明,但是一个用户似乎总是忘记一些事情,例如输入用户名等。请原谅可怕的格式化!

if(Get-QADUser -Identity $user -MemberOf $AquaGroup)
{
    [Microsoft.VisualBasic.Interaction]::MsgBox("$user is already a member of $AquaGroup",'OKOnly,SystemModal,Information', 'Completed!')
}
else
{
    Add-QADGroupMember -Identity $AquaGroup -Member JTC\$user
    if(Get-QADUser -Identity $user -MemberOf $AquaGroup)
{
    [Microsoft.VisualBasic.Interaction]::MsgBox("$user has been added to $AquaGroup",'OKOnly,SystemModal,Information', 'Completed!')
}
Else
{
    [Microsoft.VisualBasic.Interaction]::MsgBox("$user has not been added to $AquaGroup",'OKOnly,SystemModal,Information', 'Completed!')
}
}

当没有输入用户名并且工具尝试运行此部件时,它会吐出大量需要点击的错误。 是否可以在继续之前添加另一个IF Else部分以检查用户是否存在?或者这只是让它看起来更糟糕,脚本明智吗?或者有一种简单的方法可以将错误输出截断为可读的东西吗?

在进行错误检查时,并不是真的很喜欢。

2 个答案:

答案 0 :(得分:0)

不确定我是否正确理解了这个问题。您想在运行问题的代码段之前检查用户是否输入了用户名(存储在变量$user中)?

为此你可以简单地将代码片段包装在这样的条件中:

if ($user) {
  # rest of your code here
} else {
  # display error message or whatever
}

作为旁注,我建议使用System.Windows.Forms.MessageBox而不是MsgBox()中的Microsoft.VisualBasic.Interaction方法,因为后者不是默认安装的一部分。

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.Messagebox]::Show('some message', 'title', 'OKCancel', 'Information')
[System.Windows.Forms.Messagebox]::Show('other message', 'title', 'OK', 'Error')

答案 1 :(得分:-1)

使用try&catch可以是一种方式:

try
{
  Add-QADGroupMember -Identity existentGroup  -Member nonexistentUser
}
catch
{
  $error[0].Exception.Message
  return #use this line if you want to stop the script execution
}

这给:

Cannot resolve directory object for the given identity: 'nonexistentUser'.