Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > Posts > Jak v PowerShell vytvořit Credentials, aby se to neptalo
květen 25
Jak v PowerShell vytvořit Credentials, aby se to neptalo

Klasický problém skriptařů a automatizačníků. Množství PowerShell cmdletů potřebuje parametr Credentials, Credential apod. Obvykle se to vytváří pomocí cmdlet Get-Credential. Jenže ten parametr bere jenom login a potom to zobrazí okénko pro zadání hesla. To je samozřejmě pro automatizaci na nic. Nešlo by to zadat rovnou do toho skriptu? Jasně, stačí vytvořit objekt PSCredential ručně:

$installAccount = New-Object System.Management.Automation.PSCredential 'gps\sp-admin', (ConvertTo-SecureString 'Pa$$w0rd' -AsPlainText -Force)

... a je to :-)

Comments

Re: Jak v PowerShell vytvořit Credentials, aby se to neptalo

To mi připomíná jinou zajímavost. Máme skript třeba na vytváření AD uživatelů, kterej pouštíme pod doménovým adminem (přes RDP přihlášen čipovkou). A on se klidně dvakrát zeptá na PIN k čipovce. A zpravidla se to okno neukáže na popředí, ale otevře se někde v pozadí, kde si ho člověk musí sám najít odlovit, aby skript pokračoval :) Proč to?
Borek on 25.5.2015 19:37

Re: Jak v PowerShell vytvořit Credentials, aby se to neptalo

Jo a není to žádná specialita skriptu, stačí fakt jen obyčejný vytvoření uživatele.
Borek on 25.5.2015 19:47

Re: Jak v PowerShell vytvořit Credentials, aby se to neptalo

tak a) já nepoužívám ten podivnej AD modul, kterej není žádnej LDAP, ale nějakej podivnej web servis a jako takovej mu patří tak akorát veliké "fuj".

b) zřejmě to dělá nějakej remouting, takže to je infrastruktura jako prase - viz. například tady: https://www.sevecek.com/Lists/Posts/Post.aspx?ID=276. Takže bych očekával cokoliv.

c) pokud se to ptá na heslo, tak se to prostě ptá i na PIN. To že se to ptá dvakrát je zřejmě kombinace různejch procesů (winrm apod.) a izolace kryptografie do LSASSu apod.

d) zdá se tedy, že to prostě na to není nějak vyladěný.

e) doporučuju používat normální Kerberos ověření, tam se to ptát nebude.
ondass on 25.5.2015 19:56

Re: Jak v PowerShell vytvořit Credentials, aby se to neptalo

Zkusím to popsat přesnějc. Přihlásím se na vzdálenou plochu čipovkou. Tam pustim Powershell. A v něm něco jako:

$OU = [adsi]"LDAP://$targetOU"
$global:newuser = $OU.Create("User", "cn=$cn")
$newuser.Put("userPrincipalName", $UPN)
$newuser.Put("displayName", $DisplayName)
$newuser.Put("samAccountName", $Sam)
$newUser.put("pwdLastset",0)
$newUser.SetPassword("xxxxxxx")
$newuser.SetInfo()

Úplně stejně se ale chová i VBscript:

Set objRootLDAP = GetObject("LDAP://rootDSE")
Set objContainer = GetObject("LDAP://cn=Users," & _
objRootLDAP.Get("defaultNamingContext"))
Set objNewUser = objContainer.Create("User", "cn=" & strUser)
objNewUser.Put "sAMAccountName", strUser
objNewUser.SetInfo
ObjNewUser.SetPassword "MyPassword123"
objNewUser.Put "PasswordExpired", CLng(1)
objNewUser.AccountDisabled = FALSE

Vždy vyskočí hláška o zadání PINu. Tak se to chová od začátku, co máme čipovky a choval se tak každý skript na zakládání uživatelů, ať už byl napsaný kýmkoliv a v čemkoliv. Pokud se na RDP přihlásím heslem a ne čipovkou, tak se myslím na nic neptá (dlouho jsem to nezkoušel).

Teď jsem si ještě hrál s tím VBS a zjistil jsem, že dotaz na PIN vyvolá konkrétně řádek na nastavení hesla. Z toho už by se třeba dalo něco usoudit.
Borek on 26.5.2015 15:00

Re: Jak v PowerShell vytvořit Credentials, aby se to neptalo

testuju...

ano, dělá to tak. jednou to chce PIN. ale když to CANCEL, tak to stejně proběhne v pořádku, takže ten PIN není důležitý.

zajímavé.

poznámka - máš tam špatné pořadí. nemůžeš dělat SetPassword dříve, než ten nový účet SetInfo()
ondass on 26.5.2015 16:21

Re: Jak v PowerShell vytvořit Credentials, aby se to neptalo

Pořadí - ok, já to vykopíroval ze skriptu, kde je toho mnohem víc. Je to jeden ze skriptů, kterej jsem si nechal napsat od Maliny - má skoro 2000 řádků :) Ale má to všechno pěkně ošetřený, takže nám i po pár vlastních úpravách a změnách na doméně stále pěkně slouží.
Borek on 26.5.2015 18:42

Re: Jak v PowerShell vytvořit Credentials, aby se to neptalo

skript je včetně GUI se zadáváním všech potřebných údajů, pěkně nám to tehdy napsal...
Borek on 26.5.2015 18:44

Heslo

A jak tam pls dodat heslo nejak sikovne bezpecneji, aby to nebylo primo jako plain text v tom skriptu? :)
Honza on 10.6.2015 15:15

Re: Jak v PowerShell vytvořit Credentials, aby se to neptalo

ondass on 11.6.2015 17:27

Add Comment

Title


Pole Title nemusíte vyplňovat, doplní se to samo na stejnou hodnotu jako je nadpis článku.

Author *


Pole Author nesmí být stejné jako pole Title! Mám to tu jako ochranu proti spamu. Roboti to nevyplní dobře :-)

Body *


Type number two as digit *


Semhle vyplňte číslici dvě. Předchozí antispemové pole nefunguje úplně dokonale, zdá se, že jsou i spamery, které pochopily, že je občas potřeba vyplnit autora :-)

Email


Emailová adresa, pokud na ni chcete ode mě dostat odpověď. Nikdo jiný než já vaši emailovou adresu neuvidí.

Attachments