2012-06-06 151 views
0

我目前正在将VB中的脚本重写到Powershell脚本中。Active Directory和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 YYYYY 名称:XXXXX ZZZZZ 等等

所以返回$ usersArray正在打印所有这些。 我不希望任何打印,直到PrintUsers功能,我想它是在这样一个编号列表格式类型: 1. XXXX YYYY 2. XXXX ZZZZ 等

我具有最困难的时候弄清楚这一点。

+0

看看这里http://technet.microsoft.com/en-us/library/ff730949.aspx。这可以帮助您为用户选择添加一些gui。 –

+0

@Christian我希望脚本用户能够输入一个数字(因为可能的用户将会是一个编号列表),然后只需按回车即可获得该号码,不得不使用鼠标会减慢速度。该脚本用于IT中的帮助台。 – CallumStyan

回答

1
# 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 * 
+0

谢谢!现在我发现如何在窗口中显示该信息,可能是消息框或其他东西 – CallumStyan

+0

此行:写主机“$ i。$($ usersArray [$ i-1] .Name)” 不起作用。它应该打印它在该数组中的所有用户名的编号列表,是否正确? – CallumStyan

+0

是的。你有$ usersArray中的任何对象/如果是这样,他们有一个Name属性吗? –

0

使用添加成员为每个用户添加一个唯一的标识符。让我们把过程,就好像它们是用户对象,例如着想:

$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); 
+0

在我获得所有用户名后使用它?对不起,我真的不明白你在做什么。 – CallumStyan