lunedì 1 aprile 2019

PowerShell: Visualizzare gli hotfix installati sul pc locale o su un pc remoto

Con il termine hotfix si intende un singolo pacchetto cumulativo, composto da uno o più file, che include delle informazioni per risolvere un bug o un problema di sicurezza in un determinato prodotto software. Un hotfix, dunque, non è altro che una sorta di aggiornamento rapido rilasciato per rimediare ad un problema software il più velocemente possibile. Per visualizzare gli hotfix installati localmente o su un computer remoto è possibile utilizzare il cmdlet Get-HotFix.

Il cmdlet consente di visualizzare tutti gli hotfix/aggiornamenti installati sul computer locale o su computer remoti tramite Windows Update, Microsoft Update, Windows Server Update Service oppure aggiornamenti installati manualmente dagli utenti.


Sintassi


Get-HotFix [[-Id] <String[]>] [-Description <String[]>] [-ComputerName <String[]>] [-Credential <PSCredential>] [<CommonParameters>]




Parametri


-ComputerName
Il parametro consente di indicare un computer remoto. Se il parametro non viene specificato, il cmdlet agisce sul computer locale. Al parametro può essere passato il nome NetBIOS, l'indirizzo IP oppure il FQDN (Fully Qualified Domain Name).

-Credential
Per default il cmdlet viene eseguito con le credenziali dell'account che lancia il comando. Attraverso il parametro -Credential è possibile specificare un'account diverso.

-Description
Consente di ricercare un hotfix in base a una o più parole contenute nella sua descrizione. Sono consentiti caratteri Wildcards. 

-ID
In alternativa al parametro -Description, consente di ricercare un hotfix tramite il proprio ID. Il parametro non consente caratteri Wildcards. Se i parametri -Description e -ID non vengono specificati, la ricerca restituirà tutti gli hotfix.



Esempi


Esempio 1
Get-HotFix
Restituisce tutti gli hotfix/aggiornamenti installati sul computer locale.
PowerShell, Get-HotFix
FIG 1 - PowerShell, Get-HotFix

Esempio 2
Get-HotFix -Description "Security*" -ComputerName "Server01", "Server02"
Visualizza tutti gli hotfix la cui descrizione inizia con la parola Security installati sui server Server01 e Server02.

Esempio 3
Get-Content "ElencoWKS.txt" | ForEach { if (!(Get-HotFix -Id "KB4489899" -ComputerName $_)) { Add-Content $_ -Path "WKS-senza-KB4489899.txt" }}
Per ogni computer elencato all'interno del file ElencoWKS.txt viene verificato se ha installato aggiornamento KB4489899 e, in caso negativo, il nome della postazione viene aggiunto all'elenco contenuto nel file WKS-senza-KB4489899.txt.

Esempio 4
(Get-HotFix | sort installedon)[-1]
Il comando restituisce l'ultimo aggiornamento installato sul computer locale: ordina tutti gli hotfix per data di installazione quindi seleziona dall'array l'ultimo item (l'hotfix più recente).

Esempio 5
Get-Hotfix | Where-Object { $_.HotfixID -like "KB448*" } | Sort-Object InstalledOn
Restituisce tutti gli hotfix che hanno l'ID che inizia per KB448 ordinandoli per data di installazione.
PowerShell, Get-HotFix ricerca di una KB tra gli aggiornamenti installati
FIG 2 - PowerShell, Get-HotFix ricerca di una KB tra gli aggiornamenti installati





venerdì 29 marzo 2019

MS Exchange: Visualizzare i permessi di una cartella presente sulla mailbox tramite EMS

Chi gestisce un'infrastruttura di posta elettronica può trovarsi spesso nella situazione di dover verificare permessi assegnati ad una particolare cartella presente in una mailbox. In ambiente MS Exchange Server tale operazione può essere eseguita con l'ausilio del cmdlet Get-MailboxFolderPermission tramite EMS (Exchange Management Shell).

Get-MailboxFolderPermission  [-Identity] <MailboxFolderIdParameter> [-DomainController <Fqdn>]   [-User <MailboxFolderUserIdParameter>]    [-GroupMailbox]   [<CommonParameters>]


Parametri

-DomainController
Il parametro consente di specificare il Domain Controller a cui far riferimento per reperire dati dall'Active Directory. Il dominio va specificato nel formato FQDN (Fully Qualified Domain Name) ad es. dc02.contoso.com

-GroupMailbox
Il parametro è utilizzato per includere nei risultati i gruppi di Office 365.

-Identity
Tale parametro specifica la mailbox e la cartella su cui si intendono verificare le abilitazioni. La sintassi è del tipo  <Mailbox>:\<Folder>. Per <Mailbox> può essere specificato un qualsiasi valore che identifica la mailbox in maniera univoca come:
GUID
Distinguished name (DN)
Dominio\Account
Nome dell'entità utente
LegacyExchangeDN
SamAccountName
Indirizzo SMTP
Alias 

-User
Il parametro User filtra i risultati visualizzando solo le abilitazioni dell'utente indicato. Anche in questo caso è possibile utilizzare qualsiasi valore che permetta l'identificazione univoca dell'utente/gruppo come:
Nome
Display name
Alias
Distinguished name (DN)
Canonical DN
Indirizzo email
GUID




Esempi


Esempio 1
Get-MailboxFolderPermission  -identity GLUBRANO
Per visualizzare i permessi sulla root della mailbox.


Esempio 2
Get-MailboxFolderPermission  -identity GLUBRANO:\Calendario
o per maggiori dettagli
Get-MailboxFolderPermission  -identity GLUBRANO:\Calendario |FL
Visualizza i permessi sulla cartella Calendario della casella dell'utente GLUBRANO
Get-MailboxFolderPermission
FIG 1 - Get-MailboxFolderPermission

Esempio 3
Get-MailboxFolderPermission  -identity GLUBRANO:\Calendario -User DDUCK
Visualizza i permessi che l'utente DDUCK dispone sulla cartella Calendario presente nella mailbox dell'utente GLUBRANO.




mercoledì 27 marzo 2019

PowerShell: Disabilitare il risparmio energetico sulle schede di rete

Quando il PC entra in modalità sospensione/ibernazione, Windows disabilita tutte le periferiche non necessarie per risparmiare energia comprese le schede di rete. Tale comportamento può causare malfunzionamenti quando si riprende la sessione di lavoro: ad es. la scheda di rete potrebbe non riattivarsi.
Una soluzione a questo tipo di problemi consiste nell'impedire al sistema operativo di spegnere le schede di rete per risparmiare energia. 


Disabilitare il risparmio energetico sulla scheda di rete tramite GUI

  • Premere la combinazione di tasti WIN+R per aprire la finestra di dialogo Esegui e digitare devmgmt.msc seguito da invio per avviare Gestione dispositivi;

    Gestione dispositivi
    FIG 1 - Gestione dispositivi
  • Espandere la sezione Schede di rete ed eseguire un doppio click sulla scheda di rete su cui si intende disabilitare il risparmio energetico;
  • Nella finestra delle Proprietà, selezionare la scheda Risparmio energia quindi rimuovere la spunta alla voce Consenti al computer di spegnere il dispositivo per risparmiare energia e confermare cliccando sul pulsante OK.
    Proprietà scheda di rete
    FIG 2 - Proprietà scheda di rete



Disabilitare il risparmio energetico sulle schede di rete tramite PowerShell


Nello script PowerShell andremo a verificare le proprietà delle schede di rete presenti nel registro di sistema al seguente percorso
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}
All'interno delle sottochiavi del registro andremo a verificare la proprietà *ifType per individuare le schede di rete Wi-Fi (con *ifType=6) e le schede di rete Ethernet (con *ifType=71). Per tali schede il risparmio energetico verrà disattivato valorizzando la proprietà PnPCapabilities a 18 in esadecimale (24 in decimale).
Lo script, oltre a visualizzare l'output a video, genera un file di log DisablePowerSavingNIC.log che è possibile consultare successivamente anche dopo aver chiuso la finestra di PowerShell.
Script DisablePowerSavingNIC.ps1
FIG 3 - Script DisablePowerSavingNIC.ps1
Lo script può essere scaricato dal seguente link
DOWNLOAD

Terminata l'esecuzione, l'output sarà simile a quello mostrato in FIG 4 ed è necessario procedere al riavvio del sistema affinché le modifiche siano applicate.
Output script PowerShell DisablePowerSavingNIC.ps1
FIG 4 - Output script PowerShell DisablePowerSavingNIC.ps1




domenica 24 marzo 2019

MS Office 365 for Business: Riparare Office da riga di comando tramite OfficeClickToRun

Per riparare l'installazione di MS Office 365 è possibile procedere tramite Programmi e funzionalità (appwiz.cpl) di Windows oppure tramite riga di comando utilizzando OfficeClickToRun.


Ripristino Office 365
FIG 1 - Ripristino Office 365

Il percorso di OfficeClickToRun.exe può variare in base alla versione di Office 365/Windows utilizzata e il comando da lanciare per procedere ad una riparazione rapida sarà simile al seguente:
"%ProgramFiles%\Common Files\Microsoft Shared\ClickToRun\OfficeClickToRun.exe" scenario=Repair platform=x86 culture=it-it forceappshutdown=True RepairType=QuickRepair DisplayLevel=False

Ovviamente i parametri da passare a OfficeClickToRun vanno personalizzati in base alle proprie esigenze e configurazione. Di seguito un dettaglio sui parametri utilizzabili e i possibili valori:

Parametro Valori Note
scenario Repair Indica che si intende procedere alla riparazione di Office.
Parametro Necessario
platform x86
x64
Specifica la versione di Office che si intende riparare.
x86 per la versione a 32 bit
x64 per la versione a 64 bit
Parametro Necessario
culture ll-cc Specifica la lingua della versione di Office installata. Se sono installate più lingue basta specificarne solo una.
Per la versione inglese di Office il valore sarà en-us per quella in italiano il valore da indicare è it-it.
Parametro Necessario
forceappshutdown True
False
Se impostato su True verranno chiuse tutte le applicazioni Office prima che venga avviata la riparazione. Se le applicazioni Office sono aperte e il parametro non è specificato o settato su False, allora la riparazione fallirà.
Parametro Opzionale
RepairType QuickRepair
FullRepair
Permette di specificare se si intende procedere con un Ripristino Rapido (QuickRepair) o con il Ripristino online (FullRepair).
Con il Ripristino online tutte le applicazioni Office saranno reinstallate e verranno sovrascritte tutte le impostazioni fatte nel file configuration.xml.
Parametro Opzionale
DisplayLevel True
False
Se impostato su True verranno visualizzate le finestre relative al ripristino. Impostando tale parametro su False il ripristino avverrà in maniera silente .
Parametro Opzionale





lunedì 18 marzo 2019

PowerShell: Montare\Smontare un'immagine ISO

Per immagine ISO si intende una copia bit-per-bit del file system di un disco ottico. Il nome deriva da ISO 9660, il file system standard dei CD-ROM tuttavia un'immagine ISO può contenere anche il file system UDF (ISO/IEC 13346) comunemente utilizzato nei dischi DVD e Blu-Ray.
Windows 10 facilita enormemente la gestione dei file ISO senza l'utilizzo di tool esterni. Per aprire un file ISO basta fare un doppio clic sul file oppure, in alternativa, cliccarci su con il tasto destro del mouse e selezionare Monta dal menu contestuale: Windows creerà un'unità ottica virtuale assegnandole la prima lettera di unità libera e permettendo la navigazione del contenuto dell'immagine ISO tramite Esplora file.
Windows 10, Montare un'immagine ISO
FIG 1 - Windows 10, Montare un'immagine ISO
Per eliminare l'unità virtuale e smontare l'immagine basta cliccare con il tasto destro del mouse sull'unità in Esplora file e selezionare Espelli dal menu contestuale.


In PowerShell è possibile montare\smontare un'immagine ISO utilizzando i cmdlet Mount-DiskImageDismount-DiskImage.
Per montare un'immagine ISO tramite PowerShell
Mount-DiskImage -ImagePath "C:\kali-linux-2019.1a-amd64.iso"
PowerShell, Montare un'immagine ISO
FIG 2 - PowerShell, Montare un'immagine ISO

Per smontare un'immagine ISO da PowerShell
Dismount-DiskImage -ImagePath "C:\kali-linux-2019.1a-amd64.iso"
PowerShell, Smontare un'immagine ISO
FIG 3 - PowerShell, Smontare un'immagine ISO
oppure, utilizzando il device path
Dismount-DiskImage -DevicePath \\.\CDROM1





giovedì 14 marzo 2019

PowerShell: Creare un documento MS Excel contenente i risultati dei ping ad un elenco di postazioni

Potremmo trovarci nella situazione in cui ci viene richiesto di controllare se diverse postazioni siano connesse in rete. Il modo più semplice per eseguire tale controllo consiste nel verificare se le postazioni rispondono al ping. In questo articolo mostrerò come raggiungere tale obiettivo con uno script PowerShell che, dato un elenco di postazioni contenuto in un file di testo, provvede ad eseguire il ping e a memorizzare i risultati all'interno di un documento MS Excel.
Lo script può essere scaricato dal seguente link
DOWNLOAD
Script PowerShell PingHost2Excel
FIG 1 - Script PowerShell PingHost2Excel

La prima istruzione consiste nell'assegnare alla variabile $path il nome del file, comprensivo di percorso, contenente l'elenco delle workstation da verificare. Il contenuto del file sarà simile a quello mostrato in FIG 2: ogni riga contiene il nome della postazione da verificare.
Elenco Workstation da verificare
FIG 2 - Elenco Workstation da verificare

Successivamente con Test-Path verifichiamo se il file è presente, in caso contrario terminiamo lo script visualizzando il messaggio di file non trovato
$path = ".\ElencoWKS.txt"
if (Test-Path $path) 

Se il file contenente l'elenco delle workstation viene trovato procediamo alla creazione di un nuovo documento MS Excel e a posizionarci sul primo foglio di lavoro. 
$objExcel = new-object -comobject excel.application 

$objWorkbook = $objExcel.Workbooks.Add() 
$objWorksheet = $objWorkbook.Worksheets.Item(1)

Con la seguente istruzione facciamo in modo che il documento MS Excel sia visibile a video durante la compilazione.
$objExcel.Visible = $True

La prima riga del foglio di lavoro la utilizziamo come intestazione assegnando un nome a ciascuna colonna in base al contenuto che andremo successivamente ad inserire.
$objWorksheet.Cells.Item(1, 1) = "Nome Host"
$objWorksheet.Cells.Item(1, 2) = "Ping"
$objWorksheet.Cells.Item(1, 3) = "Indirizzo IP"


Nella variabile $wks andiamo a caricare l'elenco delle postazioni da analizzare. La variabile $row viene inizializzata a 2 (nella prima riga del foglio di lavoro abbiamo inserito l'intestazione) e verrà utilizzata per spostarci alla riga successiva man mano che verranno analizzate/inserite le workstation in elenco.
$wks= gc $path
$row=2

La parte più importante dello script è rappresentata dal ciclo foreach-object: per ogni postazione presente in elenco provvede ad inserire, all'interno del file MS Excel, il nome della postazione, l'esito del ping (OK se andato a buon fine o KO nel caso in cui non si riceve risposta) e l'eventuale indirizzo IP della postazione.
$wks| foreach-object{
 $ping=$null
 $workstation = $_
 $ping = Test-Connection $workstation -Count 1 -ea silentlycontinue
 $objWorksheet.Cells.Item($row,1) = $workstation
 
 if($ping){
  $objWorksheet.Cells.Item($row,2) = "OK"
  $objWorksheet.Cells.Item($row,3) = $ping.IPV4Address.IPAddressToString   
 }
 else {
  $objWorksheet.Cells.Item($row,2) = "KO"
  $objWorksheet.Cells.Item($row,3) = "-"
 }
  
 $row++
}


Foglio MS Excel con i risultati della verifica
FIG 3 - Foglio MS Excel con i risultati della verifica




martedì 12 marzo 2019

PowerShell: Installazione/Disinstallazione di OpenSSH Client/Server in Windows 10

OpenSSH (Open Secure Shell) è un'insieme di strumenti utilizzato per connessioni da remoto cifrate tramite il protocollo SSH. Tutto il traffico viene cifrato consentendo una comunicazione sicura e immune da intercettazioni, dirottamenti e altri tipi di attacchi.

Microsoft ha integrato, come funzionalità facoltative, OpenSSH Client e OpenSSH Server all'interno del proprio sistema operativo. Le due funzionalità possono essere installate separatamente in Windows Server 2019 e Windows 10 1809 sia tramite interfaccia grafica (GUI) sia tramite PowerShell.


Installazione di OpenSSH Client/Server tramite GUI

  • Avviare l'app Impostazioni (WIN+I) quindi cliccare su App;
    Windows 10, Impostazioni
    FIG 1 - Windows 10, Impostazioni
  • Nella sezione App e funzionalità cliccare sul link Gestisci funzionalità facoltative;
    Windows 10, App e funzionalità
    FIG 2 - Windows 10, App e funzionalità
  • Cliccare su Aggiungi una funzionalità;
    Windows 10, Aggiungi una funzionalità
    FIG 3 - Windows 10, Aggiungi una funzionalità
  • Selezionare la funzionalità che si intende installare e cliccare sul pulsante Installa per procedere con l'installazione.
    Windows 10, Installa una nuova funzionalità
    FIG 4 - Windows 10, Installa una nuova funzionalità



Disinstallazione di OpenSSH Client/Server tramite GUI

I passaggi sono analoghi a quanto visto per l'installazione.
  • Avviare l'app Impostazioni (WIN+I) quindi cliccare su App;
  • Nella sezione App e funzionalità cliccare sul link Gestisci funzionalità facoltative;
  • Dall'elenco delle funzionalità installate selezionare quella che si intende disinstallare e cliccare sul pulsante Disinstalla per procedere con la rimozione.

    Windows 10, Disinstallazione funzionalità aggiuntive
    FIG 5 - Windows 10, Disinstallazione funzionalità aggiuntive



Installazione di OpenSSH Client/Server tramite PowerShell

  • Per accertarsi che le funzionalità OpenSSH siano disponibili per l'installazione utilizzare il comando
    Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
    PowerShell, Get-WindowsCapability
    FIG 6 - PowerShell, Get-WindowsCapability
  • Per installare il Client OpenSSH eseguire
    Add-WindowsCapability -Online -Name OpenSSH.Client*
  • Per installare il Server OpenSSH eseguire
    Add-WindowsCapability -Online -Name OpenSSH.Server*
    PowerShell, Add-WindowsCapability per installare nuove funzionalità
    FIG 7 - PowerShell, Add-WindowsCapability per installare nuove funzionalità
Terminata l'installazione sarà possibile utilizzare dal prompt dei comandi o da PowerShell i seguenti comandi SSH:
ssh.exe
scp.exe
sftp.exe
ssh-add.exe
ssh-agent.exe
ssh-keygen.exe
ssh-keyscan.exe

Gli eseguibili sopra riportarti si trovano all'interno della cartella
C:\Windows\System32\OpenSSH\ 
mentre i file di SSH relativi ai nomi host noti, alle chiavi generate ecc. si trovano nel seguente percorso
%USERPROFILE%\.ssh\ 





Disinstallazione OpenSSH Client/Server tramite PowerShell

La disinstallazione di OpenSSH Client/Server può essere eseguita tramite il cmdlet Remove-WindowsCapability 
  • Per disinstallare il client OpenSSH da PowerShell eseguire
    Remove-WindowsCapability -Online -Name OpenSSH.Client*
  • Per disinstallare il server OpenSSH  eseguire
    Remove-WindowsCapability -Online -Name OpenSSH.Server*




Configurazione iniziale di OpenSSH Server

Per eseguire la configurazione iniziale di OpenSSH Server, lanciare una sessione PowerShell come amministratore ed eseguire i seguenti comandi
  • Avviare il servizio sshd con il comando
    Start-Service sshd
  • Impostare l'avvio Automatico del servizio eseguendo
    Set-Service -Name sshd -StartupType 'Automatic'
  • Durante l'installazione di OpenSSH Server viene creata e abilitata una regola sul firewall (OpenSSH-Server-In-TCP) per consentire le connessioni in SSH in ingresso. Verificare la presenza della regola sul firewall con il comando
    Get-NetFirewallRule -Name *ssh*
PowerShell, Configurazione iniziale di OpenSSH Server
FIG 8 - PowerShell, Configurazione iniziale di OpenSSH Server



Connessione al server SSH

Sulle postazioni dove è installato il client OpenSSH è possibile connettersi al server eseguendo il comando
ssh username@servername

Al primo accesso al server verrà mostrato un messaggio come quello in FIG 9.
PowerShell, Connessione al server OpenSSH
FIG 9 - PowerShell, Connessione al server OpenSSH

Rispondendo yes si prosegue con la connessione e verrà richiesto l'inserimento della password di accesso.

A connessione avvenuta il server verrà aggiunto all'elenco locale degli host noti e  verrà mostrato un prompt del tipo
domain\username@SERVERNAME C:\Users\username>