giovedì 21 settembre 2023

Windows Server 2022: Creazione gruppi in Active Directory

Lo scopo principale della creazione di gruppi in Active Directory è quello raccogliere e organizzare account utenti, account computer e altri gruppi in unità gestibili. Lavorare con i gruppi invece che con i singoli account semplifica notevolmente la manutenzione e la gestione della rete: gli amministratori devono assegnare le autorizzazioni/permessi una sola volta al gruppo anziché più volte a ogni singolo utente. Ogni account aggiunto a un gruppo riceverà automaticamente i diritti/autorizzazioni assegnati al gruppo in Active Directory.



Tipi di gruppo

In Active Directory esistono due tipi di gruppi: Distribuzione e Sicurezza.

Gruppi di Distribuzione
gruppi di Distribuzione vengono usati per la creazione di liste di distribuzione di posta elettronica. Possono essere utilizzati solo con le applicazioni di posta elettronica, come ad es. MS Exchange Server, per inviare email ad un gruppo di utenti. I gruppi di Distribuzione, non essendo abilitati per la sicurezza, non possono essere elencati all'interno delle liste di controllo di accesso discrezionale (discretionary access control list o DACL).


Gruppi di Sicurezza
gruppi di Sicurezza vengono utilizzati per assegnare permessi agli utenti e/o per assegnare autorizzazioni sulle risorse condivise. I gruppi di Sicurezza sono elencati negli elenchi DACL che definiscono le autorizzazioni per risorse e oggetti.
Come per i gruppi di Distribuzione, anche i gruppi di Sicurezza possono essere usati come entità di posta elettronica. Inviando un messaggio di posta elettronica al gruppo questo verrà inviato a tutti i membri del gruppo.
In Active Directory sono già presenti dei gruppi di Sicurezza, ad es.  il gruppo Backup Operators. Un account utente aggiunto al gruppo Backup Operators sarà in grado di eseguire il backup e il ripristino di file/directory presenti sui Domain Controller.




Ambito di gruppo

I gruppi sono caratterizzati da un ambito che determina dove il gruppo può essere applicato all'interno della foresta o dominio. L'ambito di applicazione determina anche chi può essere membro di un gruppo. Microsoft non ha inserito molte limitazioni in Active Directory riguardo a come i gruppi possono essere annidati (nesting) tuttavia bisogna prestare molta attenzione nell'eseguire tale operazione. L'unico aiuto offerto in Active Directory per evitare potenziali rischi dovuti al nesting di gruppi di sicurezza è quello dell'ambito di gruppo.
All'interno di Active Directory è possibile trovare tre ambiti di gruppo: GlobaleLocale al DominioUniversale.

Globale
I gruppi con ambito globale vengono utilizzati per gestire gli account utente e gli account computer e possono includere altri gruppi con ambito globale appartenenti allo stesso dominio. Dato che non vengono replicati all'esterno del dominio di appartenenza, gli account di un gruppo con ambito globale possono essere modificati senza che questo crei traffico di replica verso il catalogo globale (global catalog). 
Possiamo pensare ai gruppi con ambito globale come a "gruppi di account" che includono utenti con uno o più punti in comune. Ad esempio, consideriamo il reparto Marketing di una società. Tutti gli utenti di tale reparto potranno essere inseriti all'interno di un gruppo globale chiamato "GRP_Marketing"

Locale al dominio (Domain Local)
Grazie alla loro flessibilità relativa alle restrizioni, i gruppi Locali al dominio sono ideali per definire e gestire l'accesso alle risorse all'interno del singolo dominio. In particolare, questi gruppi vengono utilizzati perché ad essi possono essere aggiunti gruppi del dominio principale, nonché gruppi di altri domini e foreste trusted. Generalmente vengono utilizzati per l'accesso diretto a specifiche risorse non archiviate in Active Directory come condivisioni su file server, code di stampa, ecc. E' sconsigliato utilizzare tale ambito per l'assegnazione di autorizzazioni sugli oggetti di Active Directory.
Se i gruppi di ambito globale possono essere considerati come "gruppi di account" allora possiamo considerare i gruppi di ambito locale come "gruppi di risorse". 
Supponiamo che agli utenti del gruppo GRP_Marketing dobbiamo concedere l'accesso ad una condivisione di file chiamata DocumentiMarketing (gruppo GRP_DocumentiMarketing). Annidando il gruppo globale "GRP_Marketing" all'interno del gruppo locale al dominio "GRP_DocumentiMarketing", abbiamo appena dato a tutti gli utenti del dipartimento di marketing l'accesso ai contenuti della condivisione. 


Universale
I gruppi universali sono utilizzati solo in ambienti multi-dominio. I gruppi con ambito universale sono disponibili solo in domini con modalità nativa e le appartenenze vengono memorizzate all'interno del catalogo globale. Proprio per questo motivo è sconsigliabile modificare frequentemente l'appartenenza di un gruppo con ambito universale in quanto ogni modifica apportata verrà replicata sull'intera foresta
Supponiamo di avere una rete con 2 domini USA e EUROPE e un global group GRP_Marketing in ciascun dominio; è possibile creare un universal group UGRP_Marketing che racchiuda i gruppi USA\GRP_Marketing e EUROPE\GRP_Marketing. Il gruppo universale UGRP_Marketing potrà essere utilizzato ovunque all'interno dell'infrastruttura.  



Nella seguente tabella, prelevata dalla documentazione Microsoft, vengono riportati gli ambiti di raggruppamento


AmbitoMembri possibiliConversione ambitiPuò concedere autorizzazioniPossibile membro di
Universale
Account da qualsiasi dominio della stessa foresta

Gruppi globali di qualsiasi dominio della stessa foresta

Altri gruppi universali di qualsiasi dominio della stessa foresta

Può essere convertito nell'ambito locale di dominio

Può essere convertito in ambito globale se il gruppo non è un membro di altri gruppi universali
In qualsiasi dominio della stessa foresta o delle foreste trusting
Altri gruppi universali della stessa foresta

Gruppi locali di dominio nella stessa foresta o nelle foreste trusting

Gruppi locali nei computer della stessa foresta o delle foreste trusting

Globale
Account dello stesso dominio

Altri gruppi globali dello stesso dominio
Può essere convertito in ambito universale se il gruppo non è membro di un altro gruppo globale
In qualsiasi dominio della stessa foresta o Trusted Domains o forests
Gruppi universali da qualsiasi dominio della stessa foresta

Altri gruppi globali dello stesso dominio

Gruppi locali di dominio da qualsiasi dominio della stessa foresta o da qualsiasi dominio di trusting
Dominio Locale
Account da qualsiasi dominio o da qualsiasi dominio attendibile

Gruppi globali da qualsiasi dominio o da qualsiasi dominio attendibile

Gruppi universali da qualsiasi dominio della stessa foresta

Altri gruppi locali di dominio dello stesso dominio

Account, gruppi globali e gruppi universali da altri insiemi di foreste e da domini esterni
Può essere convertito in ambito universale se il gruppo non contiene altri gruppi locali di dominio
All'interno dello stesso dominio
Altri gruppi locali di dominio dello stesso dominio

Gruppi locali nei computer dello stesso dominio, esclusi i gruppi incorporati con SID noti

Una struttura AD ben progettata prevede che agli utenti vengano forniti solo i permessi/abilitazioni strettamente necessari per l'accesso alle informazioni e alle risorse essenziali per lo svolgimento del proprio lavoro. I modelli di sicurezza basati su ruoli, attributi e risorse sono tutti modi diversi che le organizzazioni utilizzano per raggiungere tale obiettivo in tutta l'infrastruttura IT e i tipi e l'ambito dei gruppi ricoprono un ruolo fondamentale. I modelli strutturali di best practice suggeriti da Microsoft per l'architettura Active Directory sono due: AGDLP e AGUDLP.
  • AGDLP (AccountsGlobalDomain LocalPermissions) fornisce una guida su come aggiungere i gruppi all'interno degli altri senza compromettere la sicurezza o sacrificare l'efficienza operativa. Il modello prevede quanto segue: Gli account utente e computer dovrebbero essere membri di gruppi globali, che a loro volta possono essere membri di gruppi locali di dominio che descrivono i permessi delle risorse.
  • AGUDLP (AccountsGlobalUniversalDomain LocalPermissions), come intuibile dal nome, è molto simile a AGDLP ma la "U" introduce i gruppi in ambito Universale. Le appartenenze di tali gruppi sono memorizzate nel catalogo globale, che è più che altro una necessità in ambienti multi-dominio. L'uso di questo modello dipende in realtà da quanto si fa affidamento sul catalogo globale nell'organizzazione. Se c'è un interesse personale ad avere il catalogo globale il più completo possibile (ad es. nel caso in cui bisogna gestire molti dipendenti mobile e permettere loro di ricercarsi l'un l'altro facilmente tramite MS Outlook), allora il modello AGUDLP aiuterà a raggiungere lo scopo. Tuttavia, per gli ambienti più piccoli che hanno solo un singolo dominio questo modello può aggiungere un inutile livello di complessità.


La ragione per cui i modelli strutturali AGDLP e AGUDLP suggeriti da Microsoft sono la migliore soluzione da adottare, almeno nella gran parte dei casi, è duplice. Dal punto di vista della sicurezza, utilizzando gruppi locali di domini per concedere permessi a risorse specifiche, un amministratore può dare ai membri di altri domini e foreste l'accesso alla risorsa senza dover dare loro accesso diretto al resto del dominio in cui risiede la risorsa. In questo modo si evita di aggiungere utenti di altri domini e foreste al dominio in cui risiede la risorsa. Dal punto di vista operativo, i modelli AGDLP e AGUDLP facilitano anche la gestione dei membri del gruppo consentendo di gestire i permessi e l'organizzazione degli utenti separatamente.
I modelli strutturali suggeriti da Microsoft non sempre rappresentano la migliore soluzione. In infrastrutture molto grandi l'uso dei gruppi locali al dominio per la gestione dei permessi delle risorse può portare alla generazione di un numero molto elevato di gruppi e, di conseguenza, ciò potrebbe portare un utente a diventare membro di migliaia di gruppi.




Creare un gruppo tramite il Centro di amministrazione di Active Directory

  • Da Server Manager cliccare sul menu Strumenti e selezionare Centro di amministrazione di Active Directory. In alternativa premere la combinazione di tasti WIN+R, digitare dsac.exe e premere invio.
    Server Manager
    FIG 1 - Server Manager

  • Espandere il dominio mycompany.local quindi cliccare con il tasto destro sull'unità organizzativa Marketing e selezionare Nuovo->Raggruppa.

    Centro di amministrazione di Active Directory, Nuovo gruppo
    FIG 2 - Centro di amministrazione di Active Directory, Nuovo gruppo

  • Nella casella Nome gruppo inserire il nome da assegnare al gruppo (ad es. GRP_Marketing).
  • Come Tipo gruppo lasciare selezionato Sicurezza e come Ambito del gruppo lasciare attiva l'opzione Globale. Per proteggere il gruppo da eliminazioni accidentali, selezionare l'apposita casella (Proteggi da eliminazioni accidentali).

    Crea Raggruppa
    FIG 3 - Crea Raggruppa

  • Cliccare su OK per completare la creazione del gruppo.

    Gruppo GRP_Marketing
    FIG 4 - Gruppo GRP_Marketing




Creare un gruppo tramite Utenti e computer di Active Directory

  • Da Server Manager cliccare sul menu Strumenti e selezionare Utenti e Computer di Active Directory (Active Directory Users and Computers). In alternativa premere la combinazione di tasti WIN+R digitare dsa.msc e premere invio.
    Server Manager
    FIG 5 - Server Manager

  • Espandere il dominio mycompany.local quindi cliccare con il tasto destro sull'unità organizzativa Marketing e selezionare Nuovo->Gruppo.

    Utenti e computer di Active Directory, Nuovo gruppo
    FIG 6 - Utenti e computer di Active Directory, Nuovo gruppo

  • Nella casella Nome gruppo inserire il nome da assegnare al gruppo (ad es. GRP_Marketing), come Tipo gruppo lasciare selezionato Sicurezza e come Ambito del gruppo lasciare attiva l'opzione Globale.

    Nuovo oggetto gruppo
    FIG 7 - Nuovo oggetto gruppo

  • Cliccare su OK per la creazione del gruppo.

    Gruppo GRP_Marketing
    FIG 8 - Gruppo GRP_Marketing

  • Per proteggere il gruppo da eliminazioni accidentali, cliccarci su con il tasto destro del mouse e selezionare Proprietà. Nella scheda Oggetto selezionare la casella Proteggi oggetto da eliminazioni accidentali e cliccare su OK.
    Proteggi oggetto da eliminazioni accidentali
    FIG 9 - Proteggi oggetto da eliminazioni accidentali






Creare un gruppo tramite PowerShell

Per creare un gruppo in Active Directory tramite PowerShell è necessario utilizzare il cmdlet New-ADGroup

Sintassi
La sintassi del comando è la seguente

New-ADGroup
   [-WhatIf]
   [-Confirm]
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   [-Description <String>]
   [-DisplayName <String>]
   [-GroupCategory <ADGroupCategory>]
   [-GroupScope] <ADGroupScope>
   [-HomePage <String>]
   [-Instance <ADGroup>]
   [-ManagedBy <ADPrincipal>]
   [-Name] <String>
   [-OtherAttributes <Hashtable>]
   [-PassThru]
   [-Path <String>]
   [-SamAccountName <String>]
   [-Server <String>]

   [<CommonParameters>]

Parametri

-AuthType 
Specifica il metodo di autenticazione. I valori accettati dal parametro sono:
  • Negotiate oppure 0 (default)
  • Basic oppure 1

-Confirm
Se specificato, tale parametro mostra la richiesta di conferma prima di eseguire il cmdlet.

-Credential
Specifica un'account utente che ha i permessi necessari per eseguire l'operazione. Se omesso viene considerato l'utente corrente che sta eseguendo il comando. Al parametro può essere passato il nome dell'account, come ad es. "utente01" o "Dominio\utente01" oppure può essere passato un'oggetto PSCredential generato dal cmdlet Get-Credential. Se viene specificato un'account utente verrà richiesto di inserire la password all'esecuzione del comando.

-Description
Permette di specificare la descrizione dell'oggetto. 

-DisplayName
Specifica il display name dell'oggetto.

-GroupCategory
Con questo parametro si va a specificare il tipo di gruppo. I valori accettati sono:
  • Distribution oppure 0
  • Security oppure 1

-GroupScope
Il parametro specifica l'ambito del gruppo. I valori accettati sono:
  • DomainLocal o 0
  • Global o 1
  • Universal o 2

-HomePage
Permette di specificare l'URL della home page dell'oggetto.

-Instance
Specifica l'istanza di un oggetto di tipo gruppo da usare come template per la creazione di un nuovo gruppo.
E' possibile utilizzare un gruppo già esistente o costruirne uno nuovo utilizzando PowerShell.

Metodo 1: Utilizzare il cmdlet Get-ADGroup per recuperare un oggetto gruppo esistente per poi passarlo al parametro Instance del cmdlet New-ADGroup per creare un nuovo oggetto gruppo. È possibile sovrascrivere i valori delle proprietà del nuovo oggetto impostando i parametri appropriati.

Metodo 2: Creare un nuovo oggetto ADGroup e impostare i valori delle proprietà utilizzando l'interfaccia a riga di comando di PowerShell. Quindi passare questo oggetto al parametro Instance del cmdlet New-ADGroup per creare il nuovo oggetto gruppo.

-ManagedBy
Permette di specificare l'utente o il gruppo che gestisce l'oggetto. L'utente o il gruppo può essere indicato passando al parametro:
  • Distinguished name;
  • GUID (objectGUID)
  • Security identifier (objectSid)
  • SAM account name (sAMAccountName)

-Name
Il parametro permette di impostare il nome dell'oggetto.

-OtherAttributes
Specifica i valori degli attributi degli oggetti per gli attributi che non sono rappresentati dai parametri del cmdlet. 
Per specificare un singolo valore per un attributo
-OtherAttributes @{'AttributeLDAPDisplayName'=value}
Per specificare valori multipli per un attributo
-OtherAttributes @{'AttributeLDAPDisplayName'=value1,value2,...}
Per specificare valori per più attributi è necessario separare gli attributi da un punto e virgola
-OtherAttributes @{'Attribute1LDAPDisplayName'=value; 'Attribute2LDAPDisplayName'=value1,value2;...}

-PassThru
Restituisce un oggetto che rappresenta l'item su cui si sta lavorando. Per impostazione predefinita, il cmdlet non genera alcun output.

-Path
Specifica il path X.500 dell'unità organizzativa o del container dove verrà creato il nuovo oggetto.

-Server
Permette di specificare l'istanza di Active Directory Domain Services a cui connettersi per la creazione di un nuovo gruppo.

-WhatIf
Mostra cosa accadrebbe se venisse eseguito il cmdlet. Il cmdlet non viene eseguito.



Creare un gruppo in Active Directory tramite New-ADGroup
Per creare il gruppo GRP_Marketing all'interno della OU Marketing, avviare Windows PowerShell (amministratore) ed eseguire il comando
 New-ADGroup -GroupCategory:"Security" -GroupScope:"Global" -Name:"GRP_Marketing" -Path:"OU=Marketing,DC=mycompany,DC=local" -SamAccountName:"GRP_Marketing" -Server:"ServerDC2.mycompany.local"  


Creare un gruppo in Active Directory tramite PowerShell
FIG 10 - Creare un gruppo in Active Directory tramite PowerShell

Per proteggere il gruppo da eliminazioni accidentali, va eseguito il comando
 Set-ADObject -Identity:"CN=GRP_MArketing,OU=Marketing,DC=mycompany,DC=local" -ProtectedFromAccidentalDeletion:$true -Server:"ServerDC2.mycompany.local"  

Come già visto per gli account utente nell'articolo Windows Server 2022: Aggiungere account utente al dominio, per velocizzare la creazione di numerosi gruppi è possibile creare un file CSV con i valori dei parametri (FIG 11).
File CSV contenente l'elenco dei gruppi da creare
FIG 11 - File CSV contenente l'elenco dei gruppi da creare

Una volta creato il file sul server (nell'esempio al file è stato assegnato il nome GroupAD.csv e copiato in C:\) andremo ad eseguire il seguente comando in Windows PowerShell (amministratore) che aggiunge i gruppi elencati all'interno del file al dominio.
 Import-Csv -Path C:\GroupAD.csv | ForEach-Object {New-ADGroup -GroupCategory:$_.GroupCategory -GroupScope:$_.GroupScope -Name:$_.Name -Path:$_.Path -SamAccountName:$_.SamAccountName -Server:$_.Server}  

PowerShell, import del file CSV e creazione dei gruppi in AD
FIG 12 -  PowerShell, import del file CSV e creazione dei gruppi in AD


Il file CSV e il file di testo contenente il comando in PowerShell possono essere scaricati dal seguente link
DOWNLOAD





mercoledì 20 settembre 2023

Windows Server 2022: Rimuovere la protezione da eliminazione accidentale da un account utente

Nell'articolo Windows Server 2022: Aggiungere account utente al dominio è stato illustrato come creare un nuovo account utente all'interno del dominio e come proteggerlo da cancellazioni accidentali sia tramite GUI (attraverso il Centro di amministrazione di Active DirectoryUtenti e Computer di Active Directory) sia tramite PowerShell (utilizzando il cmdlet  Set-ADObject e il parametro -ProtectedFromAccidentalDeletion).

Se si cerca di eliminare un account protetto da cancellazioni accidentali, verrà visualizzato un messaggio simile a quello mostrato in FIG  1.
Credenziali insufficienti per eliminare l'account
FIG 1 - Credenziali insufficienti per eliminare l'account


In questo articolo verrà mostrata l'operazione inversa, ovvero come rimuovere la protezione da eliminazione accidentale da un account utente (operazione necessaria prima di poter eliminare un account).

Rimuovere la protezione da eliminazione accidentale tramite Utenti e Computer di Active Directory

Avviare Utenti e Computer di Active Directory tramite il menu Strumenti di Server Manager o eseguendo il comando dsa.msc.
Dal menu Visualizza di Utenti e computer di Active Directory selezionare Funzionalità avanzate.
Utenti e computer di Active Directory, Visualizza funzionalità avanzate
FIG 2 - Utenti e computer di Active Directory, Visualizza funzionalità avanzate

Cliccare, con il tasto destro del mouse, sull'account utente che si intende cancellare (ad es. Marketing\Utenti\Duffy Duck) e selezionare Proprietà.
Utenti e computer di Active Directory, Proprietà account utente
FIG 3 - Utenti e computer di Active Directory, Proprietà account utente
Nella finestra di dialogo relativa alle Proprietà, selezionare la scheda Oggetto e rimuovere la spunta alla casella Proteggi oggetto da eliminazioni accidentali quindi cliccare su OK.
Proprietà account, Proteggi oggetto da eliminazioni accidentali
FIG 4 - Proprietà account, Proteggi oggetto da eliminazioni accidentali

Dopo tale operazione sarà possibile eliminare l'account cliccandoci su con il tasto destro del mouse e selezionando Elimina dal menu contestuale.


Rimuovere la protezione da eliminazione accidentale tramite Centro di amministrazione di Active Directory

Avviare Centro di amministrazione di Active Directory tramite il menu Strumenti di Server Manager o eseguendo il comando dsac.exe.
Cliccare con il tasto destro del mouse sull'account utente su cui si intende eseguire l'operazione e, dal menu contestuale, selezionare Proprietà.
Centro di amministrazione di Active Directory, Proprietà account
FIG 5 - Centro di amministrazione di Active Directory, Proprietà account
Rimuovere la selezione all'opzione Proteggi da eliminazioni accidentali e cliccare su OK.
Proprietà account, Proteggi da eliminazioni accidentali
FIG 6 - Proprietà account, Proteggi da eliminazioni accidentali


Rimuovere la protezione da eliminazione accidentale tramite PowerShell

Per rimuovere la protezione da eliminazione accidentale di un account utente tramite PowerShell si utilizza il cmdlet Set-ADObject. Ad esempio, per rimuovere la protezione dall'account dell'utente Daffy Duck presente in Marketing\Utenti il comando sarà simile a
 Set-ADObject -Identity:"CN=Daffy Duck,OU=Utenti,OU=Marketing,DC=mycompany,DC=local" -ProtectedFromAccidentalDeletion:$false -Server:"ServerDC2.mycompany.local"  
PowerShell, Rimuovere la protezione da eliminazione accidentale da un account utente
FIG 7 - PowerShell, Rimuovere la protezione da eliminazione accidentale da un account utente

Per l'eliminazione di un account utente in AD tramite PowerShell va utilizzato il cmdlet Remove-ADObject. (lo stesso cmdlet utilizzato per l'eliminazione delle UO)
Con il seguente comando andremo ad eliminare l'account utente Daffy Duck presente all'interno dell'unità organizzativa Marketing\Utenti del nostro dominio mycompany.local. Il comando PowerShell da eseguire è

 Remove-ADObject -Confirm:$false -Identity:"CN=Daffy Duck,OU=Utenti,OU=Marketing,DC=mycompany,DC=local" -Server:"ServerDC2.mycompany.local"  

PowerShell, Elimina account utente
FIG 8 - PowerShell, Elimina account utente








martedì 19 settembre 2023

Windows Server 2022: Aggiungere account utente al dominio

Ora che Active Directory è installato, che il dominio e le unità organizzative sono state create è possibile passare alla creazione degli account utente.
Per default un utente che appartiene al dominio, a prescindere dalla unità organizzativa di appartenenza, può eseguire il logon su qualsiasi workstation del dominio stesso. In maniera analoga a quanto già visto per la creazione delle unità organizzative, la creazione di un nuovo account utente all'interno del dominio può essere eseguita con lo strumento Utenti e Computer di Active Directory, mediante l'utilizzo del Centro di amministrazione di Active Directory oppure tramite PowerShell

Prima di mostrare come aggiungere un nuovo utente al dominio è opportuno decidere uno standard da adottare relativamente ai nomi degli account utenti utilizzati per il logon. L'account utente dovrà essere univoco all'interno dell'intero dominio e può essere composto da caratteri alfanumerici e caratteri speciali ad eccezione di " / \ [ ] : ; | = , + * ? < >. Anche se gli spazi sono supportati è sconsigliabile utilizzarli all'interno dei logon name. Alcuni metodi comuni adottati prevedono l'utilizzo della prima lettera del nome seguito dal cognome, NomeCognome senza spazi, nome.cognome, matricola dipendente, ecc. Ciò non toglie che possiamo utilizzare un metodo a noi più congeniale e, per una questione di uniformità, è raccomandato applicare lo stesso metodo per tutti gli utenti che verranno aggiunti al dominio.

Creazione nuovo utente nel dominio tramite Utenti e Computer di Active Directory 

Da Server Manager cliccare sul menu Strumenti e selezionare Utenti e computer di Active Directory. In alternativa premere la combinazione di tasti WIN+R, digitare dsa.msc e premere invio.
Server Manager
FIG 1 - Server Manager

L'UO standard contenente gli utenti è quella nominata Users presente all'interno del dominio. In questo articolo, invece, andremo a creare il nostro primo utente all'interno dell'unità organizzativa Utenti presente in Direzione (UO create negli articoli precedenti). Espandere il dominio e l'unità organizzativa Direzione quindi selezionare l'unità organizzativa Utenti presente al suo interno.
Cliccare sull'icona Crea nuovo utente nel contenitore corrente (in alternativa cliccare con il tasto destro del mouse sull'unità organizzativa Utenti, selezionare Nuovo quindi Utente dal menu contestuale).
Crea un nuovo utente nel contenitore corrente
FIG 2 - Crea un nuovo utente nel contenitore corrente

Compilare i campi della nuova finestra di dialogo con il nome e cognome dell'utente da creare (il campo Nome completo verrà automaticamente compilato). Nella casella Nome accesso utente va inserito un identificativo con cui l'utente potrà effettuare il logon sulle workstation di dominio. Tale identificativo dovrà essere univoco sull'intero dominio. Una volta compilati i campi richiesti cliccare su Avanti per proseguire.
Nuovo oggetto Utente
FIG 3 - Nuovo oggetto Utente

Il passo successivo consiste nello specificare una password per l'utente appena creato. La password deve soddisfare i requisiti minimi di complessità: deve contenere almeno una lettera maiuscola, almeno un carattere numerico e avere una lunghezza di almeno 7 caratteri. In questa finestra possiamo impostare diverse opzioni:
  • Cambiamento obbligatorio password all'accesso successivo 
    Si tratta dell'opzione selezionata di default. Solitamente in questi casi l'amministratore specifica una password temporanea che l'utente dovrà cambiare al primo logon con una a propria scelta.
  • Cambiamento password non consentito
    Selezionando tale opzione si impedisce all'utente di modificare la password. Per impedire il blocco dell'account alla scadenza della password, insieme a questa opzione va selezionata anche Nessuna scadenza password. Per default, se non diversamente specificato, la password dell'utente scadrà dopo 42 giorni.
  • Nessuna scadenza password
    Abilitare tale opzione se non si vuole che la password dell'utente scada.
  • Account disabilitato
    Selezionando l'opzione Account disabilitato l'utenza verrà comunque creata ma l'utente non potrà eseguire il logon al dominio finché il suo account non verrà abilitato.
Per la creazione di questo primo utente specifichiamo una password temporanea e lasciamo attiva solo l'opzione Cambiamento obbligatorio password all'accesso successivo in modo da costringere l'utente a modificarla al primo logon. Cliccare su Avanti per proseguire.
Password account utente
FIG 4 - Password account utente

Nella finestra di dialogo successiva verrà mostrato un riepilogo delle informazioni del nuovo utente. Cliccare su Fine per procedere alla creazione dell'account.
Riepilogo impostazioni nuovo account utente
FIG 5 - Riepilogo impostazioni nuovo account utente

L'account è stato creato nel percorso specificato.
Account utente creato in Active Directory
FIG 6 - Account utente creato in Active Directory

Anche per gli account utente può essere attivata la protezione contro le cancellazioni accidentali come visto per le unità organizzative. Una volta creato l'account cliccarci su con il tasto destro del mouse e selezionare Proprietà dal menu contestuale. Per proteggere l'account selezionare la casella Proteggi oggetto da eliminazioni accidentali e cliccare su OK.
Proprietà account utente
FIG 7 - Proprietà account utente





Creazione nuovo utente nel dominio tramite Centro di amministrazione di Active Directory 

Da Server Manager cliccare sul menu Strumenti e selezionare Centro di amministrazione di Active Directory. In alternativa premere la combinazione di tasti WIN+R, digitare dsac.exe e premere invio.
Server Manager
FIG 8 - Server Manager

Sul pannello laterale di sinistra selezionare il proprio dominio (mycompany.local) quindi nel pannello centrale cliccare due volte sull'unità organizzativa Direzione e successivamente eseguire la stessa operazione su Utenti.
Nel pannello Attività (sulla destra della finestra) cliccare su Nuovo e selezionare Utente (in alternativa cliccare con il tasto destro del mouse in una parte vuota del pannello centrale e selezionare Nuovo->Utente).
Nuovo account utente
FIG 9 - Nuovo account utente

Come visibile dalla finestra di dialogo che appare, ci è possibile inserire molte più informazioni rispetto a quanto visto con lo strumento Utenti e Computer di Active Directory. Da questa schermata, spuntando l'apposita casella (Proteggi da eliminazioni accidentali), possiamo anche proteggere l'account da eliminazioni accidentali come visto per le UO. Una volta inserito Nome, Cognome, la password, Accesso Utente UPN e SamAccountName, cliccare su OK per creare l'account utente.
Crea utente
FIG 10 - Crea utente

Account utente creato in Active Directory
FIG 11 - Account utente creato in Active Directory 




Creazione nuovo utente nel dominio con PowerShell

Per la creazione di un account utente in AD tramite PowerShell va utilizzato il cmdlet New-ADUser
Con il seguente comando andremo a creare un nuovo utente all'interno dell'unità organizzativa Utenti contenuta in Direzione all'interno del nostro dominio mycompany.local. Il comando PowerShell da eseguire è

 New-ADUser -Path "OU=Utenti,OU=Direzione,DC=mycompany,DC=local" -AccountPassword (ConvertTo-SecureString Password123 -AsPlainText -force) -Name "Giovanni Lubrano Lavadera" -Givenname Giovanni -Surname "Lubrano Lavadera" -DisplayName "Giovanni Lubrano Lavadera" -SamAccountName "Giovanni.Lubrano" -UserPrincipalName "Giovanni.Lubrano@mycompany.local" -ChangePasswordAtLogon 1 -Enabled 1  

Parametri
  • -Path Al parametro path va passato il percorso (Distinguished Name) in cui creare il nuovo account utente.
  • -AccountPassword Consente di specificare la password da assegnare al nuovo account. Il valore viene memorizzato come stringa cifrata. Prima di poter passare la password a -AccountPassword questa va convertita in una SecureString con il comando ConvertTo-SecureString. 
  • -Name Specifica il nome dell'oggetto (proprietà Name dell'oggetto user).
  • -Givenname Nome dell'utente.
  • -Surname Cognome dell'utente.
  • -DisplayName Specifica il DisplayName dell'oggetto.
  • -SamAccountName Specifica il nome Security Account Manager (SAM) per l'account utente. La lunghezza della stringa può arrivare a 256 caratteri ma per compatibilità con i vecchi sistemi operativi si consiglia di limitare la lunghezza a un massimo di 20 caratteri.
  • -UserPrincipalName User Principal Name (UPN) rappresenta il nome dell'utente in un formato analogo all'email. Un UPN è formato dal logon name, dal separatore/simbolo '@' e dal nome dominio (suffisso UPN).
  • -ChangePasswordAtLogon Necessita in input di un valore di tipo Boolean. A tale parametro può essere passato il valore 0 (per FALSO) o 1 (per VERO). Passando il valore 1 si forza l'utente a modificare la password al primo logon eseguito con la password temporanea (Password123).
  • -Enabled Anche tale parametro richiede in input un valore Boolean. Passandogli il valore 1 si indica che l'account creato è abilitato.

PowerShell, Creazione nuovo account utente in Active Directory
FIG 12 - PowerShell, Creazione nuovo account utente in Active Directory

Per proteggere l'account da eliminazioni accidentali, è possibile utilizzare il cmdlet Set-ADObject insieme al parametro -ProtectedFromAccidentalDeletion:$true come indicato nel seguente comando
 Set-ADObject -Identity:"CN=Giovanni Lubrano Lavadera,OU=Utenti,OU=Direzione,DC=mycompany,DC=local" -ProtectedFromAccidentalDeletion:$true -Server:"ServerDC2.mycompany.local"  

Per velocizzare l'inserimento di numerosi account utente all'interno del dominio è possibile preparare un file CSV (comma-separated values): un file di testo contenente le informazioni degli utenti, separati da virgole, da aggiungere al dominio. Il file sarà simile a quello mostrato in FIG 13.
File CSV contenete l'elenco degli utenti da aggiungere al dominio
FIG 13 - File CSV contenete l'elenco degli utenti da aggiungere al dominio

Una volta creato il file sul server (nell'esempio al file è stato assegnato il nome UserAD.csv e copiato in C:\) andremo ad eseguire il seguente comando in Windows PowerShell (amministratore) che aggiunge gli utenti elencati all'interno del file al dominio.
 Import-Csv -Path C:\UserAD.csv | ForEach-Object {New-ADUser -Path $_.ou -AccountPassword (ConvertTo-SecureString Password123 -AsPlainText -force) -Name $_.name -Givenname $_.fname -Surname $_.lname -DisplayName $_.name -SamAccountName $_.sam -UserPrincipalName $_.email -ChangePasswordAtLogon 1 -Enabled 1}  

PowerShell, Import del file CSV e creazione account utente all'interno del dominio
FIG 14 - PowerShell, Import del file CSV e creazione account utente all'interno del dominio

Account utente importati dal file CSV tramite PowerShell
FIG 15 - Account utente importati dal file CSV tramite PowerShell

Il file CSV e il file di testo contenente il comando in PowerShell possono essere scaricati dal seguente link






lunedì 18 settembre 2023

PowerShell: Diagnostica delle prestazioni di avvio/spegnimento/standby/ripresa di Windows

Da Sistemista ci si trova spesso a dover analizzare problemi di prestazioni legati ai processi di avvio/arresto/ibernazione/ripresa di una workstation/Server. Microsoft fornisce una serie di registri eventi di sistema per diversi scopi che possono essere utili in tali analisi. Nel Visualizzatore eventi di Windows, questi registri si trovano in un ramo speciale chiamato "Registri applicazioni e servizi". Windows registra gli eventi di diagnostica delle prestazioni nel registro eventi Microsoft-Windows-Diagnostics-Performance/Operational. Per aprire questo registro in Visualizzatore eventi di Windows (eventvwr), espandere il ramo Registri applicazioni e servizi -> Microsoft -> Windows -> Diagnostics-Performance ->Operativo.
Visualizzatore eventi, Diagnostics-Performance
FIG 1 - Visualizzatore eventi, Diagnostics-Performance

Dal registro è possibile visualizzare un elenco di diversi eventi diagnostici. Come si può notare dalla FIG 1, gli eventi con lo stesso ID possono essere di tipi (livelli) diversi (Avviso, Errore e Critico) che dipendono dalla durata del processo di avvio/arresto. Questi eventi contengono internamente molti parametri importanti, ma non sono visibili nella descrizione dell'evento (anche il Visualizzatore eventi di Windows non li visualizza). L'unico modo per visualizzare questi parametri è fare doppio clic sull'evento per visualizzarne le proprietà, passare alla scheda  Dettagli e selezionare XML.
Proprietà evento, XML
FIG 2 - Proprietà evento, XML


Nella seguente tabella sono riportati le descrizioni degli Event ID.
Event ID Descrizione
Monitoraggio delle prestazioni di avvio
100
Avvio di Windows
101
L'avvio dell'applicazione ha richiesto più tempo del consueto, determinando una riduzione del livello delle prestazioni del processo di avvio del sistema
102
L'inizializzazione del driver ha richiesto più tempo del previsto, determinando una riduzione del livello delle prestazioni del processo di avvio del sistema
103
L'avvio di questo servizio di avvio ha richiesto più tempo del previsto, determinando una riduzione del livello delle prestazioni del processo di avvio del sistema
104
L'inizializzazione del sistema Core ha richiesto più tempo, con conseguente riduzione delle prestazioni nel processo di avvio del sistema.
105
Le ottimizzazioni in primo piano (prefetching) hanno richiesto più tempo per essere completate, con un conseguente calo delle prestazioni nel processo di avvio del sistema.
106
Le ottimizzazioni in background (prefetching) hanno richiesto più tempo per essere completate, con conseguente riduzione delle prestazioni nel processo di avvio del sistema.
107
L'applicazione dei criteri computer ha causato un rallentamento nel processo di avvio del sistema
108
L'applicazione dei criteri utente ha causato un rallentamento nel processo di avvio del sistema
109
L'inizializzazione del dispositivo ha richiesto più tempo del previsto, determinando una riduzione del livello delle prestazioni del processo di avvio del sistema
110
L'inizializzazione della gestione delle sessioni ha causato il rallentamento del processo di avvio
Monitoraggio delle prestazioni di arresto del sistema
200
Arresto di Windows
201
Questa applicazione ha causato un ritardo nel processo di spegnimento del sistema.
202
Questo dispositivo ha causato un ritardo nel processo di spegnimento del sistema
203
Il servizio ha causato un rallentamento nel processo di arresto del sistema
Monitoraggio delle prestazioni in standby
300
Windows ha ripreso dallo standby
301
Questa applicazione ha causato un ritardo durante lo standby
302
Questo driver ha causato un ritardo durante lo standby durante la manutenzione di un dispositivo
303
Questo servizio ha causato un ritardo durante la sospensione ibrida
304
La creazione del file hiber è stata più lenta del previsto
305
La permanenza delle cache del disco è stata più lenta del previsto
306
La preparazione del sottosistema video per la sospensione è stata più lenta del previsto
307
La preparazione di Winlogon per la sospensione era più lenta del previsto
308
La preparazione della memoria di sistema per la sospensione è stata più lenta del previsto
309
La preparazione del sistema principale per la sospensione è stata più lenta del previsto
310
La preparazione dei thread di lavoro del sistema per la sospensione è stata più lenta del previsto
350
Il tempo di inizializzazione del BIOS è stato superiore a 250 ms (requisito del logo) durante il ripristino del sistema
351
Questo driver ha risposto più lentamente del previsto alla richiesta di ripristino durante la manutenzione di questo dispositivo
352
La lettura del file hiber è stata più lenta del previsto
Monitoraggio delle prestazioni del sistema
400
Informazioni sull'evento di monitoraggio delle prestazioni del sistema
401
Questo processo utilizza il tempo del processore e influisce sulle prestazioni di Windows
402
Questo processo sta eseguendo attività eccessive del disco e ha un impatto sulle prestazioni di Windows
403
Questo driver utilizza troppe risorse e influisce sulle prestazioni di Windows
404
Questo driver attende più del previsto su un dispositivo
405
Questo file è frammentato e influisce sulle prestazioni di Windows
406
L'I/O del disco su questo file sta richiedendo più tempo del previsto
407
Questo processo utilizza troppa memoria di sistema
408
Molti processi utilizzano troppa memoria di sistema
Monitoraggio delle prestazioni del sistema
500
Il Desktop Window Manager sta riscontrando un forte conflitto di risorse
501
Il Desktop Window Manager sta riscontrando un forte conflitto di risorse


Dovendo effettuare l'analisi sulle prestazioni di avvio/spegnimento/standby/ripresa, dovremmo prestare attenzione agli eventi 1xx, 2xx e 3xx. Come visibile in tabella e in FIG 1, gli eventi 100, 200 e 300 sono eventi di base seguiti da 1xx, 2xx e 3xx che forniscono informazioni aggiuntive sul problema.

Supponiamo di voler individuare l'applicazione che rallenta l'avvio di Windows. Windows registra l'ora di avvio e i tempi di riduzione prestazioni (in millisecondi) per ogni servizio e sottosistema avviato. Grazie a questi dati, è possibile identificare potenziali problemi con i servizi che richiedono troppo tempo per essere avviati. In questo caso l'Event ID che ci interessa è il 101 e i livelli Critico/Errore (livelli 1 e 2).

PowerShell può esserci d'aiuto in tali contesti. Tramite questo semplice script, da eseguire come amministratore, vengono evidenziati tutti gli eventi con Event ID 101 e di livello 1 e 2 degli ultimi 60 giorni.
 $Days = 60  
   
 $machineName = @{  
   Name = 'Nome PC'  
   Expression = { $env:COMPUTERNAME }  
 }  
   
 $FileName = @{  
     Name = 'Nome File';  
     Expression = { $_.properties[2].value }  
 }  
   
 $Name = @{  
     Name = 'Nome';  
     Expression = { $_.properties[4].value }  
 }  
   
 $Version = @{  
     Name = 'Versione'  
     Expression = { $_.properties[6].value }  
 }  
   
 $TotalTime = @{  
     Name = 'Tempo Totale'  
     Expression = { $_.properties[7].value }  
 }  
   
 $DegradationTime = @{  
     Name = 'Tempo riduzione prestazioni'  
     Expression = { $_.properties[8].value }  
 }  
   
 Get-WinEvent -FilterHashtable @{  
   LogName='Microsoft-Windows-Diagnostics-Performance/Operational'  
   Id=101  
   StartTime = (Get-Date).AddDays(-$Days)  
   Level = 1,2  
 } |  
 Select-Object -Property $MachineName, TimeCreated, $FileName, $Name, $Version, $TotalTime, $DegradationTime, Message | Out-GridView  

Script PowerShell, Get-WinEvent
FIG 3 - Script PowerShell, Get-WinEvent