mercoledì 11 maggio 2022

Windows 10: Ripristinare l'opzione "Apri con" nel menu contestuale

La funzione "Apri con" all'interno del menu contestuale viene spesso utilizzata per aprire un file con un determinato programma (diverso da quello predefinito) o per impostare una nuova app predefinita per quel tipo di file. La procedura consiste nel cliccare, con il tasto destro del mouse, sul file per poi andare sull'opzione "Apri con" e selezionare uno dei programmi dalla lista oppure cliccare su "Scegli un'altra app" per selezionare manualmente un'app non presente in elenco.
Può capitare che la voce "Apri con" non appaia all'interno del menu contestuale. In questo caso, per ripristinarla, basta intervenire all'interno del registro di sistema:
  • Premere la combinazione di tasti WIN+per aprire la finestra di dialogo Esegui e digitare regedit seguito da invio per avviare l'Editor del Registro di sistema;
  • Posizionarsi su
    HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\Open With se la chiave non è presente, crearla manualmente
  • Modificare il valore stringa "Predefinito" inserendo nel campo Dati valore la seguente stringa e cliccare su OK
    {09799AFB-AD67-11d1-ABCD-00C04FC30936}
    Ripristinare Apri con nel menu contestuale
    FIG 1 - Ripristinare Apri con nel menu contestuale

L'opzione "Apri con" nel menu contestuale dovrebbe essere disponibile immediatamente. In caso contrario, riavviare il processo explorer.exe o disconnettersi e riconnettersi al sistema.

Per chi non volesse mettere le mani all'interno del registro di sistema, dal seguente link è possibile scaricare il file .reg per ripristinare l'opzione "Apri con" all'interno del menu contestuale.






sabato 30 aprile 2022

PowerShell: Identificazione del dominio connesso

Un modo rapido per determinare il nome del dominio a cui è connesso il sistema è WMI. Dalla finestra PowerShell eseguire:
Get-CimInstance -ClassName Win32_NTDomain

Il comando visualizza il nome del dominio a cui il sistema è connesso, il DNS Forest Name e il nome del Domain Controller. Se il sistema non è connesso ad un dominio, il risultato sarà un oggetto vuoto.
Identificazione del dominio connesso
FIG 1 - Identificazione del dominio connesso






venerdì 29 aprile 2022

PowerShell: Estrarre l'icona da un file eseguibile

Quasi la totalità dei file eseguibili contiene al suo interno un'icona che lo contraddistingue dagli altri file. Tramite PowerShell è possibile estrarre l'icona presente all'interno di un file eseguibile e salvarla in un file con estensione .ico. Per eseguire tale operazione bastano poche righe di codice:

 # Specifica la cartella dove verrà salvato il file .ico  
 $dest = "c:\Temp"  
   
 # Crea la cartella se non presente  
 mkdir $dest -ErrorAction Ignore  
   
 # Carica la classe di .NET Framework: System.Drawing   
 Add-Type -AssemblyName System.Drawing  
   
 # Estrae l'icona di regedit.exe  
 $fileExe = "$env:windir\regedit.exe"  
 $fileIco = "$dest\regedit.ico"  
 [System.Drawing.Icon]::ExtractAssociatedIcon($fileExe).ToBitmap().Save($fileIco)  
   
 # Visualizza in Esplora file la cartella contenente l'icona estratta  
 explorer $dest   

Per estrarre l'icona da un file viene utilizzata la classe .NET Framework System DrawingIl codice sopra riportato è molto semplice e i commenti aiutano a capire il suo funzionamento.





giovedì 28 aprile 2022

PowerShell: Download di file da Internet

Nell'articolo PowerShell: Visualizzare l'intestazione HTTP di un sito web è stato mostrato come, utilizzando il cmdlet Invoke-WebRequest, recuperare le informazioni contenute all'interno dell'intestazione HTTP di un sito web. 
Invoke-WebRequest, oltre a consentire di inviare richieste a servizi web, può essere utilizzato anche per comunicare con sistemi remoti e per il trasferimento di dati. Le istruzioni mostrate di seguito utilizzano il cmdlet Invoke-WebRequest per per scaricare un file da Internet (in questo caso si tratta di un'immagine) in un modo molto semplice:
 $url = 'https://images-assets.nasa.gov/image/iss066e174306/iss066e174306~orig.jpg'  
 $dest= "c:\temp\picture_iss.jpg"  
   
 Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $dest   
   
 Invoke-Item -Path $dest  

Le prime due righe permettono di specificare il percorso del file da scaricare (variabile $url) e il percorso dove salvarlo (variabile $dest).
Nella riga successiva viene eseguito il cmdlet Invoke-Webrequest a cui vengono passate le variabili $url e $dest inizializzate precedentemente. Il parametro -UseBasicParsing impedisce al cmdlet di usare il vecchio e deprecato modello di oggetto "Internet Explorer" che può causare problemi. Prima di utilizzare il codice sopra riportato è bene ricordare che Invoke-WebRequest potrebbe non funzionare con i vecchi protocolli di rete e TLS.

L'ultima riga non fa altro che aprire l'immagine scaricata con il visualizzatore predefinito.





mercoledì 27 aprile 2022

Windows: Ripristinare i criteri di Windows Firewall

Per resettare i criteri di Windows Firewall reimpostando i valori predefiniti è possibile utilizzare netsh advfirewall. Avviare il Prompt dei comandi come amministratore ed eseguire il comando
netsh advfirewall reset  
Reset policy Windows Firewall
FIG 1 - Reset policy Windows Firewall

Per eseguire il backup dei criteri correnti prima di ripristinare quelli predefiniti si utilizza il parametro export a cui va passato il nome del file in cui si intendono salvare i criteri
netsh advfirewall export "C:\BackupPolicyFirewall.wfw"

Per importare i criteri salvati da un file si utilizza il comando
netsh advfirewall import "C:\BackupPolicyFirewall.wfw"




martedì 26 aprile 2022

PowerShell: Attivare/Disattivare la funzione Posta in arrivo Evidenziata di Outlook

La funzione Posta in arrivo Evidenziata di Outlook separa la posta in arrivo in due schede: Evidenziata, contenente le email considerate più importanti, ed Altra contenente le restanti email. Non sempre questa separazione funziona correttamente e potremmo ritrovarci con email importanti spostate nella scheda Altra.

In MS Outlook per Windows, Posta in arrivo Evidenziata è disponibile solo per gli account Microsoft 365, Exchange e Outlook.com. La funzione può essere attivata/disattivata in maniera molto semplice da Outlook selezionando la cartella Posta in arrivo e cliccando sull'apposito pulsante presente nel menu Visualizza.
Posta in arrivo Evidenziata
FIG 1 - Posta in arrivo Evidenziata


L'attivazione/disattivazione di tale funzionalità in Outlook viene controllata dal valore 000b04a5 presente nel registro di sistema all'interno di una delle sotto-chiavi del profilo di posta. Il nome della sotto-chiave di registro contenente tale valore, per questioni di sicurezza, varia e va ricercata all'interno della chiave
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Outlook\Profiles\<nome_profilo_Outlook>

L'operazione può essere automatizzata con il seguente script PowerShell. Lo script va a cercare il valore 000b04a5 all'interno del profilo Outlook predefinito e chiede all'utente se disattivare/attivare la funzione. I commenti aiutano nella comprensione del codice.
 # Percorso chiavi di registro e profili relativi ad Outlook   
  $outlook = "HKCU:\Software\Microsoft\Office\16.0\Outlook"   
  # Variabili contenenti i valori binari per l'attivazione/disattivazione della funzione Posta Evidenziata   
  $Enable=([byte[]](0x01,0x00))   
  $Disable=([byte[]](0x00,0x00))   
  # Verifico il profilo outlook predefinito   
  # Verifico se è presente il valore stringa DefaulProfile   
  if ((Get-ItemProperty -Path $outlook -Name "DefaultProfile" -ErrorAction SilentlyContinue)){   
    # Recupero il valore contenuto in DefaultProfile   
    $defaultProfile = (Get-ItemProperty -Path $outlook -Name "DefaultProfile").'DefaultProfile'   
    # Se DefaulProfile è vuoto allora non è specificato un profilo outlook predefinito   
    if ($defaultProfile -ne ""){   
         $CurrentProfile = "$Outlook" + '\Profiles\'+ "$defaultProfile" + '\*'   
         # All'interno del profilo outlook predefinito ricerco il valore 000b04a5   
         $FocusValue = (Get-ItemProperty -Path $CurrentProfile -Name "000b04a5" -ErrorAction SilentlyContinue).'000b04a5'   
         # Se il valore è 1 allora la funzione Posta Evidenziata è attiva   
         If ($FocusValue -eq "1"){   
          write-host "La funzione 'Mostra posta in arrivo evidenziata' risulta attiva"   
          # Chiedo all'utente se desidera disattivare la funzione Posta Evidenziata   
          $confirmation = Read-Host "Si desidera disattivarla?[S/N]"   
          # Se l'utente risponde in maniera affermativa, la funzione viene disattivata   
          if ($confirmation -eq 's') {   
            Set-ItemProperty -Path $CurrentProfile -Name "000b04a5" -Value $Disable -ErrorAction SilentlyContinue   
            write-host "La funzione 'Mostra posta in arrivo evidenziata' e' stata disattivata"   
          }    
         }   
         else{   
          # La funzione Posta Evidenziata è disattivata   
          write-host "La funzione 'Mostra posta in arrivo evidenziata' non risulta attiva"   
          # Chiedo all'utente se desidera attivare la funzione Posta Evidenziata   
          $confirmation = Read-Host "Si desidera attivarla?[S/N]"   
          # Se l'utente risponde in maniera affermativa, la funzione viene attivata   
            if ($confirmation -eq 's') {   
            Set-ItemProperty -Path $CurrentProfile -Name "000b04a5" -Value $Enable -ErrorAction SilentlyContinue   
            write-host "La funzione 'Mostra posta in arrivo evidenziata' e' stata attivata"   
          }   
     
         }   
    }   
    # Il valore stringa DefaulProfile è vuoto   
    else{   
       write-host "Non risulta impostato alcun profilo Outlook predefinito"   
    }   
  }   
  # Il valore stringa DefaulProfile non è presente   
  else{   
    write-host "Il valore DefaulProfile non risulta presente."   
  }   

Dal seguente link è possibile scaricare lo script PowerShell




lunedì 25 aprile 2022

PowerShell: Gestire la foto dell'account utente in Active Directory utilizzando l'attributo ThumbnailPhoto

Gli account utente di Active Directory hanno un attributo speciale (thumbnailPhoto) in cui una foto può essere memorizzata come dati binari. Outlook, OWA, Skype for Business, SharePoint e altre applicazioni possono utilizzare la foto memorizzata in questo attributo AD come avatar dell'utente nella loro interfaccia.

Per assegnare una foto ad un account utente in Active Directory usando PowerShell è necessario, per prima cosa, convertire il file immagine in un array di byte, e poi usare il cmdlet Set-ADUser per impostarlo come valore dell'attributo thumbnailPhoto. Le operazioni possono essere eseguita tramite il seguente comando

Set-ADUser Giovanni.Lubrano -Replace @{thumbnailPhoto=([byte[]](Get-Content "C:\Temp\foto.jpg" -Encoding byte))}
sostituendo Giovanni.Lubrano e c:\temp\foto.jpg rispettivamente con l'account utente su cui si intende operare e il nome del file, comprensivo di percorso, del file jpg contenente la foto.
Assegnare una foto all'account utente in AD
FIG 1 - Assegnare una foto all'account utente in AD
Visualizzando le proprietà dell'account utente da Utenti e computer di Active Directory possiamo verificare, dalla scheda Editor attributi, che all'attributo thumbnailPhoto è stato assegnato un valore.
Proprietà account utente, Attributo thumbnailPhoto
FIG 2 - Proprietà account utente, Attributo thumbnailPhoto

Per eseguire l'operazione inversa, cioè salvare la foto di un account utente presente in Active Directory all'interno di un file JPG, possiamo eseguire un comando simile a
(Get-ADUser Giovanni.Lubrano -Properties thumbnailPhoto).thumbnailPhoto | Set-Content "C:\Temp\foto.jpg" -Encoding byte
Esportare la foto contenuta nell'attributo thumbnailPhoto in un file jpg
FIG 3 - Esportare la foto contenuta nell'attributo thumbnailPhoto in un file jpg


Per visualizzare tutti gli account utente dotati di foto il comando da eseguire è
Get-ADUser -Filter * -properties thumbnailPhoto | ? {$_.thumbnailPhoto} | Select Name
mentre per visualizzare gli account non dotati di foto
Get-ADUser -Filter * -properties thumbnailPhoto | ? {(-not($_.thumbnailPhoto))} | Select Name
Visualizzare gli account utente dotati di foto
FIG 4 - Visualizzare gli account utente dotati di foto


Per rimuovere la foto di un account utente resettando l'attributo thumbnailPhoto
Set-ADUser Giovanni.Lubrano  -Clear thumbnailPhoto