venerdì 15 aprile 2022

PowerShell: Visualizzare informazioni sugli account utente e i gruppi di cui sono membri

Il cmdlet Get-ADUser permette di ottenere informazioni su uno o più account utente presenti in Active Directory. Utilizzando il cmdlet Get-ADUser, è possibile ottenere il valore di qualsiasi attributo di un account utente AD, elencare gli utenti del dominio con le relative proprietà, esportare i report sugli utenti in file CSV e utilizzare vari criteri per selezionare e filtrare gli utenti del dominio. Come vedremo negli esempi, può essere utilizzato anche per individuare a quali gruppi di AD appartiene un account utente.

Sintassi

Get-ADUser
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   -Filter <String>
   [-Properties <String[]>]
   [-ResultPageSize <Int32>]
   [-ResultSetSize <Int32>]
   [-SearchBase <String>]
   [-SearchScope <ADSearchScope>]
   [-Server <String>]
   [<CommonParameters>]


Get-ADUser
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   [-Identity] <ADUser>
   [-Partition <String>]
   [-Properties <String[]>]
   [-Server <String>]
   [<CommonParameters>]


Get-ADUser
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   -LDAPFilter <String>
   [-Properties <String[]>]
   [-ResultPageSize <Int32>]
   [-ResultSetSize <Int32>]
   [-SearchBase <String>]
   [-SearchScope <ADSearchScope>]
   [-Server <String>]
   [<CommonParameters>]

Parametri

-AuthType 
Specifica il metodo di autenticazione. I valori accettati dal parametro sono:
  • Negotiate oppure 0 (default)
  • Basic oppure 1
-Credential
Specifica le credenziali dell'account utente con cui eseguire il comando. 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.

-Filter
Specifica una stringa di query che recupera gli oggetti di Active Directory. Questa stringa usa la sintassi del linguaggio delle espressioni di PowerShell (PowerShell Expression Language syntax) che fornisce un ricco supporto alla conversione di tipo per i tipi di valore ricevuti dal parametro Filter.

-Identity
Tale parametro specifica l'oggetto gruppo Active Directory su cui si desidera intervenire. Al parametro può essere passato un qualsiasi valore che identifica il gruppo in maniera univoca come:
Distinguished name
GUID (objectGUID)
Security identifier (objectSid)
Security Account Manager account name (SAMAccountName) 

-LDAPFilter
Specifica una query LDAP che viene utilizzata per filtrare gli oggetti Active Directory. 

-Partition
A tale parametro va passato il Distinguished Name (DN) di una partizione di Active Directory. Il cmdlet utilizzerà tale partizione per ricercare l'oggetto specificato dal parametro Identity.

-Properties
Specifica le proprietà dell'oggetto da recuperare. Può essere usato per recuperare le proprietà che non sono incluse nel set di default.

-ResultPageSize
Specifica il numero di oggetti da includere in una pagina per una query AD DS (Active Directory Domain Services).

-ResultSetSize
Specifica il numero massimo di oggetti da restituire per la query AD DS (Active Directory Domain Services).

-SearchBase
Specifica un percorso Active Directory all'interno del quale effettuare la ricerca.

-SearchScope
Specifica l'ambito di una ricerca Active Directory. I valori accettabili per questo parametro sono:
  • Base o 0
  • OneLevel 1
  • SubTree o 2
-Server
Permette di specificare l'istanza di Active Directory Domain Services a cui connettersi per eseguire l'operazione.


Esempi

Esempio 1
Get-ADUser -Identity Giovanni.Lubrano -Properties *
Visualizza tutte le proprietà dell'account specificato.
Proprietà account utente
FIG 1 - Proprietà account utente

Esempio 2
Get-ADUser -LDAPFilter '(!userAccountControl:1.2.840.113556.1.4.803:=2)'
Visualizza tutti gli account utente abilitati in Active Directory utilizzando un filtro LDAP.
Utenti attivi
FIG 2 - Utenti attivi

Esempio 3
Get-ADUser -Filter {Enabled -eq “False”}
Visualizza tutti gli account utente in AD non attivi.
Account utente disabilitati
FIG 3 - Account utente disabilitati

Esempio 4
Get-ADUser Giovanni.Lubrano -Property MemberOf | Select -ExpandProperty MemberOf
Visualizza i gruppi di Active Directory di cui l'utente specificato è membro.
Gruppi AD di cui l'account è membro
FIG 4 - Gruppi AD di cui l'account è membro

Esempio 5
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires
Per ogni account utente visualizza lo stato e la data dell'ultima modifica della password e l'ora dell'ultimo accesso al dominio (attributo LastLogonTimestamp). 
Informazioni sulla password account utente
FIG 5 - Informazioni sulla password account utente

Esempio 6
Get-ADUser -Filter {(mail -ne "null") -and (Enabled -eq "true")} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Format-Table
Visualizza tutti gli account utente abilitati e dotati di indirizzo email.

Esempio 7
Get-ADUser -Filter * -Properties EmailAddress | where -Property EmailAddress -eq $null
Restituisce tutti gli account utente che non dispongono di indirizzo email.

Esempio 8
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | where {$_.name –like "*Giovanni*"} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:\temp\Info-user-passwords.csv -Append -Encoding UTF8
Restituisce gli attributi Name, PasswordExpired, PasswordLastSet e PasswordNeverExpires di tutti gli account utente in cui nel nome è presente la stringa Giovanni. I risultati sono ordinati per la data di ultima modifica della password (PasswordLastSet) ed esportati nel file .CSV specificato.









lunedì 11 aprile 2022

Linux: Visualizzare l'Easter egg di Vim

Per visualizzare l'Easter egg incluso nell'editor di testo Vim:
  • Da una finestra terminale avviare l'editor digitando vim seguito da invio.
  • Digitare :smile e premere invio

VIM Easter egg
FIG 1 - VIM Easter egg





giovedì 31 marzo 2022

PowerShell: Elencare i gruppi vuoti presenti in Active Directory

Tenere sotto controllo i gruppi presenti in Active Directory è uno dei compiti dell'amministratore di sistema. In grandi infrastrutture può capitare di ritrovarsi con gruppi che erano stati creati per un'attività non più in essere e che sono rimasti senza membri. Per visualizzare i gruppi vuoti presenti in AD è possibile utilizzare il seguente comando PowerShell

Get-ADGroup -filter * | where {-Not ($_ | Get-ADGroupMember)} | Select Name

Gruppi vuoti in Active Directory
FIG 1 - Gruppi vuoti in Active Directory





mercoledì 30 marzo 2022

PowerShell: Modificare la descrizione di un computer in Active Directory

Di seguito viene mostrato un semplice script PowerShell che permette di modificare il campo Descrizione di uno specifico computer in Active Directory. L'operazione viene eseguita attraverso l'utilizzo del cmdlet Set-ADComputer.

 # Importa il modulo Active Directory  
 Import-Module ActiveDirectory  
   
 #Inserimento nome computer  
 $wks = Read-Host -Prompt 'Inserisci nome computer'  
   
 #Richiesta inserimento nuova descrizione  
 $desc = Read-Host -Prompt 'Inserisci nuova descrizione'  
   
 #Imposta la nuova descrizione  
 Set-ADComputer $wks -Description $desc  
   
 Write-Host "La descrizione del computer $wks in AD è stata modificata in: $desc" -ForegroundColor Green  
Una volta inserito il nome del computer e la descrizione desiderata, viene aggiornato il relativo campo Descrizione in Active Directory. Se il nome computer non è presente in Active Directory, verrà visualizzato un messaggio di errore.
Modifica Descrizione Computer in Active Directory
FIG 1 - Modifica Descrizione Computer in Active Directory


Descrizione computer in Active Directory
FIG 2 - Descrizione computer in Active Directory

Lo script può essere scaricato dal seguente link





martedì 29 marzo 2022

PowerShell: Aggiornare il server di stampa delle stampanti di rete configurate sul PC

A seguito sostituzione del server di stampa o alla modifica del suo nome, è necessario aggiornare la configurazione delle stampanti di rete installate su tutti i PC. L'operazione può essere eseguita tramite il seguente script.
 # Specificare il vecchio server di stampa  
 $strOLDPrintServer = "Vecchio_Server_Stampa"  
 # Specificare il nuovo server di stampa  
 $strNewPrintServer = "Nuovo_Server_Stampa"  
    
 # Verifica se lo script è già stato eseguito andando a verificare la presenza di un file  
 If (-not (Test-Path ".\$env:USERNAME-printers.txt")) {  
   Write-Host "Avvio Update dei server di stampa ..."  
      Write-Host "Stampanti di rete"  
    
   # L'operazione viene eseguita solo sulle stampanti di rete che hanno il vecchio server di stampa specificato  
     Get-WMIObject Win32_Printer | where{$_.network -eq "true" -and $_.SystemName -like "\\" + $strOLDPrintServer} | Select ShareName, Default, Name, SystemName | ForEach {  
    
                # Visualizza il nome della stampante di rete trovata ($_.ShareName) e se si tratta di stampante predefinita ($_.Default) e il server di stampa ($_.SystemName)  
                Write-Host "Nome: " $_.ShareName " Predefinita: " $_.Default " PrinterServer: " $_.SystemName  
   
                # rimuove la vecchia stampante  
                (New-Object -ComObject WScript.Network).RemovePrinterConnection($_.Name)  
                   
                # Aggiunge la nuova stampante utilizzando il nuovo server di stampa $strNewPrintServer   
                # e il nome $_.ShareName   
                $printer = [WMIClass]"\\.\root\cimv2:Win32_Printer"  
                $printer.AddPrinterConnection("\\" + $strNewPrintServer + "\" + $_.Sharename)  
                   
                # Se la vecchia stampante era predefinita allora imposta predefinita anche quella nuova  
                if($_.Default -eq $true) {  
                     $printer = Get-WmiObject Win32_Printer | ? { $_.name -like "\\" + $strNewPrintServer +"\" + $_.Sharename }  
                     $printer.SetDefaultPrinter()  
                }  
        
   }  
 }  
   
 # Crea un file di testo. La presenza del file indicherà che lo script è già stato eseguito.  
 Write-Host "Fine" | Out-File ".\$env:USERNAME-printers.txt"  

Lo script è molto semplice e i commenti aiutano la comprensione del suo funzionamento. All'interno del codice vanno specificati i nomi del vecchio e del nuovo server di stampa rispettivamente nelle variabili $strOLDPrintServer$strNewPrintServer. Lo script analizza tutte le stampanti configurate sul computer prendendo in considerazione solo le stampanti di rete che fanno riferimento al vecchio server di stampa. Tali stampanti verranno eliminate e riconfigurate utilizzando il nome del nuovo server di stampa. Nel caso di stampanti predefinite l'impostazione verrà ripristinata. Per evitare che lo script possa essere eseguito più volte, all'interno della cartella contenente il file PS1 verrà creato un file di testo. La presenza di tale file indicherà allo script che è già stato eseguito sulla postazione e non verrà eseguita alcuna ulteriore operazione.
Aggiornamento stampanti con il nuovo server di stampa
FIG 1 - Aggiornamento stampanti con il nuovo server di stampa


Dal seguente link è possibile scaricare il file PS1






lunedì 28 marzo 2022

MS Exchange: Visualizzare le impostazioni del filtro di posta indesiderata

Nell'articolo  MS Exchange: Configurare il filtro di posta indesiderata sulle caselle di posta è stato mostrato come configurare il filtro di posta indesiderate mediante l'utilizzo del cmdlet Set-MailboxJunkEmailConfiguration. In quest'articolo vedremo come visualizzare le impostazioni della posta indesiderata di una casella di posta utilizzando il cmdlet Get-MailboxJunkEmailConfiguration. Questo cmdlet è disponibile sia in Exchange on-premises che in Exchange on-cloud anche se alcuni parametri e impostazioni possono essere esclusivi di un solo ambiente.

Sintassi

Get-MailboxJunkEmailConfiguration
   [-Identity] <MailboxIdParameter>
   [-Credential <PSCredential>]
   [-DomainController <Fqdn>]
   [-ReadFromDomainController]
   [-ResultSize <Unlimited>]
   [<CommonParameters>]

Parametri

-Credential
Specifica le credenziali dell'account utente con cui eseguire il comando. 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.

-DomainController
Questo parametro è disponibile solo in Exchange on-premises.
Il parametro DomainController specifica il controller di dominio usato dal cmdlet per leggere o scrivere dati in Active Directory. Il controller di dominio viene identificato tramite FQDN:per esempio, dc01.contoso.com.

-Identity
Il parametro Identity specifica la mailbox su cui si intende operare. Si può usare qualsiasi valore che identifichi univocamente la casella di posta. Per esempio:
Nome
Alias
Distinguished name (DN)
Domain\Username
Email address
GUID
LegacyExchangeDN
SamAccountName
User ID o user principal name (UPN)

-ReadFromDomainController
Il parametro ReadFromDomainController specifica che le informazioni dovrebbero essere lette da un controller di dominio nel dominio dell'utente. Non è necessario specificare un valore con questo interruttore.

-ResultSize 
Il parametro ResultSize specifica il numero massimo di risultati da restituire. Per  restituire tutte le richieste che corrispondono alla query va passato al parametro il valore unlimited. Il valore predefinito è 1000.

Esempi

Esempio 1
Get-MailboxJunkEmailConfiguration -Identity "GLubrano"
Questo esempio restituisce la configurazione della posta indesiderata per l'utente chiamato GLubrano.
Get-MailboxJunkEmailConfiguration, Filtro posta indesiderata



Esempio 2
Get-Mailbox -ResultSize unlimited -RecipientTypeDetails UserMailbox | foreach {Get-MailboxJunkEmailConfiguration -Identity $_.UserPrincipalName} | Where {$_.Enabled -eq $false} | Format-Table -Auto Identity,Enabled
Questo esempio restituisce una lista riassuntiva di tutte le caselle di posta nell'organizzazione in cui la regola della posta indesiderata è disabilitata






sabato 26 marzo 2022

MS Exchange: Configurare il filtro di posta indesiderata sulle caselle di posta

Per configurare le impostazioni di posta indesiderata sulla caselle di posta è possibile utilizzare il cmdlet Set-MailboxJunkEmailConfiguration.
Questo cmdlet è disponibile sia per Exchange on-premises che per Exchange on-cloud anche se alcuni parametri e impostazioni sono esclusivi di uno solo dei due ambienti. Il cmdlet può essere usato solo su caselle di posta su cui l'utente ha già eseguito l'accesso mediante MS Outlook (in modalità cached) o tramite OWA, in caso contrario si riceverà un messaggio di errore. Per sopprimere questo errore è possibile utilizzare il parametro -ErrorAction SilentlyContinue.

Set-MailboxJunkEmailConfiguration può essere usato sia per attivare/disattivare la regola di posta indesiderata (una regola nascosta nella casella di posta denominata Junk E-mail Rule) sia per configurarla con l'elenco dei mittenti/destinatari attendibili e mittenti bloccati

Sintassi

Set-MailboxJunkEmailConfiguration
   [-Identity] <MailboxIdParameter>
   [-BlockedSendersAndDomains <MultiValuedProperty>]
   [-Confirm]
   [-ContactsTrusted <Boolean>]
   [-DomainController <Fqdn>]
   [-Enabled <Boolean>]
   [-IgnoreDefaultScope]
   [-TrustedListsOnly <Boolean>]
   [-TrustedRecipientsAndDomains <MultiValuedProperty>]
   [-TrustedSendersAndDomains <MultiValuedProperty>]
   [-WhatIf]
   [<CommonParameters>]


Parametri

-BlockedSendersAndDomains
Il parametro BlockedSendersAndDomains consente di specificare la lista dei mittenti bloccati; una lista di indirizzi e-mail e domini mittenti i cui messaggi vengono automaticamente spostati nella cartella Posta indesiderata

Per inserire più valori e sovrascrivere qualsiasi voce esistente, si usa la seguente sintassi: "Valore1","Valore2",..."ValoreN". 

Per aggiungere o rimuovere uno o più valori senza influenzare le voci esistenti, va usata la seguente sintassi: @{Add="Valore1", "Valore2"...; Remove="Valore3", "Valore4"...}.

-Confirm
Consente di mostrare o nascondere la richiesta di conferma. 

-ContactsTrusted
Il parametro ContactsTrusted specifica se i contatti nella cartella Contatti sono da considerare come mittenti attendibili. I valori validi sono:
  • $true: I messaggi provenienti dai contatti presenti nella cartella Contatti  non verranno mai spostati nella cartella Posta indesiderata indipendentemente dal contenuto.
  • $false: I messaggi provenienti dai contatti presenti nella cartella Contatti non saranno trattati come mittenti attendibili. L'indirizzo email  viene considerato attendibile solo se definito nell'elenco dei mittenti attendibili.

-DomainController
Questo parametro è disponibile solo in Exchange on-premises.
Il parametro DomainController specifica il controller di dominio usato dal cmdlet per leggere o scrivere dati in Active Directory. Il controller di dominio viene identificato tramite FQDN:per esempio, dc01.contoso.com.

-Enabled
Il parametro Enabled abilita o disabilita la regola della posta indesiderata sulla casella di posta elettronica. Passando al parametro il valore $True la regola viene abilitata mentre viene disabilitata passando al parametro il valore $False.

-IgnoreDefaultScope
IgnoreDefaultScope indica di usare l'intera foresta come ambito permettendo al comando di accedere agli oggetti di Active Directory che non sono disponibili nell'ambito predefinito. Il parametro introduce le seguenti restrizioni:
  • Non è possibile usare il parametro DomainController. Il comando utilizza automaticamente un server di catalogo globale appropriato.
  • Si può usare solo il DN per il parametro Identity. Altre forme di identificazione, come alias o GUID, non sono accettate.

-TrustedListsOnly
Il parametro TrustedListsOnly specifica che solo i messaggi provenienti dai mittenti presenti nella lista dei mittenti attendibili sono consegnati nella cartella Posta in arrivo. Tutti gli altri messaggi sono trattati come posta indesiderata. I valori validi sono:
  • $true: Solo i messaggi provenienti da indirizzi e-mail o domini inseriti nell'elenco Mittenti attendibili vengono consegnati alla Posta in arrivo. Tutti gli altri messaggi vengono automaticamente consegnati nella cartella Posta indesiderata.
  • $false: I messaggi provenienti da altri mittenti, destinatari e domini non vengono automaticamente trattati come posta indesiderata, e vengono valutati individualmente. Questo è il valore predefinito.

-TrustedSendersAndDomains
Il parametro TrustedSendersAndDomains consente di specificare la lista dei Mittenti attendibili e Destinatari attendibili.
Per inserire più valori e sovrascrivere qualsiasi voce esistente, si usa la seguente sintassi: "Valore1","Valore2",..."ValoreN". 

Per aggiungere o rimuovere uno o più valori senza influenzare le voci esistenti, usate la seguente sintassi: @{Add="Valore1", "Valore2"...; Remove="Valore3", "Valore4"...}.

Tutti gli indirizzi email nella lista globale degli indirizzi (GAL) sono automaticamente considerati come mittenti attendibili, quindi non è necessario aggiungerli alla lista.
Con questo cmdlet non è possibile modificare direttamente l'elenco dei destinatari attendibili. Con questo parametro viene modificato l'elenco dei Mittenti attendibili, e gli indirizzi e-mail e i domini sono sincronizzati con l'elenco Destinatari attendibili

-WhatIf
WhatIf simula le azioni del comando.


Esempi

Esempio1
Set-MailboxJunkEmailConfiguration GLubrano -Enabled $false
Disabilita la regola della posta indesiderata sulla casella di posta elettronica specificata.
Set-MailboxJunkEmailConfiguration
FIG 1 - Set-MailboxJunkEmailConfiguration



Esempio 2
Set-MailboxJunkEmailConfiguration GLUBRANO -TrustedSendersAndDomains @{Add="contoso.com","microsoft.com"} -BlockedSendersAndDomains @{Add="joker@gotham.com"}
Aggiunge i domini contoso.com e microsoft.com come Mittenti attendibili senza interferire con i domini già presenti in elenco. Aggiunge, inoltre, l'indirizzo joker@gotham.com all'elenco dei Mittenti bloccati, anche in questo caso senza andare ad interferire con gli indirizzi già presenti.

Esempio 3
Get-MailboxJunkEmailConfiguration * | Where {$_.ContactsTrusted -eq $true} | Set-MailboxJunkEmailConfiguration -ContactsTrusted $false
Il comando sopra riportato agisce su tutte le mailbox. Sulle mailbox dove i mittenti presenti nella cartella Contatti vengono considerati come Mittenti attendibili, modifica la configurazione (i Contatti non verranno più trattati come mittenti attendibili)