Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

powershell script bulk csv reset password

Pagina: 1
Acties:

  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Een goedenavond,

Ik heb een vraagje m.b.t.. een project voor een bedrijf (als jobstudent) waar ik mee bezig ben.
Ze gebruiken het platform Odoo (vroeger openERP) en zouden graag active directory management (BEHEREN :p) doen via de webinterface. (nieuwe user aanmaken, password resetten,...)
Om er nog even bij te zeggen Odoo draait op een Linux server.

Om dit te realiseren heb ik het volgende gedaan (in een testomgeving op de moment nog):
- powershell server geïnstalleerd op de DC (is een SSH server en een SCP server). Zo kan ik remote vanop een unix machine in powershell.
- vervolgens een python scriptje gemaakt dat de input captured (van bv. een nieuw active directory user zoals voornaam, naam, displaynaam, ...) en deze wegschrijft naar een .csv file. Na da dit gebeurd is zal het python script nog een ander script runnen.
- Het script zal eerst via SCP de .csv file verzenden richting de DC en vervolgens een ssh verbinding opzetten met verschillende parameters om dit .csv bestand in te lezen en hieruit een nieuwe user te maken. Wanneer dat gedaan is verwijderd het script zowel op de DC als op de Linux server de .csv file.
En klaar is kees.

Nu, na heel wat testen moet ik zeggen dat het over het algemeen vrij goed werkt, maar moet toegeven dat ik het zelf nog al een beetje omslachtig vindt. Vandaar mijn vraag of iemand hier misschien enige ervaring mee heeft om dit op een 'meer efficiëntere manier' te doen?

Dank bij voorbaat!

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • powerboat
  • Registratie: December 2003
  • Laatst online: 23:07
Volgens mij heeft Odoo ldap support ik denk dat je dit bedoelt, scripten is dan niet nodig

http://www.nevprobusiness...ryad-authentication-odoo/

  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Ik had verstaan dat dit enkel voor authenticatie is, kan me natuurlijk vergissen... Ga er even dieper op zoeken.

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • powerboat
  • Registratie: December 2003
  • Laatst online: 23:07
O wacht, volgens mij heb ik het verkeerd begrepen 8)7 . Je wilt AD beheren via odoo ?

  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Inderdaad. Even mijn beginpost aangepast dat het een beetje duidelijker is :P !

Edit: Ben juist nog op iets tegengelopen... Zal hier even 2 scriptjes neerzetten (niets van de 'ordelijkheid' aantrekken aub). Die ik gebruik op paswoorden te resetten...

Python script (voor csv file aan te maken):
import csv
import os

#----------------------------------------------------------------------
def csv_writer(data, path):
"""
Write data to a CSV file path
"""
with open(path, "wb") as csv_file:
writer = csv.writer(csv_file, delimiter=',')
for line in data:
writer.writerow(line)

#----------------------------------------------------------------------
if __name__ == "__main__":
data = ["SamAccountName".split(","),
"LMarien".split(",")
]
path = "/home/levi/Documenten/temp.csv"
csv_writer(data, path)
#----------------------------------------------------------------------
os.system("/home/levi/Documenten/resetPWScript")
Linux scriptje dat al de rest uitvoert:
sshpass -p 'Labo123' scp -oUser=WERK\\administrator /home/levi/Documenten/temp.csv 192.168.5.129:C:\\Users\\Administrator\\Documents\\;
sshpass -p 'Labo123' ssh administrator@192.168.5.129 'cd C:\Users\Administrator\Documents\; Import-Module ActiveDirectory $user = Get-Content -Path c:\Users\Administrator\Documents\temp.csv Get-ADUser $user Set-ADAccountPassword $user -reset -newpassword (ConvertTo-SecureString -AsPlainText "Labo1234" -Force); del temp.csv;'
rm -rf /home/levi/Documenten/temp.csv;
Nu, krijg steeds een error bij het runnen, misschien ergens verkeerd parameters doorgegeven?
Import-Module : A positional parameter cannot be found that accepts argument '$
null'.
At line:1 char:52
+ cd C:\Users\Administrator\Documents\; Import-Module <<<< ActiveDirectory $us
er = Get-Content -Path c:\Users\Administrator\Documents\temp.csv Get-ADUser $us
er Set-ADAccountPassword $user -reset -newpassword (ConvertTo-SecureString -AsP
lainText "Labo1234" -Force); del temp.csv;
+ CategoryInfo : InvalidArgument: (:) [Import-Module], ParameterB
indingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell
.Commands.ImportModuleCommand
Hij zit te klagen over een bepaalde parameter.. Heeft het te maken met dat ik de verkeerde username doorgeef (geef de SamAccountName door) dit zou toch correct moeten zijn?

[ Voor 184% gewijzigd door Tommienator op 06-07-2015 00:12 ]

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • Demo
  • Registratie: Juni 2000
  • Laatst online: 28-11 08:19

Demo

Probleemschietende Tovenaar

Na Import-Module PowerShell zou je een ; moeten opgeven, nu wordt de rest van je commando als parameters meegegeven aan IM. Verder zou je Get-ADUser -Identity $user kunnen gebruiken, ik geef het liefst alle parameters expliciet mee.
Ondanks dat je dit uitvoert op een Linux-systeem, is het duidelijk een Powershell-issue en had je dus in een Windows-forum sneller antwoord gehad :P

Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done


  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Bedankt, die error heb ik kunnen verhelpen.. Maar nu krijg ik er andere, maak wel even een topic aan in het windows forum :) !

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Dit is een voortzetting op dit topic gezien het enige probleem nu nog ligt bij een powershell script (kwam het hier wat beter tot zijn recht) vorig topic

Modbreakje: onderstaande replies zijn samengevoegd met bovenstaande.

Dus de bedoeling is om vanuit een python script een csv file in te lezen die via scp van een linux systeem doorgestuurd wordt naar een windows server (DC) waar powershell server opstaat (ssh server en scp server).
Zo kan men Active directory beheer doen in Linux vanuit de webinterface met het platform Odoo.
Gezien ik het minimaal wou houden wat betreft aantal scripts, heb ik geen apart powershell script gemaakt op de DC maar heb ik via de ssh verbinding het script als parameters meegegeven.

Dus dit is het perl scriptje:
import csv
import os

#----------------------------------------------------------------------
def csv_writer(data, path):
"""
Write data to a CSV file path
"""
with open(path, "wb") as csv_file:
writer = csv.writer(csv_file, delimiter=',')
for line in data:
writer.writerow(line)

#----------------------------------------------------------------------
if __name__ == "__main__":
data = ["samAccountName".split(","),
"LMarien".split(",")
]
path = "/home/levi/Documenten/temp.csv"
csv_writer(data, path)
#----------------------------------------------------------------------
os.system("/home/levi/Documenten/resetPWScript")
En dan hier het linux scriptje dat tevenens de powershell commando's voor een password reset zou moeten doen (sorry voor de wanorde, later wordt dit nog een beetje ordelijker gemaakt):
sshpass -p 'Labo123' scp -oUser=WERK\\administrator /home/levi/Documenten/temp.csv 192.168.5.129:C:\\Users\\Administrator\\Documents\\;
sshpass -p 'Labo123' ssh administrator@192.168.5.129 'cd C:\Users\Administrator\Documents\; Import-Module ActiveDirectory; Import-Csv .\temp.csv | $samAccountName = $_.samAccountName $newPassword = ConvertTo-SecureString -AsPlainText "Labo1234" -Force Set-ADAccountPassword -Identity $samAccountName -NewPassword $newPassword -Reset;';
rm -rf /home/levi/Documenten/temp.csv;
En dan krijg ik volgende errors:
System.Management.Automation.ParseException: Expressions are only allowed as the first element of a pipeline.
bij System.Management.Automation.Parser.ReportException(Object targetObject, Type exceptionType, Token errToken, String resourceIdAndErrorId, Object[] args)
bij System.Management.Automation.Parser.PipelineRule()
bij System.Management.Automation.Parser.StatementRule()
bij System.Management.Automation.Parser.StatementListRule(Token start)
bij System.Management.Automation.Parser.ScriptBlockRule(String name, Boolean requireBrace, Boolean isFilter, ParameterDeclarationNode parameterDeclaration, List`1 functionComments, List`1 parameterComments)
bij System.Management.Automation.Parser.ParseScriptBlock(String input, Boolean interactiveInput)
bij System.Management.Automation.AutomationEngine.ParseScriptBlock(String script, Boolean interactiveCommand)
bij System.Management.Automation.ScriptCommandProcessor..ctor(String script, ExecutionContext context, Boolean isFilter, Boolean useLocalScope, Boolean interactiveCommand, CommandOrigin origin)
bij System.Management.Automation.Runspaces.Command.CreateCommandProcessor(ExecutionContext executionContext, CommandFactory commandFactory, Boolean addToHistory)
bij System.Management.Automation.Runspaces.LocalPipeline.CreatePipelineProcessor()
bij System.Management.Automation.Runspaces.LocalPipeline.InvokeHelper()
bij System.Management.Automation.Runspaces.LocalPipeline.InvokeThreadProc()le
Kan iemand misschien er een foutje nog uitvissen? Want denk toch persoonlijk dat het qua syntacs juist is, misschien ergens weer een parameter die verkeerd is (denk dan persoonlijk bij het inlezen van het csv file).

Alvast bedankt,.

[ Voor 1% gewijzigd door F_J_K op 07-07-2015 08:48 ]

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 28-11 16:59

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Als ik het goed intepreteer is dit het script wat je wilt draaien op de DC:

code:
1
2
3
cd C:\Users\Administrator\Documents\
Import-Module ActiveDirectory
Import-Csv .\temp.csv | $samAccountName = $_.samAccountName $newPassword = ConvertTo-SecureString -AsPlainText "Labo1234" -Force Set-ADAccountPassword -Identity $samAccountName -NewPassword $newPassword -Reset

Wat gebeurd er als je dit lokaal draait op de DC? Ik gok dat je nl dezelfde fout krijgt, maar sluit eerst even uit waar het probleem ligt.

Even ongetest, maar zou onderstaande code niet beter werken:

code:
1
2
3
4
5
6
7
8
9
$users=Import-Csv .\temp.csv 

ForEach ($user in $users) {

$samAccountName = $_.samAccountName 
$newPassword = ConvertTo-SecureString -AsPlainText "Labo1234" -Force 

Set-ADAccountPassword -Identity $samAccountName -NewPassword $newPassword -Reset
}


Waarom gebruik je overigens een CSV-file en geeft je de waardes niet gewoon op als parameters? Aangezien je nu geen ForEach lus gebruikt ga ik even vanuit dat je één user per keer wilt resetten, en niet een bulkaanpassing.

[ Voor 18% gewijzigd door Question Mark op 06-07-2015 11:25 ]

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • Meekoh
  • Registratie: April 2005
  • Laatst online: 17-11 22:19
Question Mark schreef op maandag 06 juli 2015 @ 11:16:
Als ik het goed intepreteer is dit het script wat je wilt draaien op de DC:

code:
1
2
3
cd C:\Users\Administrator\Documents\
Import-Module ActiveDirectory
Import-Csv .\temp.csv | $samAccountName = $_.samAccountName $newPassword = ConvertTo-SecureString -AsPlainText "Labo1234" -Force Set-ADAccountPassword -Identity $samAccountName -NewPassword $newPassword -Reset

Waarom gebruik je overigens een CSV-file en geeft je de waardies niet gewoon op als parameters? Aangezien je geen For-Each lus gebruikt ga ik even vanuit dat je één user per keer wilt resetten, en niet een bulkaanpassing.
Inderdaad, wat TS nu probeert te doen mag niet van Powershell.
Je kunt niet (meerder) waardes uit een csv file pipen naar een set meerdere commands zonder een loop. Daarom zat in het originele script, dat je waarschijnlijk op een bepaalde internetsite hebt gevonden, een foreach loop eromheen.

Computer says no


  • SirDarkAngel
  • Registratie: April 2005
  • Laatst online: 27-11 12:13
code:
1
2
3
4
5
Import-Module ActiveDirectory
Import-Csv .\temp.csv | foreach { 
    $newPassword = ConvertTo-SecureString -AsPlainText "Labo1234" -Force 
    Set-ADAccountPassword -Identity $_.samAccountName -NewPassword $newPassword -Reset
}


Je zat in de buurt, maar probeer dit eens te verwerken in je script. In plaats van:

code:
1
Module ActiveDirectory; Import-Csv .\temp.csv | $samAccountName = $_.samAccountName $newPassword = ConvertTo-SecureString -AsPlainText "Labo1234" -Force Set-ADAccountPassword -Identity $samAccountName -NewPassword $newPassword -Reset


@Mark, jouw script gaat niet werken. ($samAccountName = $_.samAccountName moet in jouw variant $samAccountName = $user.samAccountName zijn..

[ Voor 11% gewijzigd door SirDarkAngel op 06-07-2015 11:26 ]

Wilde altijd al iets over computers weten


  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Bedankt voor de response!

Het is de bedoeling om meerdere users tegelijk te kunnen doen, maar even goed ook 1 user indien nodig.. Hangt allemaal van de parameters die het python script binnenkrijgt (is op de moment nog niet zo geschreven, enkel voor testdoeleinde nu 1 user aan toegevoegd).

Zal eens even proberen wat jullie suggereren.. Bedankt :) !

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Oké, even getest.. En zelfs met het lokaal te runnen wilt het niet werken...
Dus even met SirDarkAngel zijn scriptje voort gegaan en dat deed het hem helaas ook niet.. Moet ik als ik samAccountName gebruik toch geen FQDN doorgeven? Letterlijk hetgeen wat het script genereert moet toch voldoende zijn 'LMarien' om de juiste user te kunnen selecteren?

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • SirDarkAngel
  • Registratie: April 2005
  • Laatst online: 27-11 12:13
Tommienator schreef op maandag 06 juli 2015 @ 11:41:
Oké, even getest.. En zelfs met het lokaal te runnen wilt het niet werken...
Dus even met SirDarkAngel zijn scriptje voort gegaan en dat deed het hem helaas ook niet.. Moet ik als ik samAccountName gebruik toch geen FQDN doorgeven? Letterlijk hetgeen wat het script genereert moet toch voldoende zijn 'LMarien' om de juiste user te kunnen selecteren?
Klopt het CSV bestand wel? Voer eens "Import-Csv .\temp.csv" in en zie je dan het csv bestand in nette rijen? (Dus leest die a: het goede CSV bestand in en b: heb je de juiste delimiter)

Wilde altijd al iets over computers weten


  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Sorry, had me iets beter moeten verwoorden.. Het scriptje zelf geeft geen errors en heb juist even de test gedaan met het csv bestand te lezen.. Dit zag er allemaal goed uit. Maar het wachtwoord wordt niet gereset, hij selecteerd de user precies niet (en hij zit wel in mijn active directory).

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • SirDarkAngel
  • Registratie: April 2005
  • Laatst online: 27-11 12:13
Als je geen foutmeldingen krijgt gaat die de foreach loop niet in, of werkt het script wel. Wanneer je namelijk een gebruiker opgeeft die hij niet kan vinden krijg je:

Set-ADAccountPassword : Cannot find an object with identity: 'sdfgsdfjglsdkjg' under: 'DC=***,DC=***.

code:
1
2
3
Import-Csv .\temp.csv | foreach { 
    write-output "Gebruiker om te resetten is: $($_.samAccountName)"
}


Daarom zou ik graag willen weten of bovenstaande werkt. Krijg je per gebruiker de zin: ""Gebruiker om te resetten is: %samaccountnaam%" te zien? Ik heb nog steeds het vermoeden dat je niet zover komt namelijk. (Of ik begrijp je verkeerd, kan natuurlijk ook)

[ Voor 3% gewijzigd door SirDarkAngel op 06-07-2015 12:09 ]

Wilde altijd al iets over computers weten


  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Oké even getest, en ik krijg "Gebruiker om te resetten is: LMarien" te zien..

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • SirDarkAngel
  • Registratie: April 2005
  • Laatst online: 27-11 12:13
Dan kan ik mij niet voorstellen dat het wachtwoord niet gereset wordt je mijn eerste stuk zou pakken. Anders zou je een foutmelding verwachten (Of ik zie hier echt wat over het hoofd). Toch nog een test dan:

code:
1
2
3
4
5
6
7
Import-Module ActiveDirectory
Import-Csv .\temp.csv | foreach { 
    (Get-ADUser $_.samAccountName -properties PasswordLastSet).PasswordLastSet
    $newPassword = ConvertTo-SecureString -AsPlainText "Labo1234" -Force 
    Set-ADAccountPassword -Identity $_.samAccountName -NewPassword $newPassword -Reset
    (Get-ADUser $_.samAccountName -properties PasswordLastSet).PasswordLastSet
}


Je krijgt nu 2 data te zien als het goed is. Klopt het dat je deze 2 data te zien krijgt en zijn deze exact gelijk?

[ Voor 6% gewijzigd door SirDarkAngel op 06-07-2015 12:22 ]

Wilde altijd al iets over computers weten


  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Bedankt voor al de hulp..
Het zal iets met AD geweest zijn want probeerde een andere user (testuser) aan te maken en vervolgens de csv file aangepast en het scriptje laten lopen... En daar werkte het wel bij.
Dus geen idee wat hier even mis ging!

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 28-11 13:26
Even om het over een totaal andere boeg te gooien : waarom bouw je niet een web API om dit soort zaken af te handelen?
Ik heb laatst in minder dan 30 minuten een web API gebouwd om bepaalde AD info uit te kunnen lezen / te kunnen updaten, dan zou je vanuit je Linux beheer tool maar 1x een API call hoeven doen naar je webservice.

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 28-11 16:59

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

SirDarkAngel schreef op maandag 06 juli 2015 @ 11:24:

@Mark, jouw script gaat niet werken. ($samAccountName = $_.samAccountName moet in jouw variant $samAccountName = $user.samAccountName zijn..
True, net ff teveel gekopieerd van de TS... ;)

Ik heb overigens een persoonlijke voorkeur om niet teveel in 1x door te pipen. Vandaar mijn keuze om eerst alles in een variable/object te stoppen, en vervolgens dit variable/object door een loop heenhalen. Liever een iets groter script, maar wat wel iets makkelijker leest. Maar het blijft een persoonlijke voorkeur. :)

[ Voor 34% gewijzigd door Question Mark op 06-07-2015 19:47 ]

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 28-11 13:26
Question Mark schreef op maandag 06 juli 2015 @ 14:50:
[...]

True, net ff teveel gekopieerd van de TS... ;)

Ik heb overigens een persoonlijke voorkeur om niet teveel in 1x door te pipen. Vandaar mijn keuze om eerst alles in een variable/object te stoppen, en die variable/object door een loop heenhalen. Liever een groot groter script, maar wat wel iets makkelijker leest. Maar het blijft een persoonlijke voorkeur. :)
Ik doe dat ook, teveel pipen maakt je script erg onleesbaar. Zelfde met aliassen in scripts gebruiken (bv % ipv Foreach-Object), hoeveel moeite is het om de volledige cmdlet in een script neer te zetten (paar karakters meer en TAB).
Ook gebruik ik meestal "foreach (var in collection)" ipv Foreach-Object, vaak ook iets flexibeler en ook een stuk sneller qua performance, vooral bij grote collections.

Als ik bv in een interactieve shell zit dan doe ik dat soort dingen als aliassen en veel pipen uiteraard wel, maar in een script is het bij ons ook een nogo (collega's moeten immers ook nog eventueel een script aan kunnen passen in de toekomst)

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Ik voeg toch https://gathering.tweakers.net/forum/list_messages/1641589/ (NOS) en powershell script bulk csv reset password (SWS) even samen: het een is heel erg het vervolg op het ander.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Killah_Priest schreef op maandag 06 juli 2015 @ 13:59:
Even om het over een totaal andere boeg te gooien : waarom bouw je niet een web API om dit soort zaken af te handelen?
Ik heb laatst in minder dan 30 minuten een web API gebouwd om bepaalde AD info uit te kunnen lezen / te kunnen updaten, dan zou je vanuit je Linux beheer tool maar 1x een API call hoeven doen naar je webservice.
Omdat dit echt de vereiste van het bedrijf was waar ik projectjes doe.. Zou wouden het via Python hebben.

@F_J_K bedankt ;).

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • powerboat
  • Registratie: December 2003
  • Laatst online: 23:07
Had je op die Odol :D bak niet beter samba4 kunnen installeren en er een member server van kunnen maken en dan de samba4-tools kunnen gebruiken om de accounts te kunnen maken en resetten/unlocken etc.. ?? (weet overigens niet zeker of dat zo werkt).

  • Sniffels
  • Registratie: Augustus 2015
  • Laatst online: 28-11 13:49
Hallo, loop nu al 2 dagen te googelen naar bovenstaande, maar kom geen steek verder, en het samenvoegen van de 2 topics heeft het ook niet allemaal duidelijker gemaakt.

Wil wel een nieuw draadje openen, maar wellicht kan het ook zo.

Wil dus ook een .csv met SamAccountname en Password gebruiken voor bestaande gebruikers om een bulk aantepassen, maar krijg letterlijk overal rode error text.

Import-Module ActiveDirectory

Import-Csv .\ADUsers1.csv | foreach {
(Get-ADUser $_.samAccountName -properties PasswordLastSet).PasswordLastSet
$newPassword = ConvertTo-SecureString -AsPlainText "Test1234" -Force
Set-ADAccountPassword -Identity $_.samAccountName -NewPassword $newPassword -Reset
(Get-ADUser $_.samAccountName -properties PasswordLastSet).PasswordLastSet
}

Was het laatste antwoord van het topic, maar :
The term 'Get-ADUser' is not recognized as the name of a cmdlet
The term 'Set-ADAccountPassword' is not recognized as the name of a cmdlet

Ik weet het, ik ben een (powershell) noob, maar mn haren beginnen uit te vallen :/

  • Demo
  • Registratie: Juni 2000
  • Laatst online: 28-11 08:19

Demo

Probleemschietende Tovenaar

Heb je RSAT geïnstalleerd? Werkt het wel als je handmatig vanaf de CLI de module importeert en een Get-ADUser doet?

Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done


  • Sniffels
  • Registratie: Augustus 2015
  • Laatst online: 28-11 13:49
Nee geen RSAT, is dat noodzakelijk?

Want inderdaad als ik de AD module handmatig laad, dan kan ik wel tabben naar het Get-ADUser command.

Maar sowieso dat hele "" PasswordLastSet" en "Test1234" -Force kan er volgens mij uit aangezien dat allemaal in de .csv staat?

Dus ik zoek hulp voor het meest simpele powershell script om die .csv te gebruiken als template om de accounts aan te passen.

[ Voor 48% gewijzigd door Sniffels op 17-08-2015 11:16 ]


  • Demo
  • Registratie: Juni 2000
  • Laatst online: 28-11 08:19

Demo

Probleemschietende Tovenaar

Dan heb je wel iets van RSAT geïnstalleerd vermoed ik, want daar zitten die Cmdlets in (Role Administration Tools > AD DS and AD LDS Tools > Active Directory Module for Windows PowerShell)

Wat gebeurt er als je het script vanuit ISE start?

Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done


  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 28-11 13:26
Sniffels schreef op maandag 17 augustus 2015 @ 11:08:
Nee geen RSAT, is dat noodzakelijk?

Want inderdaad als ik de AD module handmatig laad, dan kan ik wel tabben naar het Get-ADUser command.

Maar sowieso dat hele "" PasswordLastSet" en "Test1234" -Force kan er volgens mij uit aangezien dat allemaal in de .csv staat?

Dus ik zoek hulp voor het meest simpele powershell script om die .csv te gebruiken als template om de accounts aan te passen.
Kun je eventueel aangeven wat je precies wilt bereiken met je script? Dan kan ik (of iemand anders) eventueel wel snel iets voor je in elkaar zetten.

Over de AD module : als je je script start met Import-Module ActiveDirectory, werken de CMDlets dan wel in je script? Mocht je PS versie 2 gebruiken : versie 2 doet geen auto-import van modules, dit werkt pas vanaf V3.

  • Sniffels
  • Registratie: Augustus 2015
  • Laatst online: 28-11 13:49
Killah_Priest schreef op maandag 17 augustus 2015 @ 12:59:
[...]


Kun je eventueel aangeven wat je precies wilt bereiken met je script? Dan kan ik (of iemand anders) eventueel wel snel iets voor je in elkaar zetten.

Over de AD module : als je je script start met Import-Module ActiveDirectory, werken de CMDlets dan wel in je script? Mocht je PS versie 2 gebruiken : versie 2 doet geen auto-import van modules, dit werkt pas vanaf V3.
Nou dat zijn helemaal top zijn natuurlijk! (uitleg zou natuurlijk ook al super zijn)

Ik heb een lijst van users die moeten allemaal een nieuw wachtwoord krijgen.

Dus heb een .csv gemaakt met op A1 "SamAccountname" en B1 het nieuwe "Password", dat wil ik door een script krijgen om dus alle wachtwoorden aan te passen die op dat lijstje staan.

Draai het op de DC met 2008R2, en de AD module ziet inderdaad het "Set-ADAccountPassword" command.

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 28-11 13:26
Sniffels schreef op maandag 17 augustus 2015 @ 13:36:
[...]


Nou dat zijn helemaal top zijn natuurlijk! (uitleg zou natuurlijk ook al super zijn)

Ik heb een lijst van users die moeten allemaal een nieuw wachtwoord krijgen.

Dus heb een .csv gemaakt met op A1 "SamAccountname" en B1 het nieuwe "Password", dat wil ik door een script krijgen om dus alle wachtwoorden aan te passen die op dat lijstje staan.

Draai het op de DC met 2008R2, en de AD module ziet inderdaad het "Set-ADAccountPassword" command.
Meest simpele versie die ik zo kan bedenken :
code:
1
2
3
4
5
6
Import-Module ActiveDirectory
$CSVFile = Import-csv 'c:\imports\CSV\importbestand.csv'
Foreach ($User in $CSVFile)
    {
    Set-ADAccountPassword -Identity $($User.sAMAccountName) -Reset -NewPassword (ConvertTo-SecureString -AsPlainText -Force -String $($User.Password))
    }


Ik heb wel gemerkt dat Set-ADAccountPassword soms onverwachte errors geeft (zo kreeg ik ineens een access denied hierop bij mijn eerste poging omdat ik de string met het wachtwoord eerst gepiped had naar Convertto-SecureString wat normaal gesproken op hetzelfde neer zou komen als hoe ik het nu heb staan - voorzover ik het kon zien bevatte de securestring ook dezelfde waarde).

Even een uitleg :
Regel 1 importeert de AD module (nodig als het PS versie 2 is)
Regel 2 importeert het CSV bestand
Regel 3 start de "ForEach" loop
Regel 5 zegt dan : Set-ADAccountPassword -Identity (SamAccountname kolom van CSV bestand) -reset -newPassword (Converteer de plain-text password uit het CSV bestand naar een securestring)

Je kunt namelijk alleen een securestring doorvoeren als password met de "standaard" cmdlets.

[ Voor 14% gewijzigd door Killah_Priest op 17-08-2015 15:05 ]


  • Sniffels
  • Registratie: Augustus 2015
  • Laatst online: 28-11 13:49
Super zeer bedankt voor de moeite!

Alleen:

Import module = werkt
Import-csv = werkt (zie netjes de account-namen met ; het nieuwe wachtwoord)
Daarna: niets: simpelweg alleen de >> onder het gecopy paste scipt zonder resultaat qua foutmelding of afhandeling.

Ik copy-paste letterlijk je regel5 script, of ben ik nou heel stom }:O

Of is het in de zin van: Set-ADAccountPassword -Identity "SamAccountName" -Reset -NewPassword (ConvertTo-SecureString-AsPlainText -Force -String "Password"

Kan tabben naar Foreach en Set-ADAccountPassword dus zou de de cmdlets moeten hebben.

help?

[ Voor 24% gewijzigd door Sniffels op 17-08-2015 16:23 ]


  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 28-11 13:26
Sniffels schreef op maandag 17 augustus 2015 @ 15:34:
Super zeer bedankt voor de moeite!

Alleen:

Import module = werkt
Import-csv = werkt (zie netjes de account-namen met ; het nieuwe wachtwoord)
Daarna: niets: simpelweg alleen de >> onder het gecopy paste scipt zonder resultaat qua foutmelding of afhandeling.

Ik copy-paste letterlijk je regel5 script, of ben ik nou heel stom }:O

Kan tabben naar Foreach en Set-ADAccountPassword dus zou de de cmdlets moeten hebben.

help?
Wat je het beste kunt doen is de code in Powershell ISE plakken (deze staat standaard uit in 2008r2 dus je zult mogelijk nog wel de feature aan moeten zetten) en dan het pad naar het csv aanpassen (ik zou eerst een csv met testaccounts gebruiken), daarna zou die met F5 kunnen runnen.

Set-ADAccountPassword geeft btw geen output : dmv de -passthru switch kun je eventueel output toevoegen.

  • Meekoh
  • Registratie: April 2005
  • Laatst online: 17-11 22:19
Dan heb jij echt iets verkeerd gecopy paste. Je bent al dan niet een } of ) vergeten ergens.
edit: Oh je doet het in een gewoon PS venster? Dan werkt dat niet nee. Graag in Powershell ISE openen of het opslaan in een .ps1 bestand en vanuit je PS venster dat script starten.

[ Voor 49% gewijzigd door Meekoh op 17-08-2015 16:31 ]

Computer says no


  • Sniffels
  • Registratie: Augustus 2015
  • Laatst online: 28-11 13:49
Ik ben nu ISE aan het installeren/Activeren, en daarna direct het letterlijke met alle { 's copy pasten van regel5

  • Sniffels
  • Registratie: Augustus 2015
  • Laatst online: 28-11 13:49
Sorry's, maar in ISE krijg ik:

SamAccountName;Password
---------------------------------
TestAccount;Test1234

en dan in het rood:

ConvertTo-SecureString : Cannot bind argument to parameter 'String' because it is null.
At line:5 char:132
+ Set-ADAccountPassword -Identity $($User.sAMAccountName) -Reset -NewPassword (ConvertTo-SecureString -AsPlainText
-Force -String <<<< $($User.Password))

[ Voor 12% gewijzigd door Sniffels op 17-08-2015 16:59 ]


  • Meekoh
  • Registratie: April 2005
  • Laatst online: 17-11 22:19
Zit die --------------------------------- ook in je csv file?
Zo ja haal het eruit.

Computer says no


  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 28-11 13:26
Ik zie dat je csv dmv een ; delimited is ipv met een comma : import-csv met de -delimiter switch zou ervoor moeten zorgen dat je het csv bestand wel delimited ziet.

Een goede manier om te kijken of je csv goed importeert is door deze in een variable te gooien (zoals in de eerste regel van mijn scriptje). Daarna roep je alleen deze variable op en kijk je wat erin staat.

  • Sniffels
  • Registratie: Augustus 2015
  • Laatst online: 28-11 13:49
@Meekoh: nee die ------------ staat niet in het bestand

@Killah_Priest, ik heb de regiosettings aangepast zodat hij de .csv met een , ipv ; wegschrijft, maar nogsteeds:

SamAccountName;Password
---------------------------------
TestAccount;Test1234

Maar nu ook in het rood (in ISE):

The term 'ConvertTo-SecureString-AsPlainText' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or
if a path was included, verify that the path is correct and try again.
At line:6 char:116
+ Set-ADAccountPassword -Identity $($User.sAMAccountName) -Reset -NewPassword (ConvertTo-SecureString-AsPlainText <<<< -Force -String $($User.Password))

  • Razwer
  • Registratie: December 2000
  • Laatst online: 14-11 20:46
je mist een spatie
ConvertTo-SecureString-AsPlainText = ConvertTo-SecureString -AsPlainText
-AsPlainText is een parameter, niet onderdeel van je cmdlet :)

Dat zou ISE je trouwens al moeten vertellen in je code met een rood lijntje er onder, just so you know :)

[ Voor 25% gewijzigd door Razwer op 18-08-2015 13:38 ]

Newton's 3rd law of motion. Amateur moraalridder.


  • Sniffels
  • Registratie: Augustus 2015
  • Laatst online: 28-11 13:49
Razwer schreef op dinsdag 18 augustus 2015 @ 13:35:
je mist een spatie
ConvertTo-SecureString-AsPlainText = ConvertTo-SecureString -AsPlainText
-AsPlainText is een parameter, niet onderdeel van je cmdlet :)
Ahja, daar is mijn fout.. (Do'h), maar nu zitten we weer bij vierkantje1 (wat waarschijnlijk door de " ; " komt en ik er niet uitkrijg, want ook lokaal op mn Win8.1 ISE krijg ik de ";" :

ConvertTo-SecureString : Cannot bind argument to parameter 'String' because it is null.
At line:6 char:132
+ Set-ADAccountPassword -Identity $($User.sAMAccountName) -Reset -NewPassword (ConvertTo-SecureString -AsPlainText -Force -String <<<< $($User.Password))
+ CategoryInfo : InvalidData: (:) [ConvertTo-SecureString], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand

[ Voor 3% gewijzigd door Sniffels op 18-08-2015 14:16 ]


  • LostinFFM
  • Registratie: Juli 2010
  • Laatst online: 11-09 08:56
Naar mijn inziens ligt je problem al bij het importeren.
Neem is enkel en alleen het eerste stukje import-csv en laat de output eens zien die je door de pipe heen wil drukken. Als je alles met ; of , ziet voer je het verkeerde door.

FOUT:
PS H:\> Import-Csv -LiteralPath .\Book1.csv

rofl;lol
--------
no1;hihi
no2;hihi
no3;hihi

JUIST:
PS H:\> Import-Csv -LiteralPath .\Book1.csv -Delimiter ";"

rofl lol
---- ---
no1 hihi
no2 hihi
no3 hihi

De ---- ---- onderscheiden enkel de headers van je column

na 2x alles doorlezen wel ergens de draad verloren wat je script nu precies bevat. Kun je hier nog een uittreksel van weergeven?

[ Voor 6% gewijzigd door LostinFFM op 18-08-2015 14:28 . Reden: request script details ]


  • Sniffels
  • Registratie: Augustus 2015
  • Laatst online: 28-11 13:49
LostinFFM schreef op dinsdag 18 augustus 2015 @ 14:19:
Naar mijn inziens ligt je problem al bij het importeren.
Neem is enkel en alleen het eerste stukje import-csv en laat de output eens zien die je door de pipe heen wil drukken. Als je alles met ; of , ziet voer je het verkeerde door.

FOUT:
PS H:\> Import-Csv -LiteralPath .\Book1.csv

rofl;lol
--------
no1;hihi
no2;hihi
no3;hihi

JUIST:
PS H:\> Import-Csv -LiteralPath .\Book1.csv -Delimiter ";"

rofl lol
---- ---
no1 hihi
no2 hihi
no3 hihi

De ---- ---- onderscheiden enkel de headers van je column

na 2x alles doorlezen wel ergens de draad verloren wat je script nu precies bevat. Kun je hier nog een uittreksel van weergeven?
Wat ik nu run:

Import-Module ActiveDirectory
Import-csv 'c:\scripts\test\Test.csv'
Foreach ($User in $CSVFile)

{
Set-ADAccountPassword -Identity $($User.sAMAccountName) -Reset -NewPassword (ConvertTo-SecureString -AsPlainText -Force -String $($User.Password))
}

Resultaat (ingeladen .csv is nu gefixed zonder ; of , door lokale regiosettings te misbruiken en zo de file te exporteren naar de dc):

SamAccountname Password
---- ---
TestAccount Test1234
ConvertTo-SecureString : Cannot bind argument to parameter 'String' because it is null.
At line:6 char:132
+ Set-ADAccountPassword -Identity $($User.sAMAccountName) -Reset -NewPassword (ConvertTo-SecureString -AsPlainText -Force -String <<<< $($User.Password))
+ CategoryInfo : InvalidData: (:) [ConvertTo-SecureString], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand

  • Meekoh
  • Registratie: April 2005
  • Laatst online: 17-11 22:19
Tip gebruik de [ code ] en [/ code ] (zonder spaties in je forum posts. Dan is je powershell code wat leesbaarder.

On topic: Vergeet even Set-ADAccountpassword. Comment die even uit door ene # voor die regel te zetten.
en zet dan tussen de { } dit
code:
1
2
$User.sAMAccountName
$User.Password


Dan ben ik benieuwd of je bij Password iets normaals ziet en haal ook die rare "enter" na je foreach weg.
En Ik zie dat je dit $CSVFile = niet voor je import-csv hebt staan. Je $CSVFile wordt zo natuurlijk nooit gevuld.

Computer says no


  • mhoogendam
  • Registratie: Oktober 2002
  • Laatst online: 23:46
PowerShell:
1
2
Import-csv 'c:\scripts\test\Test.csv'
Foreach ($User in $CSVFile)


Je importeert een CSV maar schrijft deze niet weg naar een variable welke je later wel probeert aan te roepen, $CSVFile.
Probeer dit eens:
PowerShell:
1
2
3
4
5
6
7
Import-Module ActiveDirectory
$CSVFile = Import-csv 'c:\scripts\test\Test.csv'
Foreach ($User in $CSVFile)

{
Set-ADAccountPassword -Identity $User.sAMAccountName -Reset -NewPassword (ConvertTo-SecureString -AsPlainText -Force -String $User.Password)
}


ps. [code=powershell] - [/code] tags zorgen voor een beter te lezen codeblock.

  • Sniffels
  • Registratie: Augustus 2015
  • Laatst online: 28-11 13:49
Jeeeeey! :D (Y)

Geen foutmeldingen, en alles gelukt! Whoehoe!

Dank voor het maken van het Script: Killah_Priest
Dank voor het .CVS issue: LostinFFM
Dank voor de ISE shell: Demoniac
Dank voor mijn fuckup in het copy-pasten: Razwer
Dank voor de laatste "push' in de goede richting; mhoogendam & Meekoh

Haha kortom: happy camper en dank iedereen!

  • ajhaverkamp
  • Registratie: November 2001
  • Laatst online: 27-11 17:37

ajhaverkamp

gewoon Arjan

Kun je misschien het uiteindelijke script hier plaatsen?

This footer is intentionally left blank


  • Sniffels
  • Registratie: Augustus 2015
  • Laatst online: 28-11 13:49
ajhaverkamp schreef op dinsdag 18 augustus 2015 @ 15:24:
Kun je misschien het uiteindelijke script hier plaatsen?
In PowerShell ISE op het DC:

Met in de .csv A1: SamAccountname B1: Password

Opgeslagen als .CSV in RegioSettings (English (United States) met -List Seperator: ,


PowerShell:
1
2
3
4
5
6
7
Import-Module ActiveDirectory
$CSVFile = Import-csv 'c:\scripts\test\Test.csv'
Foreach ($User in $CSVFile)

{
Set-ADAccountPassword -Identity $User.sAMAccountName -Reset -NewPassword (ConvertTo-SecureString -AsPlainText -Force -String $User.Password)
}


_/-\o_

[ Voor 3% gewijzigd door Sniffels op 18-08-2015 15:37 ]

Pagina: 1