0

現在、VBにあるスクリプトをPowershellスクリプトに書き直しています。

スクリプトが行うことは、script-users入力に基づいてActiveDirectoryでユーザーを検索することです。

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
}

このコードは、名前の正しいリストを出力します。次に私がやりたいのは、ユーザーがそれらの名前の1つを選択できるようにし、その人に関する詳細情報を入手できるようにすることです。スクリプトユーザーがそれらの名前の1つを選択できるようにすることに固執しています。

別の入力を求めるにはどうすればよいですか。ボックスには、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名前:xxxxxxxxzzzzなど。

したがって、$ usersArrayが返されると、それがすべて出力されます。PrintUsers関数まで印刷したくないので、次のような番号付きリストタイプの形式にします。1。xxxx yyyy 2.xxxxzzzzなど。

私はこれを理解するのに最も苦労しています。

4

2 に答える 2

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 *
于 2012-06-06T20:16:38.010 に答える
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);
于 2012-06-06T19:39:52.070 に答える