Check if a specific Hotfix is installed via Powershell

By Andrei Ungureanu - Last updated: Thursday, February 15, 2018

Sa verifici daca un sistem are un anumit hotfix instalat este super simplu in Powershell. Comanda ce ne ajuta este Get-Hotfix:

image

Iar daca folosim Sort putem vedea si ordinea in care au fost instalate update-urile:

image

Si este destul de flexibila sa ne ajute sa cautam un anumit update. De exemplu ca sa verificam daca update-ul KB4074588 a fost instalat, rulam Get-Hotfix KB4074588:

image

Cu parametrul –Computername putem interoga si sisteme remote:

image

Personal mi se pare cel mai rapid si simplu mod de a verifica daca un sistem are un anumit hotfix instalat.

Filed in Windows Client, Windows Server • Tags: ,

Speculation Control Powershell Module – Meltdown and Spectre

By Andrei Ungureanu - Last updated: Saturday, February 10, 2018

O metoda simpla de a detecta daca un sistem este vulnerabil la Meltdown si Spectre, este via Powershell. Exista un modul numit SpeculationControl ce poate fi gasit si pe script center si in powershell gallery.

Pentru a-l instala din Powershell Gallery folositi comanda Install-Module SpeculationControl:

image

Iar apoi Get-SpeculationControlSettings.

Dupa cum se vede si in screenshot-ul de mai sus, pentru Spectre e nevoie si de firmware update.

Filed in Security, Windows Client, Windows Server • Tags: ,

NSLOOKUP–Advanced Tips & Tricks

By Andrei Ungureanu - Last updated: Saturday, January 27, 2018

Am fost rugat de un prieten sa dezvolt subiectul din titlu, pentru ca se pare ca NSLOOKUP inca nu este atat de cunoscut pe cum credeam.

Orice sysadmin trebuie sa stie sa foloseasca NSLOOKUP si este unul din primele optiuni atunci cand investighezi o problema de DNS. Dupa cum spune si numele (Name Server LOOKUP) cu NSLOOKUP puteti adresa interogari DNS direct catre name server facand bypass la cache-ul local.

Tool-ul inca pastreaza multe ciudatenii legacy dar e foarte usor sa treci de ele. Am vazut persoane care credeau ca au o problema cand vedeau Default Server: Unknown (sau UnKnown can’t find : Non-existent domain):

image

Tool-ul are o problema cu zonele reverse. Adica in sensul ca raporteaza erori atunci cand name serverul folosit nu are o adresa de tip PTR (reverse lookup). Deci daca aveti control asupra serverului DNS folosit (corp network, etc) puteti adauga zona reverse si inregistrarile PTR necesare pentru a face lucrul cu NSLOOKUP mai fluent.

Deci “Default Server: Unknown” nu reprezinta o problema. Serverul folosit este cel implicit de pe sistemul utilizat. Cererile sunt trimise direct catre server si se face bypass la cache-ul local.

Pentru a folosi alt server se foloseste sintaxa SERVER IP ca in exemplul de mai jos:

image

Sau daca vreti sa interogati direct un ROOT server, folositi comanda ROOT:

image

Iar cu SET ALL puteti vedea setarile din sesiunea existenta si serverul root folosit:

image

Puteti schimba si serverul root folosind SET ROOT.

Dar cea mai importanta setare mi se pare cea pentru activarea modului DEBUG. Aceasta se face cu SET DEBUG, iar cu SET ALL se poate vedea daca e activata sau nu. Mai exista si SET D2 (exhaustive debug mode) insa diferentele sunt destul de mici:

image

Iar in modul debug putem vedea exact intrebarile trimise serverului de DNS precum si raspunsul:

image

In exemplul meu de mai sus am schimbat din nou cu serverul local pentru ca folosind un root server nu as fi primit un raspuns complet ci un referral (asa sunt setate serverele root, primesti doar referral-uri catre TLD-urile responsabile)

Iesirea din modul debug se face cu SET NODEBUG sau cu SET NOD2. Oricum la iesirea din tool totul revine la default.

Si nu in ultimul rand exista SET TYPE (sau SET QUERYTYPE) prin care specificati ce tip de inregistrari interogati. By default este A (se poate vedea cu SET ALL), insa puteti interoga inregistrarea de tip SOA a unui domeniu folosind SET TYPE=SOA si interogand numele domeniului:

image

La fel puteti proceda si pentru inregistrari MX, SRV etc.

NSLOOKUP nu este chiar un tool perfect insa daca stiti sa il utilizati va poate grabi investigatia si va poate scuti de o instalare de Wireshark.

Filed in Networking • Tags:

Search Active Directory user by email address

By Andrei Ungureanu - Last updated: Tuesday, December 12, 2017

Cautarea unui user in Active Directory dupa adresa de email nu ar trebui sa fie ceva foarte dificil, insa cateodata cautarile folosind Get-ADUser pot fi mai ciudate si din cauza asta m-am gandit sa public si sintaxa pentru Get-ADUser prin care se poate face asa ceva.

Iar sintaxa daca vreau sa caut dupa un singur user ar fi ceva de genul:

Get-ADUser -filter "mail -eq ‘aungureanu@source.local’"

image

Si in cazul in care avem un fisier CSV ce contine o lista cu adresele de email putem folosi acest one liner:

Import-Csv .\emails.csv |%{Get-ADUser -filter "mail -eq ‘$($_.email)’"}

image

Coloana din fisierul CSV trebuie sa se numeasca Email si atentie la modul in care s-a facut escape la $_.

Intr-un script, folosind For-Each ar fi fost mult mai simplu pentru ca nu ar fi trebuit sa lucram cu $_, dar pentru cine are nevoie de un one liner rapid asta este o varianta foarte buna.

PS: Comanda merge adaptata usor pentru a filtra si dupa alte atribute.

Filed in Active Directory, Scripting • Tags: ,

Update Powershell help files on computers without Internet connection

By Andrei Ungureanu - Last updated: Saturday, December 9, 2017

  Se mai intampla cateodata sa lucrez pe un sistem remote si sa am nevoie sa ma uit in help-ul unei comenzi din Powershell. numai ca sa aflu ca trebuie sa rulez un Update-Help pentru a downloada continutul de pe Internet.

  In afara de faptul ca dureaza, se mai intampla sa nimeresti un sistem ce nu are acces la Internet. Dar exista o varianta si una foarte simpla. Help-ul poate fi downloadat de pe un alt sistem si importat acolo unde avem nevoie.

  Comanda prin care realizam acest lucru este Save-Help:

image

  Folosind Save-Help –DestinationPath \\server\share, putem downloada “help-ul” intr-o locatie din retea accesibila si de sistemele ce nu au acces la internet. De retinut ca Save-Help nu va salva continutul aflat deja local pe sistemul de pe care rulam comanda ci va downloada continutul nou de pe internet si il va salva in locatia specificata (fara a-l instala local).

  Pe sistemele unde este necesar sa importam continutul downloadat vom rula Update-Help insa cu parametrul –SourcePath.

image

Si pentru cei ce vor sa aiba continutul updatat la zi, se pot crea scheduled taskuri care sa importe periodic continutul din share.

Filed in Scripting • Tags:

JOB – Technical Operations Engineer @Xogito

By Andrei Ungureanu - Last updated: Thursday, August 10, 2017

Cei de la Xogito isi cauta un coleg pe un post full time, long term si remote. Daca doriti sa aflati mai multe detalii si eventual sa aplicati puteti accesa linkurile de mai jos:

https://www.xogito.com/

https://hire.withgoogle.com/public/jobs/xogitocom/view/P_AAAAAACAAADBD2s14FKZKz

Pun si job descriptionul mai jos:

 

Technical Operations Engineer

Purpose of the Role

You will participate in all aspects of the new projects implementation including infrastructure design, server’s configurations, documentation, and deployment. Other part of your primary responsibilities is Windows system administration and ability to handle on-call duties on weekly rotation.

Duties and Responsibilities

Required Experience & Knowledge

Skills and Attributes

Required Education & Qualifications

Filed in Anunturi • Tags: ,

Migrating and merging users with ADMT using an include file

By Andrei Ungureanu - Last updated: Sunday, August 6, 2017

Cand vine vorba de o migrare facuta cu bani putini, ADMT este cam singurul tool care ne poate ajuta. Dar de multe ori este destul de rigid si imi pare rau ca Microsoft nu a mai investit ceva resurse pentru a-l dezvolta (tot ce au facut a fost sa il updateze pentru a functiona cu ultimele versiuni de Windows).

Dar sa revenim la subiectul din titlu. Cand avem de migrat multi useri si nu dorim sa ii selectam de mana din GUI, sau dorim sa automatizam intregul proces (ADMT poate fi folosit si din linie de comanda) atunci va trebui sa folosim un include file. Fisierul trebuie sa fie in format CSV (poate avea orice extensie) si sa arate cam asa:

image

Numele coloanei trebuie sa fie Sourcename si pe fiecare linie sa fie numele userului din domeniul sursa. Atentie, este vorba de atributul name si nu samaccountname. In exemplul de mai sus, numele userului ce urmeaza a fi migrat este SOURCEUSR.

Dupa care in wizard trebuie doar sa specificati ca veti folosi un input file.

image

image

Tot acest fisier este folositor atunci cand doriti sa faceti rename la conturi (ca sa respectati un name standard din domeniul target) sau sa faceti merge la conturi cu nume diferit.

Sa luam cazul cand conturile utilizatorilor exista in amble domenii si va trebui facut merge pentru a adauga SID-ul din domeniul vechi in atributul sIDHistory. Fisierul de import va arata cam asa:

image

Nota: documentatia pentru fisierul de import poate fi gasita aici dar daca veti folosi TargetSAM, atunci atributul name al userului destinatie va fi redenumit la name-ul din sursa. Asa ca cel mai bine se pare ca este sa folosim TargetName. Si daca vrei ca singura informatie updatata sa fie SIDHistory, atunci trebuie sa folositi optiunile din imaginile de mai jos si sa faceti exclude la celelalte atribute:

image

image

image

image

In felul acesta, singura informatie updatata in target va fi SIDHistory iar contul destinatie isi va pastra numele.

Mai multe detalii despre include file gasiti aici:

https://technet.microsoft.com/en-us/library/cc974420(v=ws.10).aspx

Filed in Active Directory • Tags: ,

How to access a variable property inside a double-quoted string

By Andrei Ungureanu - Last updated: Tuesday, June 27, 2017

Azi m-am gandit sa explic cazul in care vrei sa folosesti proprietatea unui obiect direct in interiorul unui string.

Sa luam de exemplu cazul in care stocam continutul lui Get-AdUser intr-o variabila

$objUser = Get-ADUser aungureanu

image

Iar acum vrem sa folosim o proprietate a acestui obiect in interiorul unui string. In mod normal ar trebui sa mai folosim inca o variabila intermediara pentru a stoca acea proprietate.

$objSID = $objUser.SID

Iar apoi sa folosim noua variabila direct in string:

image

Dar ca un shortcut, putem accesa direct proprietatea dorita, fara a mai folosi aceasta variabila intermediara. trucul este sa punem totul intr-o expresie folosind paranteze si sa tratam toata expresia ca o variabila cu $, adica $($object.property).

image

Filed in Scripting • Tags:

Powershell SIDHistory Module and Domain Local Groups

By Andrei Ungureanu - Last updated: Tuesday, June 20, 2017

Acum mult timp am scris cate ceva legat de SIDWalker, un tool din Resource Kit-ul de Windows 2003, foarte folositor pe vremuri in diverse scenarii de migrare. Dar tool-ul nu a mai fost updatat de foarte mult timp si inlocuitorul a fost modulul Powershell SIDHistory pe care il gasiti in link-ul de mai jos:

https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Module-for-08769c67

Mi-ar fi greu sa descriu acum tot ce se poate face cu comenzile incluse in acest modul, insa va pot spune ca sunt foarte folositoare atunci cand vreti sa translatati permisiuni pe file system in diverse scenarii de migrare.

Una din comenzile din modul se numeste Export-SIDMappingCustom si permite crearea unui fisier ce va mapa obiecte din domeniul sursa cu obiecte din domeniul target pe baza unui atribut comun (ca exemplu sa zicem samaccountname). Fisierul CSV produs, poate fi folosit mai apot ca sa rulati Convert-SIDHistoryNTFS pe un file sistem si sa faca replace sau add la permisiuni pe baza informatiilor din acel fisier.

Dar daca folositi DomainLocalGroup ca parametru la Export-SIDMappingCustom o sa aveti surpriza sa obtineti doar niste fisiere goale. In caz ca se intampla asa ceva verificati fisierul SIDHistory.psm1 si urmatoarea sectiune:

image

In caz ca grup type pentru DomainLocalGroup este –2147483643, modificati in –2147483644 ca in imaginea de mai sus.

Mai jos o sa pun si link-urile catre seria originala de articole a lui Ashley McGlone, creatorul acestui modul:

  1. Using PowerShell to resolve Token Size issues caused by SID history
    Prior to starting the module development this post explained the background of token size issues as related to SID history.  I provided the basic SID history query that we use to produce the report and some great links for more information on token size.
  2. Do Over: SID History One-Liner
    As a follow up to the Token Size post I re-wrote the SID history report query as a one-liner.
  3. PowerShell: SID Walker, Texas Ranger (Part 1)
    This time we looked at Get-ACL and parsing SDDL strings, a warm up for the next post.
  4. PowerShell: SID Walker, Texas Ranger (Part 2)
    Next I wrote a function to swap SID history entries in ACLs/ACEs.  This compensates for a gap in the ADMT, because it cannot migrate SID history for file shares hosted on a NAS.
  5. PowerShell: SID Walker, Texas Ranger (Part 3): Exporting Domain SIDs and Trusts
    Looking at raw SIDs in a report is not very friendly, so I wrote a function that translates domain SIDs into domain names.  This makes the SID history report more meaningful when you can see the name of the domain from whence they came.  Enumerating all forest trusts and their domain SIDs required using some .NET ninja skills.
  6. How To Remove SID History With PowerShell
    To round out the functions I provided Get-SIDHistory and Remove-SIDHistory, emphasizing that this is the LAST step in the process.  I leveraged the previous domain SID function to even give us the ability to remove SID history selectively by old domain name.

https://blogs.technet.microsoft.com/ashleymcglone/tag/sidhistory/

Filed in Active Directory • Tags: , ,

Topologies for Azure AD Connect

By Andrei Ungureanu - Last updated: Monday, June 19, 2017

Articolul din link-ul de mai jos mi se pare una din cele mai bune documentatii cu scenariile posibile pentru Azure AD Connect:

https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-topologies

Filed in Active Directory, Windows Azure • Tags: