POWERSHELL | Lokale gebruikers als keuze menu in script

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Jan-man
  • Registratie: Juli 2009
  • Laatst online: 14:08
Mijn vraag

Ik heb hier een 15 tal pc's waar men via RDP op wil kunnen inloggen wanneer 1 van de gebruikers afwezig is, en er dingen geregeld moet worden. Hiervoor wou ik een script maken en tot dus ver werkt die prima. Nadeel is steeds weer handmatig user naam intypen / kopieren. Ik dacht dat kan anders maar dat viel even tegen.

Ik ben geen exper in Powershell maar weet me vaak wel te redden. Maar nu heb ik jullie hulp dus nodig :).

Relevante software en hardware die ik gebruik

Powershell, Computers hangen niet in een domein en de gebruikers werken dus lokaal op de pc.

Wat ik al gevonden of geprobeerd heb
code:
1
2
3
4
foreach ($i in Get-WmiObject -Class Win32_UserAccount -filter 'LocalAccount=true' | Select name) 
{ 
    echo $i.name 
}


Met deze code kan ik dus netjes een rijtje met lokale gebruikers maken. Liefste zou ik gewoon een optie menu hebben.

code:
1
2
3
4
5
1 - User1
2 - User2
3 - User3

Geef nummer user:


Zodoende kan je dan bijvoorbeeld 3 opgeven zodat je geen typos in de gebruikersnaam maakt. Maar dat lukt me niet. Heb wat geprutst met arrays maar daar loop ik dus vast. Mischien is er hier iemand die mij de juiste richting op kan sturen.

Hieronder de volledige powershell code dus ik nu heb.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
echo "                                                            "
echo "=================== Remote desktop script =================="
echo "=                                                           "
echo "=  Dit scripts pas de volgende items aan op deze pc/laptop  "
echo "=                                                           "
echo "=   * Remote desktop aanzetten.                             "
echo "=   * Windows defender firewall instellen.                  "
echo "=   * Gebruiker rechten geven voor RDP.                     "
echo "=   * Administrator rechten geven voor RDP.                 "
echo "=   * Administartor account aanmaken.                       "
echo "=                                                           "
echo "============================================================"
echo "                                                            "

$Continue = Read-Host "Remote desktop instellen ? (Y/N)"
while("Y","N" -notcontains $Continue){$Continue = Read-Host "Remote desktop instellen ? (Y/N)"}
if ($Continue -eq "Y")
{

###
# - Lokale gebruikers ophalen en weergeven.
###

echo "" #voor overzicht

foreach ($i in Get-WmiObject -Class Win32_UserAccount -filter 'LocalAccount=true' | Select name) 
{ 
    echo $i.name 
}

echo "" #voor overzicht

$naam = Read-Host -Prompt "Voer gebruikersnaam in"

###
# - Indien de taal van de pc niet nederlands is dan gaan we er vanuit dat hij als engels is geinstalleerd.
###

$taal = GET-WinSystemLocale | Select name

if($taal = "nl-NL")
{
    $netFirewallRule = "Extern bureaublad"
    $Group = "Externe bureaubladgebruikers"
}
else #taal is waarschijnlijk Engels.
{
    $netFirewallRule = "Remote Desktop"
    $Group = "Remote Desktop Users"
}

###
# - Remote dekstop aanzetten in windows register
###

Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -name "fDenyTSConnections" -value 0 -Whatif

###
# - Firewall rule aanmaken
###

Enable-NetFirewallRule -DisplayGroup "$netFirewallRule" -Whatif

###
# - User + Administrator toevoegen aan remote dekstop user groep
###

Add-LocalGroupMember -Group "$Group" -Member $naam -Whatif
Add-LocalGroupMember -Group "$Group" -Member Administrator -Whatif

}

Beste antwoord (via Jan-man op 20-06-2022 09:04)


  • N0a
  • Registratie: Februari 2021
  • Laatst online: 28-07 11:28

N0a

Zo dan?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#Collection array list om .add() function te hebben
$lijstgebruikers = [System.Collections.ArrayList]@()

foreach ($i in Get-WmiObject -Class Win32_UserAccount -filter 'LocalAccount=true' | Select name) 
{ 
    #VOID om geen output te hebben
    [void]$lijstgebruikers.add($i.name.tostring())
  
}
$lijstgebruikers| % {$counter = 1}{"$counter - $_ ";$counter++}
[int]$nummer = Read-Host -Prompt "Kies een nummer"
#hier nog controle dat cijfer binnen range van je array zit
echo "Je koos voor:" $lijstgebruikers[$nummer-1]

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • N0a
  • Registratie: Februari 2021
  • Laatst online: 28-07 11:28

N0a

Zo dan?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#Collection array list om .add() function te hebben
$lijstgebruikers = [System.Collections.ArrayList]@()

foreach ($i in Get-WmiObject -Class Win32_UserAccount -filter 'LocalAccount=true' | Select name) 
{ 
    #VOID om geen output te hebben
    [void]$lijstgebruikers.add($i.name.tostring())
  
}
$lijstgebruikers| % {$counter = 1}{"$counter - $_ ";$counter++}
[int]$nummer = Read-Host -Prompt "Kies een nummer"
#hier nog controle dat cijfer binnen range van je array zit
echo "Je koos voor:" $lijstgebruikers[$nummer-1]

Acties:
  • 0 Henk 'm!

  • Jan-man
  • Registratie: Juli 2009
  • Laatst online: 14:08
N0a schreef op zondag 19 juni 2022 @ 23:40:
Zo dan?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#Collection array list om .add() function te hebben
$lijstgebruikers = [System.Collections.ArrayList]@()

foreach ($i in Get-WmiObject -Class Win32_UserAccount -filter 'LocalAccount=true' | Select name) 
{ 
    #VOID om geen output te hebben
    [void]$lijstgebruikers.add($i.name.tostring())
  
}
$lijstgebruikers| % {$counter = 1}{"$counter - $_ ";$counter++}
[int]$nummer = Read-Host -Prompt "Kies een nummer"
#hier nog controle dat cijfer binnen range van je array zit
echo "Je koos voor:" $lijstgebruikers[$nummer-1]
Dat is exact wat ik zoek! Hier kan ik zeker verder mee. Heel erg bedankt voor de hulp.