我是 Povershell 的新手。我正在创建一个脚本来从 Winform 获取有关 AD 用户的数据。我按名称选择用户,因为这样更方便。但 Active Directory 包含相同的名称,并且脚本会引发错误。遇到这种情况该如何处理?
$Users = Get-ADuser -filter * -Properties Name
Foreach ($User in $Users)
{
$ComboBox1.Items.Add($User.Name)
}
function Button1_Click()
{
$script:user1 = $ComboBox1.SelectedItem
$script:selected_user = (get-aduser -ldapfilter "(displayname=$user1)" -property samaccountname | select-object -property samaccountname).samaccountname
write-host $selected_user
if ((Get-ADUser -Identity $selected_user).Enabled)
{
$Label6.Text = ''
$Label6.Forecolor = 'Green'
$Label6.Text = 'User enabled'
}
else
{
$Label6.Text = ''
$Label6.Forecolor = 'Red'
$Label6.Text = 'User disabled'
}
}
您的代码的问题是第二次调用
Get-ADUser
,它不是必需的,可以删除。如果您想处理该错误,可以使用 try
/ catch
语句,但同样,在这种情况下并不需要。
您已经使用
LDAPFilter
查询用户,这不会产生任何错误 除非 $user1
为 null 或为空,因此您可以简单地删除 .SamAccountName
的扩展并按原样使用该对象:
function Button1_Click() {
$script:user1 = $ComboBox1.SelectedItem
$script:selected_user = Get-ADUser -LDAPFilter "(displayname=$user1)"
Write-Host $selected_user
if (-not $selected_user) {
# here is for user couldn't be found with that displayName
}
elseif ($selected_user.Enabled) {
$Label6.Text = ''
$Label6.Forecolor = 'Green'
$Label6.Text = 'User enabled'
}
else {
$Label6.Text = ''
$Label6.Forecolor = 'Red'
$Label6.Text = 'User disabled'
}
}