Powershell 如何提示用户输入正确的部门名称并根据Active Directory进行验证

Powershell 如何提示用户输入正确的部门名称并根据Active Directory进行验证,powershell,active-directory,powershell-3.0,powershell-4.0,Powershell,Active Directory,Powershell 3.0,Powershell 4.0,我使用以下脚本是为了获得广告中特定部门的用户。脚本本身工作正常,但我想完成两件事: 为确保用户不能将部门名称留空 要验证Active Directory中是否存在部门名称,如果不存在,则提示用户验证名称并输入正确的名称 您可以从广告中提取部门列表,如下所示: $departments = Get-ADUser -Filter * -Property Department | Where-Object { $_.Department } |

我使用以下脚本是为了获得广告中特定部门的用户。脚本本身工作正常,但我想完成两件事:

  • 为确保用户不能将部门名称留空
  • 要验证Active Directory中是否存在部门名称,如果不存在,则提示用户验证名称并输入正确的名称
    您可以从广告中提取部门列表,如下所示:

    $departments = Get-ADUser -Filter * -Property Department |
                   Where-Object { $_.Department } |
                   Select -Expand Department -Unique
    
    do {
      $Dept = Read-Host "Enter the desired department"
    } until ($departments -contains $Dept)
    
    通过该列表,您可以如下方式验证用户输入:

    $departments = Get-ADUser -Filter * -Property Department |
                   Where-Object { $_.Department } |
                   Select -Expand Department -Unique
    
    do {
      $Dept = Read-Host "Enter the desired department"
    } until ($departments -contains $Dept)
    

    $Dept-和
    是不必要的,
    读取主机
    将始终返回字符串如果用户通过按Ctrl-C中断
    读取主机
    ,变量将保留其以前的值(
    $null
    ,如果之前未分配值)。但是,即使这样,
    -contains
    操作也会自行工作,因此这里不需要附加子句是正确的。修好了。嗨,谢谢你的帮助。我还有一个与此相关的问题。如果我运行您的脚本,它将按以下方式超时:Get ADUser:此操作返回,因为第5行的超时时间已过期:char:15+$colResults=Get ADUser-LDAPFilter$strFilter |+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+CategoryInfo:未指定(:)[Get ADUser],ADException+FullyQualifiedErrorId:此操作返回,因为超时时间已过,Microsoft.ActiveDirectory.Management.Commands。GetADUser@GeorgeMihailescu如果您有新问题:请发布新问题。您将如何将脚本分发给用户?由于您使用的是ActiveDirectory模块,因此需要在运行此脚本的所有计算机上安装此模块(因此需要在所有这些计算机上安装RSAT)。对于需要在用户上下文中运行而不需要RSAT的脚本,您需要深入到.NET(System.DirectoryServices)