mercoledì 20 aprile 2022

PowerShell: Aprire la finestra di dialogo per l'arresto del sistema di Windows

Per richiamare, tramite PowerShell, la finestra di dialogo "Fine della sessione di lavoro" per l'arresto del sistema è possibile utilizzare il seguente comando
(New-Object -ComObject Shell.Application).ShutdownWindows()

PowerShell, Fine della sessione di lavoro
FIG 1 - PowerShell, Fine della sessione di lavoro

Finestra di dialogo Fine della sessione di lavoro
FIG 2 - Finestra di dialogo Fine della sessione di lavoro





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