[ADSI] ::存在的问题

时间:2018-02-05 20:05:34

标签: powershell adsi

在尝试删除用户之前,我试图确定用户是否存在。我找到了这个命令并尝试将其实现到我的脚本中。但是我注意到,无论是否存在,该命令都将返回我输入的任何用户名。有人可以帮我解释一下使用这个脚本的正确方法,还是有人能告诉我一个更好的方法来确定用户是否存在?

[ADSI]::Exists("WinNT://Lotzi")

以下代码应该失败b / c Lotzi不是实际用户,但命令将返回true。

2 个答案:

答案 0 :(得分:1)

以下是检查Active Directory中是否存在特定帐户的快速方法:

$accountName = "testname"
$searcher = [ADSISearcher] "(sAMAccountName=$accountName)"
$accountExists = $searcher.FindOne() -ne $null

答案 1 :(得分:0)

您不需要使用ADSI,这是旧的方式。嗯,你可以,但只是说。

使用PowerShell AD cmdlet?

# Get parameters, examples, full and Online help for a cmdlet or function

(Get-Command -Name Get-ADUser).Parameters
Get-help -Name Get-ADUser -Examples
Get-help -Name Get-ADUser -Full
Get-help -Name Get-ADUser -Online


(Get-Command -Name Get-ADComputer).Parameters
Get-help -Name Get-ADComputer -Examples
Get-help -Name Get-ADComputer -Full
Get-help -Name Get-ADComputer -Online

这就是他们存在的原因。现在您需要在工作站上下载并安装或只安装Windows RSAT工具......

  

https://support.microsoft.com/en-us/help/2693643/remote-server-administration-tools-rsat-for-windows-operating-systems

...或远程控制域控制器以使用AD cmdlet。

  

如何在Windows 7中使用2012 Active Directory PowerShell Cmdlet   https://blogs.technet.microsoft.com/ashleymcglone/2013/06/27/how-to-use-the-2012-active-directory-powershell-cmdlets-from-windows-7

然后就这样做......

$Users = 'TestUser001','TestUser001','TestUser001'
ForEach($User in $Users)
{ 
    $User = $(try {Get-ADUser 'TestUser001'} catch {$null})
    if ($User -ne $null) {
      # Exists
    } else {
      # Doesn't Exist
      Write-Warning -Message "User $User not found"
    }
}

$Computers = 'Computer001','Computer001','Computer001'
ForEach ($Computer in $Computers)
{ 
    $Computer = $(try {Get-ADUser 'TestUser001'} catch {$null})
    if ($Computer -ne $null) {
      # Exists
    } else {
      # Doesn't Exist
      Write-Warning -Message "Computer $Computer not found"
    }
}