giovedì 24 marzo 2022

Windows 10: Abilitare l'audio mono

La maggior parte delle cuffie e degli altoparlanti al giorno d'oggi sono di tipo "Stereo". Quando una traccia registrata in stereo viene riprodotta su tali dispositivi, ai 2 canali audio (destro e sinistro) vengono inviate informazioni separate e distinte. Per alcuni scenari, come dispositivi mono o utenti con problemi di udito, può essere utile forzare la riproduzione mono. L'operazione può essere portata a termine in diversi modi:

Metodo 1:
L'audio mono può essere abilitato dalla finestra delle impostazioni dell'audio: 
  • Dalla finestra di dialogo Esegui (WIN+R) digitare ms-settings:easeofaccess-audio seguito da Invio. In alternativa possiamo accedere alla finestra andando in Impostazioni (WIN+I)->Accessibilità->Audio
  • Attivare la funzione Attiva audio mono.
    Attivazione audio mono
    FIG 1 - Attivazione audio mono


Metodo 2:
Il secondo metodo consiste nell'agire tramite il registro di sistema:
  • Avviare l'Editor del Registro di sistema (WIN+R e digitare regedit seguito da invio); 
  • Posizionarsi sulla chiave di registro
    HKEY_CURRENT_USER\Software\AccessibilityMonoMixStateMicrosoft\Multimedia\Audio
  • Creare, se non presente, un valore DWORD(32-bit) e rinominarlo in AccessibilityMonoMixState.
  • Assegnare ad AccessibilityMonoMixState il valore 1.
    Editor del Registro di sistema, AccessibilityMonoMixState
    FIG 2 - Editor del Registro di sistema, AccessibilityMonoMixState

  • Affinché la modifica diventi effettiva riavviare il servizio Audiosrv oppure eseguire un riavvio o una disconnessione/riconnessione al sistema.
Per disattivare l'audio mono rimuovere AccessibilityMonoMixState dal registro di sistema o assegnargli il valore 0 e riavviare il servizio Audiosrv.


Metodo 3:
Possiamo automatizzare la creazione del valore nel registro di sistema e il riavvio del servizio Audiosrv mediante l'utilizzo di PowerShell con il comando
powershell -windowstyle hidden -command "Start-Process cmd -ArgumentList '/s,/c,REG ADD "HKCU\Software\Microsoft\Multimedia\Audio" /V AccessibilityMonoMixState /T REG_DWORD /D 1 /F & net stop "Audiosrv" & net start "Audiosrv"' -Verb runAs"
PowerShell, Attivazione audio mono
FIG 3 - PowerShell, Attivazione audio mono
Per disattivare l'audio mono
powershell -windowstyle hidden -command "Start-Process cmd -ArgumentList '/s,/c,REG ADD "HKCU\Software\Microsoft\Multimedia\Audio" /V AccessibilityMonoMixState /T REG_DWORD /D 0 /F & net stop "Audiosrv" & net start "Audiosrv"' -Verb runAs"







mercoledì 23 marzo 2022

Windows 10: Windows Defender

Windows Defender è l'antivirus integrato nel sistema operativo di Microsoft. In quest'articolo verrà mostrato come interagire da riga di comando con Windows Defender. Se si utilizza un antivirus di terze parti, Windows Defender potrebbe essere stato disabilitato pertanto i comandi mostrati nell'articolo non funzioneranno. Avviato il prompt dei comandi come amministratore, accedere alla cartella contenente Windows Defender con il comando
cd "\Program Files\Windows Defender"


Verifica e installazione aggiornamenti
Come ogni buon antivirus, anche Windows Defender riceve periodicamente gli aggiornamenti delle definizione dei virus e del "motore" dell'antivirus. Per verificare la presenza di aggiornamenti è possibile digitare dal prompt dei comandi
MpCmdRun -SignatureUpdate
Il comando, oltre a verificare la disponibilità degli aggiornamenti provvederà anche a scaricarli ed installarli.
Update Windows Defender
FIG 1 - Update Windows Defender

Se le nuove definizioni danno problemi è possibile rimuoverle e ripristinare quelle precedenti utilizzando il comando
MpCmdRun -RemoveDefinitions -All

Allo stesso modo è possibile disinstallare il nuovo engine dell'antivirus con il comando
MpCmdRun -RemoveDefinitions -Engine


Scansione del sistema
Possiamo avviare diversi tipi di scansione a seconda delle nostre esigenze.
Per eseguire una scansione rapida
MpCmdRun -Scan -ScanType 1
Windows Defender, Scansione rapida
FIG 2 - Windows Defender, Scansione rapida


Per eseguire una scansione completa e approfondita del sistema
MpCmdRun -Scan -ScanType 2

Per avviare la scansione mirata di una particolare cartella
MpCmdRun -Scan -ScanType 3 -File path_cartella
dove al posto di path_cartella va specificato il nome della cartella compreso il percorso (ad es. c:\users\pippo\downloads)

Alcuni virus possono prendere di mira il settore di boot del disco che normalmente non è accessibile dal sistema. Un virus insediato in tale settore può infettare il sistema ad ogni avvio . Per eseguire una scansione mirata del settore di boot del disco
MpCmdRun.exe -Scan -ScanType -BootSectorScan


File in quarantena
Quando l'antivirus individua file sospetti o infetti che non riesce a bonificare, può spostarli in quarantena: uno spazio protetto dove i file infetti vengono salvati in modo da non rappresentare più una minaccia per il sistema. Tramite il seguente comando vengono visualizzati i file che sono stati spostati in quarantena
MpCmdRun -Restore -ListAll
Windows Defender, File in quarantena
FIG 3 - Windows Defender, File in quarantena

Per ripristinare tutti i file presenti dalla quarantena (operazione da eseguire con le dovute cautele)
MpCmdRun -Restore -All

Per ripristinare un particolare file dalla quarantena
MpCmdRun -Restore -Name nomefile 
dove nomefile rappresenta il nome, compreso estensione, del file presente in quarantena (ad es. game.exe).

Se vogliamo recuperare un particolare file dalla quarantena e salvarlo in uno determinato percorso
MpCmdRun -Restore -Name nomefile -FilePath destinazione 
dove al posto di destinazione va specificato il percorso in cui il file verrà ripristinato (ad es. c:\temp).





domenica 20 marzo 2022

PowerShell: Verificare il formato di un URL

In PowerShell non è necessario ricorrere alle regular expression per verificare il formato di una stringa. PowerShell, infatti, consente l'utilizzo di API e per questo tipo di operazioni è possibile utilizzare uno dei tanti metodi specializzati presenti in .NET Framework.

In quest'articolo verrà mostrato come verificare il formato di un URL. Prima però, bisogna fare un po' di chiarezza sui termini URI, URL e URN.

Un URI (Uniform Resource Identifier) è una sequenza di caratteri che identifica universalmente ed univocamente una risorsa come ad esempio un indirizzo web, un documento o il codice ISBN di un libro. Un URI può essere classificato come qualcosa che definisce posizioni (URL), nomi (URN) o entrambi:
  • URL (Uniform Resource Locator) serve per identificare univocamente la locazione di una determinata risorsa ovvero il suo indirizzo. L'URL viene prevalentemente utilizzato per indicare risorse web (HTTP o HTTPS), risorse accessibili tramite protocolli di trasferimento file (FTP), condivisione remote (SMB) e accessi a sistemi esterni (SSH). La sua semantica è data da 
    protocollo://[username:password@]host[:porta]</percorso>[?querystring][#fragment]
  • URN (Uniform Resource Name) è un URI che identifica una risorsa mediante un nome in un particolare dominio di nomi detto "Namespace". Un URN può essere utilizzato per descrivere una risorsa senza lasciare intendere la sua ubicazione o su come ottenerne una rappresentazione. Tale URN deve restare unico e persistente anche qualora la risorsa smetta di esistere o non sia più disponibile. Per esempio l'URN urn:isbn:978-0-470-53286-7 è un URI che mappa universalmente e univocamente un libro mediante il suo identificativo, o nome, (978-0-470-53286-7) nel namespace dei codici ISBN, ma non suggerisce dove e come ottenere una copia di tale libro e il nome resterà valido (non verrà assegnato ad altri libri) anche quando la risorsa non sarà più disponibile.

Per verificare se il formato di un URL è corretto utilizzando Powershell, è possibile utilizzare il metodo IsWellFormedUriString della classe URI. Il comando sarà del tipo
[Uri]::IsWellFormedUriString(uriString, uriKind)
dove uriString rappresenta la stringa dell'URL da verificare e uriKind ne specifica il tipo (assoluto o relativo). Gli URI assoluti sono caratterizzati da un riferimento completo alla risorsa (ad esempio https://www.contoso.com/index.html), mentre un URI relativo è la forma abbreviata che si limita a indicare solo la deviazione dall'URI di base (ad esempio nell'URI base https://www.contoso.com l'URI relativo è index.html). 
Il metodo restituirà True se la stringa è ben formata e False in caso contrario.

Esempio
[Uri]::IsWellFormedUriString("https://giovannilubrano.blogspot.com", [UriKind]::Absolute)
In questo esempio viene testato l'URL https://giovannilubrano.blogspot.com. Come visibile in figura, il formato dell'URL risulta corretto.
Metodo IsWellFormedUriString
FIG 1 - Metodo IsWellFormedUriString







domenica 13 marzo 2022

Windows 10: Profili risparmio energetico

In Windows 10 generalmente sono disponibili 3 profili di risparmio energetico: 
  • Bilanciato. Bilancia automaticamente le prestazioni e il consumo energetico in base alla domanda.(GUID 381b4222-f694-41f0-9685-ff5bb260df2e)
  • Risparmio di energia. Offre prestazioni ridotte che possono aumentare il risparmio di energia. (GUID a1841308-3541-4fab-bc81-f71556f20b4a)
  • Prestazioni elevate. Offre prestazioni massime a scapito di un maggiore consumo di energia. (GUID 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c)
A partire da Windows 10 1803 è disponibile un quarto profilo nominato Prestazioni eccellenti (GUID e9a42b02-d5df-448d-aa00-03f14749eb61). Solitamente questo nuovo profilo è disponibile solo sulle workstation ma, come vedremo più avanti, può essere attivato anche su altri PC e notebook. Il profilo è orientato alla riduzione delle microlatenze pertanto l'hardware viene spremuto per bene e, di conseguenza, aumentano anche i consumi energetici. 

E' possibile visualizzare/modificare il profilo di risparmio energetico dalla finestra Opzioni risparmio energia raggiungibile dal Pannello di controllo o digitando, nella finestra Esegui (WIN+R), powercfg.cpl seguito da invio.

Dal prompt dei comandi è possibile visualizzare i profili di risparmio energetico disponibili con il comando
powercfg /list
il profilo attivo è contrassegnato dal carattere *
Profili risparmio energetico
FIG 1 - Profili risparmio energetico


Se non vengono visualizzati tutti i profili è possibile ripristinarli dal prompt dei comandi:
  • Ripristina il profilo Bilanciato
    powercfg -duplicatescheme 381b4222-f694-41f0-9685-ff5bb260df2
  • Ripristina profilo Prestazioni elevate
    powercfg -duplicatescheme 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
  • Ripristina profilo Risparmio di energia
    powercfg -duplicatescheme a1841308-3541-4fab-bc81-f71556f20b4a
  • Ripristina profilo Prestazioni eccellenti
    Prima di poter ripristinare tale profilo è necessario verificare che nel registro di sistema, al percorso HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\User\PowerSchemes, sia presente la chiave e9a42b02-d5df-448d-aa00-03f14749eb61. Se la chiave è presente è possibile ripristinare il profilo con il comando
    powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61
    Se la chiave non è presente allora il profilo non è supportato dall'hardware.


Per attivare un determinato profilo di risparmio energetico basta utilizzare il comando powercfg /SetActive seguito dal GUID del profilo da attivare
  • Attiva il profilo Bilanciato 
    powercfg /SetActive 381b4222-f694-41f0-9685-ff5bb260df2
  • Attiva il profilo Prestazioni elevate
    powercfg /SetActive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
  • Attiva il profilo Risparmio di energia
    powercfg /SetActive a1841308-3541-4fab-bc81-f71556f20b4a
  • Attiva il profilo Prestazioni eccellenti
    powercfg /SetActive e9a42b02-d5df-448d-aa00-03f14749eb61






lunedì 28 febbraio 2022

PowerShell: Abilitare un account disabilitato in AD

Nell'articolo PowerShell: Disabilitare un account in AD è stato mostrato come disabilitare un account in Active Directory mediante l'utilizzo del cmdlet Disable-ADAccount. In quest'articolo vedremo l'operazione opposta: come abilitare un account disabilitato. L'abilitazione viene effettuata mediante l'utilizzo del cmdlet Enable-ADAccount che consente di abilitare un account utente, computer o servizio di Active Directory.

Sintassi

Enable-ADAccount
      [-WhatIf]
      [-Confirm]
      [-AuthType <ADAuthType>]
      [-Credential <PSCredential>]
      [-Identity] <ADAccount>
      [-Partition <String>]
      [-PassThru]
      [-Server <String>]
      [<CommonParameters>]

Parametri

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

-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.

-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) 

-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.

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

-Server
Permette di specificare l'istanza di Active Directory Domain Services a cui connettersi per eseguire l'operazione.

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


Esempi

Esempio 1
Enable-ADAccount -Identity Giovanni.Lubrano
Questo comando abilita l'account con identità SAMAccountName Giovanni.Lubrano
Abilita account in AD
FIG 1 - Abilita account in AD


Esempio 2
Enable-ADAccount -Identity "CN=Giovanni Lubrano Lavadera,OU=Utenti,OU=Direzione,DC=mycompany,DC=local"
Abilita l'account con DistinguishedName "CN=Giovanni Lubrano Lavadera,OU=Utenti,OU=Direzione,DC=mycompany,DC=local"

Esempio 3
Get-ADUser -Filter 'Name -like "*"' -SearchBase "OU=Utenti,OU=Direzione,DC=mycompany,DC=local" | Enable-ADAccount
Questo comando abilita tutti gli account nell'unità organizzativa "OU=Utenti,OU=Direzione,DC=mycompany,DC=local".








PowerShell: Disabilitare un account in AD

In questo articolo tratteremo il cmdlet Disable-ADAccount utilizzato disabilitare un account utente, computer o servizio di Active Directory.

Sintassi

Disable-ADAccount
       [-WhatIf]
       [-Confirm]
       [-AuthType <ADAuthType>]
       [-Credential <PSCredential>]
       [-Identity] <ADAccount>
       [-Partition <String>]
       [-PassThru]
       [-Server <String>]
       [<CommonParameters>]

Parametri

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

-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.

-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) 

-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.

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

-Server
Permette di specificare l'istanza di Active Directory Domain Services a cui connettersi per eseguire l'operazione.

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


Esempi

Esempio 1
Disable-ADAccount -Identity Giovanni.Lubrano
Questo comando disabilita l'account con identità SAMAccountName Giovanni.Lubrano
Disabilita account
FIG 1 - Disabilita account

Esempio 2
Disable-ADAccount -Identity "CN=Giovanni Lubrano Lavadera,OU=Utenti,OU=Direzione,DC=mycompany,DC=local"
Disabilita l'account con DistinguishedName "CN=Giovanni Lubrano Lavadera,OU=Utenti,OU=Direzione,DC=mycompany,DC=local"

Esempio 3
Get-ADUser -Filter 'Name -like "*"' -SearchBase "OU=Utenti,OU=Direzione,DC=mycompany,DC=local" | Disable-ADAccount
Questo comando disabilita tutti gli account nell'unità organizzativa "OU=Utenti,OU=Direzione,DC=mycompany,DC=local".

Account disabilitato
FIG 2 - Account disabilitato





martedì 22 febbraio 2022

PowerShell: Modificare la descrizione del computer

Nei sistemi operativi Windows è possibile aggiungere una descrizione al computer. Eseguendo il comando
Control sysdm.cpl
verrà visualizzata la finestra di dialogo Proprietà del sistema dove sarà possibile visualizzare e modificare la descrizione del computer.
Descrizione computer
FIG 1 - Descrizione computer


Nel seguente script, viene mostrato come modificare il campo Descrizione computer da PowerShell e mediante l'utilizzo della classe Win32_OperatingSystem di WMI. Lo script va lanciato in una finestra PowerShell eseguita come amministratore

 #Modifica la Descrizione del computer (Richiede privilegi di amministratore)  
 #Richiede all'utente di inserire la nuova descrizione  
 $desc = Read-Host -Prompt 'Inserisci nuova descrizione'   
   
 $values = @{  
   Description = $desc  
 }  
 #Imposta la nuova descrizione  
 Set-CimInstance -Query 'Select * from Win32_OperatingSystem' -Property $values  
   
 #legge la nuova descrizione  
 $description = Get-CimInstance -ClassName Win32_OperatingSystem |   
  Select-Object -ExpandProperty Description  
   
 #Visualizza la nuova descrizione settata  
 Write-Host "Descrizione computer: $description" -ForegroundColor Green  
Script PowerShell Descrizione computer
FIG 2 - Script PowerShell Descrizione computer

Dal seguente link è possibile scaricare il file PS1