Windows Active Directory和Powershell

Windows Active Directory和Powershell,windows,powershell,vbscript,active-directory,Windows,Powershell,Vbscript,Active Directory,我目前正在将VB中的一个脚本重写为Powershell脚本 脚本所做的是根据脚本用户输入在Active Directory中搜索用户 Function PromptForName{ $nameInput = "*" $nameInput += Read-Host ("Please enter a full or partial name.") $nameInput += "*" return $nameInput } Function FindUsers{

我目前正在将VB中的一个脚本重写为Powershell脚本

脚本所做的是根据脚本用户输入在Active Directory中搜索用户

Function PromptForName{
    $nameInput = "*"
    $nameInput += Read-Host ("Please enter a full or partial name.")
    $nameInput += "*"
    return $nameInput
}

Function FindUsers{
    param ([string]$n)
    $usersArray = Get-ADUser -f {DisplayName -like $n} | Select-Object Name
    return $usersArray
}
此代码将打印出正确的姓名列表。然后我想做的是允许用户选择其中一个姓名,并获得有关此人的更多信息。我一直坚持让脚本用户选择其中一个名称

如何提示输入其他信息;该框将显示FindUsers提供的所有名称的编号列表,然后根据他们选择的用户返回一个编号?我完全迷路了

这就是我目前试图做到的,尽管我很确定这是完全错误的

Function PrintUsers{
    param $a
    [int]$i, $j
    [string]$userList
    $j = 1
    foreach($object in $array){
        $userList += ($j + $array[$i])
        $j++
    }
    return $userList
} 

Function SelectUser{
    param $list
    $user = Read-Host ($list)
}
编辑:

我已将我的功能更新为以下内容:

Function FindUsers{
    param ([string]$n)
    $usersArray = @(Get-ADUser -f {DisplayName -like $n} | Select-Object Name| Format-List)
    return $usersArray
}

Function PrintUsers{
    param ([String[]]$array)
    $i
    for($i = 1; $i -lt $usersArray.length; $i++){
        Write-Host "$i. $($usersArray[$i-1].Name)"
    }
}
FindUsers之后的输出如下所示: 名称:xxxxx YYYY 名称:xxxxx ZZZZ 等等

所以$usersArray的返回正在打印所有这些。 在PrintUsers运行之前,我不希望进行任何打印,我希望它采用如下的编号列表类型格式: 1.xxxx yyyy 2.xxxx zzzz 等等


我很难弄明白这一点

使用“添加成员”为每个用户添加唯一标识符。为了举例说明,让我们将流程视为用户对象:

$procs = gps;
$procs = $procs | % { $i=0; } {
    Add-Member -MemberType NoteProperty -InputObject $_ -Name Number -Value $i -PassThru;
    $i++;
};
$procs | select Number,Name;
$procid = Read-Host -Prompt 'Enter the number of the process you would like to operate on';
$proc = $procs | ? { $_.Number -eq $procid };
Write-Host -Object ('Operating on proc: {0}' -f $proc.Name);

看看这里。这可以帮助您为用户选择添加一些gui。@Christian我希望脚本用户能够输入一个数字(因为可能的用户将是一个编号的列表),然后只需按enter键即可获得数字,使用鼠标会减慢速度。这个脚本是用于帮助台的。在我得到所有用户名后使用它?对不起,我真的不明白你在干什么。谢谢!现在,我了解了如何在窗口(可能是消息框或其他什么)中显示该信息。该行:Write Host“$I.$($usersArray[$I-1].Name)”不起作用。它应该打印一个包含该数组中所有用户名的编号列表,对吗?是的。$usersArray中是否有任何对象/如果有,它们是否有Name属性?它现在似乎正在工作,但我遇到了一些奇怪的问题,Get ADUser没有返回一些用户。例如,如果我搜索我的名字,脚本会挂起而没有找到我,或者如果我搜索Ryan,它会找到两个Ryan L,但搜索Ryan L只会返回一个人。使用ADUC时会得到不同的结果吗?
# get all users
$usersArray = @(Get-ADUser -f {DisplayName -like $n} )

# create menu
for($i=1; $i -le $usersArray.count; $i++){
    Write-Host "$i. $($usersArray[$i-1].Name)"
}

# prompt for user number
$user = Read-Host Enter the user number to get more info

# display full info for selected user
$usersArray[$user-1] | Format-List *