[Powershel] Script vraagt om name

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Raverty
  • Registratie: Juni 2015
  • Niet online
Beste Medetweakers,

Ik heb onderstaande code geschreven en gedeeltes van internet afghaald.
Nu probeer ik gebruikers vanuit een excel lijst te importeren. Dat lukt.

Wat wel werkt is het volgende:
Dit heb ik getest door een test account in het excel bestand te zetten die al bestaat. Dan krijg ik netjes een warning.

Ik heb ook met een echo getest of mijn variable de data uit de CSV lijst leest. Dat werkt ook. Dus als ik

PowerShell:
1
echo $Lastname

doe of een andere echo krijg ik de verwachtte output zoals ook in mijn CSV bestand staat. zoals in onderstaand stuk code.

PowerShell:
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
# Import active directory module for running AD cmdlets
Import-Module activedirectory
  
#Store the data from ADUsers.csv in the $ADUsers variable
$ADUsers = Import-csv -Path "C:\Users\%username%\Desktop\powershell_create_bulk_users\bulk_users1.csv" -delimiter ";"

#Loop through each row containing user details in the CSV file 
foreach ($User in $ADUsers)
{
    #Read user data from each field in each row and assign the data to a variable as below
        
    $Username   = $User.username
    $Password   = $User.password
    $Firstname  = $User.firstname
    $Lastname   = $User.lastname
    $OU         = $User.ou #This field refers to the OU the user account is to be created in
    $email      = $User.email
    $streetaddress = $User.streetaddress
    $city       = $User.city
    $zipcode    = $User.zipcode
    $jobtitle   = $User.jobtitle
    $Password = $User.Password
    $LogonScript = "Login_NL.bat"


    #Check to see if the user already exists in AD
    if ($checkuser=Get-ADUser -Filter {SamAccountName -eq "$Username"})
    {
         #If user does exist, give a warning
         Write-Warning "A user account with username $Username already exist in Active Directory."
    }
}


Wat ik niet werkend krijg is het stuk vanaf New-ADUser in de code hieronder:
PowerShell:
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
# Import active directory module for running AD cmdlets
Import-Module activedirectory
  
#Store the data from ADUsers.csv in the $ADUsers variable
$ADUsers = Import-csv -Path "C:\Users\%username%\Desktop\powershell_create_bulk_users\bulk_users1.csv" -delimiter ";"

#Loop through each row containing user details in the CSV file 
foreach ($User in $ADUsers)
{
    #Read user data from each field in each row and assign the data to a variable as below
        
    $Username   = $User.username
    $Password   = $User.password
    $Firstname  = $User.firstname
    $Lastname   = $User.lastname
    $OU         = $User.ou #This field refers to the OU the user account is to be created in
    $email      = $User.email
    $streetaddress = $User.streetaddress
    $city       = $User.city
    $zipcode    = $User.zipcode
    $jobtitle   = $User.jobtitle
    $Password = $User.Password
    $LogonScript = "Login_NL.bat"


    #Check to see if the user already exists in AD
    if ($checkuser=Get-ADUser -Filter {SamAccountName -eq "$Username"})
    {
         #If user does exist, give a warning
         Write-Warning "A user account with username $Username already exist in Active Directory."
    }
    else
    {
        #User does not exist then proceed to create the new user account
        
        #Account will be created in the OU provided by the $OU variable read from the CSV file
        New-ADUser `
            -Name "$Lastname, $Firstname" `
            $SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force `
            -AccountPassword $SecurePassword -ChangePasswordAtLogon $false -PasswordNeverExpires $True `
            -Company $company `
            -Enabled $True `
            -GivenName $Firstname `
            -HomeDirectory "\\NLHOUWFS\UsersShare$\$Username" `
            -Homedrive "H:" `
            -Path $OU `
            -PostalCode $zipcode `
            -SamAccountName $Username `
            -UserPrincipalName "$Username@anticimex.nl" `
            -Surname $Lastname `
            -DisplayName "$Lastname, $Firstname" `
            -City $city `
            -StreetAddress $streetaddress `
            -EmailAddress $email `
            -Title $jobtitle `
            -scriptPath $LogonScript
    }
}


Wat ik dan krijg als ik het script run is zoals in de afbeeldingen. De linker afbeelding is als ik de ` weghaal. De rechter is zoals in het voorbeeld hierboven met `.

Afbeeldingslocatie: https://tweakers.net/ext/f/w3UIyRqo5KyWwnEUMNqnPRUe/thumb.pngAfbeeldingslocatie: https://tweakers.net/ext/f/0BwuF87D9CdqLknLYrd81KkQ/thumb.png


Dan wat ik zelf al geprobeerd heb. Ik heb in powershel met de get-help functie al gezocht. De technet documentatie heb ik ook al opgezocht, daar kwam ik ook helaas niet mee verder en nog op google gezocht, maar daar kwam ik helaas de gouden tip ook niet tegen.

Beste antwoord (via Raverty op 13-08-2018 17:44)


  • Appel
  • Registratie: November 2007
  • Laatst online: 21-08 16:07
Regel 39 is raar. Je bent in een New-ADUser commando bezig en daarin ga je ineens een variabele maken. Verplaats wat op regel 39 staat eens naar regel 35, en zorg er daarna voor dat er geen lege ruimte bestaat tussen regel 37 en de closing bracket } van de statement.

Wat nu dit is:

PowerShell:
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
        #User does not exist then proceed to create the new user account
        
        #Account will be created in the OU provided by the $OU variable read from the CSV file
        New-ADUser `
            -Name "$Lastname, $Firstname" `
            $SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force `
            -AccountPassword $SecurePassword -ChangePasswordAtLogon $false -PasswordNeverExpires $True `
            -Company $company `
            -Enabled $True `
            -GivenName $Firstname `
            -HomeDirectory "\\NLHOUWFS\UsersShare$\$Username" `
            -Homedrive "H:" `
            -Path $OU `
            -PostalCode $zipcode `
            -SamAccountName $Username `
            -UserPrincipalName "$Username@anticimex.nl" `
            -Surname $Lastname `
            -DisplayName "$Lastname, $Firstname" `
            -City $city `
            -StreetAddress $streetaddress `
            -EmailAddress $email `
            -Title $jobtitle `
            -scriptPath $LogonScript
    }
}


Moet dit worden:
PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        #User does not exist then proceed to create the new user account
        $SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force
        #Account will be created in the OU provided by the $OU variable read from the CSV file
        New-ADUser `
            -Name "$Lastname, $Firstname" `
            -AccountPassword $SecurePassword -ChangePasswordAtLogon $false -PasswordNeverExpires $True `
            -Company $company `
            -Enabled $True `
            -GivenName $Firstname `
            -HomeDirectory "\\NLHOUWFS\UsersShare$\$Username" `
            -Homedrive "H:" `
            -Path $OU `
            -PostalCode $zipcode `
            -SamAccountName $Username `
            -UserPrincipalName "$Username@anticimex.nl" `
            -Surname $Lastname `
            -DisplayName "$Lastname, $Firstname" `
            -City $city `
            -StreetAddress $streetaddress `
            -EmailAddress $email `
            -Title $jobtitle `
            -scriptPath $LogonScript
    }
}

[ Voor 80% gewijzigd door Appel op 13-08-2018 17:38 ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • Axewi
  • Registratie: Maart 2009
  • Laatst online: 16:46
Eerste wat me opvalt is dat er geen komma in de naam mag.
PS C:\Windows\system32> new-ADUser -Name "hoi, hoi"
new-ADUser : The name provided is not a properly formed account name
At line:1 char:1
+ new-ADUser -Name "hoi, hoi"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=hoi\, hoi,CN=Users,DC=nedpack,DC=net:String) [New-ADUser], ADExce
+ FullyQualifiedErrorId : ActiveDirectoryServer:1315,Microsoft.ActiveDirectory.Management.Commands.NewADUser
maak van regel 38 eens:
code:
1
-Name "$Lastname $Firstname"


wat betreft het vragen om input, weet je zeker dat je " ` " het teken links van de 1 toets is (die bij het tilde teken opzit) en niet een enkele hoge komma is ( ' )

Als de lat te hoog ligt kun je er nog altijd onderdoor lopen.


Acties:
  • 0 Henk 'm!

  • Raverty
  • Registratie: Juni 2015
  • Niet online
Axewi schreef op maandag 13 augustus 2018 @ 16:41:
Eerste wat me opvalt is dat er geen komma in de naam mag.


[...]


maak van regel 38 eens:
code:
1
-Name "$Lastname $Firstname"


wat betreft het vragen om input, weet je zeker dat je " ` " het teken links van de 1 toets is (die bij het tilde teken opzit) en niet een enkele hoge komma is ( ' )
Ik heb regel 38 nu gemaakt zoals je voorstelde, helaas krijg ik nog dezelfde melding. Regel 38 heb ik ook op de volgende manier geprobeerd wat helaas dezelfde errors opleverde:
code:
1
-name $Lastname $Firstname


Wat betreft het " ` " teken ben ik daar zeker van aangezien ik dat met de hand nog ben nagelopen om dit te controleren.

[ Voor 9% gewijzigd door Raverty op 13-08-2018 17:25 ]


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Appel
  • Registratie: November 2007
  • Laatst online: 21-08 16:07
Regel 39 is raar. Je bent in een New-ADUser commando bezig en daarin ga je ineens een variabele maken. Verplaats wat op regel 39 staat eens naar regel 35, en zorg er daarna voor dat er geen lege ruimte bestaat tussen regel 37 en de closing bracket } van de statement.

Wat nu dit is:

PowerShell:
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
        #User does not exist then proceed to create the new user account
        
        #Account will be created in the OU provided by the $OU variable read from the CSV file
        New-ADUser `
            -Name "$Lastname, $Firstname" `
            $SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force `
            -AccountPassword $SecurePassword -ChangePasswordAtLogon $false -PasswordNeverExpires $True `
            -Company $company `
            -Enabled $True `
            -GivenName $Firstname `
            -HomeDirectory "\\NLHOUWFS\UsersShare$\$Username" `
            -Homedrive "H:" `
            -Path $OU `
            -PostalCode $zipcode `
            -SamAccountName $Username `
            -UserPrincipalName "$Username@anticimex.nl" `
            -Surname $Lastname `
            -DisplayName "$Lastname, $Firstname" `
            -City $city `
            -StreetAddress $streetaddress `
            -EmailAddress $email `
            -Title $jobtitle `
            -scriptPath $LogonScript
    }
}


Moet dit worden:
PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        #User does not exist then proceed to create the new user account
        $SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force
        #Account will be created in the OU provided by the $OU variable read from the CSV file
        New-ADUser `
            -Name "$Lastname, $Firstname" `
            -AccountPassword $SecurePassword -ChangePasswordAtLogon $false -PasswordNeverExpires $True `
            -Company $company `
            -Enabled $True `
            -GivenName $Firstname `
            -HomeDirectory "\\NLHOUWFS\UsersShare$\$Username" `
            -Homedrive "H:" `
            -Path $OU `
            -PostalCode $zipcode `
            -SamAccountName $Username `
            -UserPrincipalName "$Username@anticimex.nl" `
            -Surname $Lastname `
            -DisplayName "$Lastname, $Firstname" `
            -City $city `
            -StreetAddress $streetaddress `
            -EmailAddress $email `
            -Title $jobtitle `
            -scriptPath $LogonScript
    }
}

[ Voor 80% gewijzigd door Appel op 13-08-2018 17:38 ]


Acties:
  • 0 Henk 'm!

  • Raverty
  • Registratie: Juni 2015
  • Niet online
Ik krijg geen foutmelding en als ik nu kijk in het AD zie ik mijn gebruikers uit het CSV Bestand. Bedankt @Appel

Acties:
  • 0 Henk 'm!

  • Appel
  • Registratie: November 2007
  • Laatst online: 21-08 16:07
Raverty schreef op maandag 13 augustus 2018 @ 17:44:
Ik krijg geen foutmelding en als ik nu kijk in het AD zie ik mijn gebruikers uit het CSV Bestand. Bedankt @Appel
Het stond ook gewoon in de foutmeldingen waarvan je screenshots hebt gestuurd.

code:
1
A positional parameter cannot be found that accepts argument 'System.Security.SecureString'


Ik moet mezelf soms ook herinneren "Hij roept het niet voor niks". Verder is het om je script netter te maken misschien een optie om in plaats van je ingelezen variabelen in een nieuwe variabele te stoppen in je New-ADUser gewoon naar de $user.x variabelen de refereren.

Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 12:55

MAX3400

XBL: OctagonQontrol

@Raverty even ter info/controle; je leest nu de usernames ook in via de CSV. Mogelijk dat hier typfouten in kunnen zitten en dan wordt er wel een nieuwe user aangemaakt en krijg je achteraf de melding dat de inlognaam niet goed is. Of andersom; er wordt een duplicate username gedetecteerd terwijl dat niet zo is.

Op welke manier wordt de inhoud van de CSV geborgd en voorzien van "unieke" waarden?

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • +1 Henk 'm!

  • Raverty
  • Registratie: Juni 2015
  • Niet online
Appel schreef op maandag 13 augustus 2018 @ 17:47:
[...]

Ik moet mezelf soms ook herinneren "Hij roept het niet voor niks". Verder is het om je script netter te maken misschien een optie om in plaats van je ingelezen variabelen in een nieuwe variabele te stoppen in je New-ADUser gewoon naar de $user.x variabelen de refereren.
Ik script zelf maar zelden, dus ben zelf niet zo heel erg goed in. Ik ga het script nog wat finetunen, maar heb in ieder geval iets wat werkt. :)
MAX3400 schreef op maandag 13 augustus 2018 @ 17:53:
@Raverty even ter info/controle; je leest nu de usernames ook in via de CSV. Mogelijk dat hier typfouten in kunnen zitten en dan wordt er wel een nieuwe user aangemaakt en krijg je achteraf de melding dat de inlognaam niet goed is. Of andersom; er wordt een duplicate username gedetecteerd terwijl dat niet zo is.

Op welke manier wordt de inhoud van de CSV geborgd en voorzien van "unieke" waarden?
De namen worden aan mij aangeleverd in een excel bestand, dus ik hoef dit alleen nog in mijn template te plaatsen en dan is het bestand correct. De gebruikersnaam is altijd voor elke gebruiker voornaam.achternaam, dus een complete dubbele naam zal zeldzaam zijn. Op het moment dat er aan mij een bestand met typefouten wordt geleverd in de naam dan zal de inlognaam die ik aanmaak verkeerd zijn net zoals ik deze met de hand aangemaakt zou hebben.
Pagina: 1