我目前正在将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 yyyyy 名称:xxxxx zzzzz 等
所以$ usersArray的返回就是打印所有这些。 我不希望任何打印,直到PrintUsers功能,我希望它是一个编号列表类型格式,如下所示: 1. xxxx yyyy 2. xxxx zzzz 等
我最难解决这个问题。
答案 0 :(得分: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 *
答案 1 :(得分:0)
使用Add-Member为每个用户添加唯一标识符。我们将进程看作是用户对象,例如:
$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);