lunedì 11 luglio 2016

PowerShell: Eseguire comandi presenti nella cronologia tramite Invoke-History

Il cmdlet Invoke-History consente di eseguire i comandi presenti nella cronologia dei comandi della sessione PowerShell.
Se eseguito senza alcun parametro, Invoke-History riesegue l'ultimo comando lanciato.
Invoke-History

Con Get-History possiamo visualizzare l'elenco dei comandi presenti nella cronologia con relativo ID. L'ID può essere passato al cmdlet Invoke-History in modo che venga eseguito quello specifico comando. Ad es.
Invoke-History -ID 3
esegue il comando avente ID 3.

Al parametro ID può essere passato anche parte del comando presente in cronologia che si intende eseguire. Ad es.
Invoke-History -ID Get-Pr
esegue l'ultimo comando che inizia per "Get-Pr" (come Get-Process, Get-PrinterDriver, ecc) presente in cronologia.
PowerShell, Invoke-History
FIG 1 - PowerShell, Invoke-History

Per eseguire più comandi possiamo utilizzare Invoke-History insieme al cmdlet Get-History. Ad es.
Get-History -ID 10 -Count 3 | Invoke-History
esegue i comandi memorizzati nella cronologia aventi come ID 8,9 e 10.




venerdì 8 luglio 2016

PowerShell: Visualizzare l'elenco dei comandi eseguiti con Get-History

Per visualizzare la cronologia della sessione PowerShell corrente, ovvero l'elenco degli ultimi comandi eseguiti, viene utilizzato il cmdlet Get-History. L'output del cmdlet mostra l'ID e il comando eseguito.


Get-History, visualizzare la cronologia dei comandi
FIG 1 - Get-History, visualizzare la cronologia dei comandi

Il numero di elementi memorizzati di default varia a seconda della versione PowerShell (64 in PowerShell 2.0, 4096 in Powershell 3.0 e successivi) e può essere modificato tramite la variabile $MaximumHistoryCount.
Per conoscere il valore di tale variabile e di conseguenza il numero di comandi memorizzati, si può utilizzare il comando:
Get-Variable  MaximumHistoryCount

Per modificare il numero di comandi memorizzati, invece, basta assegnare il valore voluto alla variabile $MaximumHistoryCount ad es.
$MaximumHistoryCount = 200
Get-Variable MaximumHistoryCount
FIG 2 - Get-Variable MaximumHistoryCount


I parametri utilizzabili con il cmdlet Get-History sono: ID e Count

ID
Specifica il numero ID di un comando presente nella cronologia. Se specificato con Get-History viene visualizzato solo il comando specificato:
Get-History -ID 2
visualizza solo il comando avente come ID 2
Get-History -ID
FIG 3 - Get-History -ID

Count
Visualizza il numero specificato di elementi più recenti presenti all'interno della cronologia:
Get-History -Count 3
visualizza gli ultimi 3 elementi della cronologia
Get-History -Count
FIG 4 - Get-History -Count

I parametri ID e Count se utilizzati insieme visualizzano n elementi specificati da Count fino all'elemento specificato da ID. Ad es.
Supponiamo che la cronologia contenga 18 elementi, lanciando il seguente comando
GetHistory -ID 10 -Count 3
otteniamo in output 3 comandi presenti nella cronologia di cui l'ultimo ha ID 10 (i comandi in output vanno da ID 8 a ID 10 come mostrato in FIG 5).
GetHistory con le opzioni ID e Count
FIG 5 - GetHistory con le opzioni ID e Count

giovedì 7 luglio 2016

Windows 10: Ripristinare l'App Microsoft Edge

Per ripristinare Microsoft Edge e relative impostazioni di default:
  • Eliminare la cartella
    %userprofile%\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe


    Eliminare la cartella Microsoft.MicrosoftEdge_8wekyb3d8bbwe
    FIG 1 - Eliminare la cartella Microsoft.MicrosoftEdge_8wekyb3d8bbwe
  • Avviare PowerShell come amministratore ed eseguire il comando 
    get-AppXPackage -AllUsers -Name Microsoft.MicrosoftEdge | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml" -Verbose}
    Ripristino Microsoft Edge
    FIG 2 - Ripristino Microsoft Edge
  • Riavviare il sistema.

ATTENZIONE! Tutti i dati e le personalizzazione in Microsoft Edge verranno eliminati.




mercoledì 6 luglio 2016

Windows Quick Tip: Limitare i tempi di utilizzo del sistema da parte di un account tramite Net User

Per attivare una restrizione sui tempi di accesso e utilizzo del sistema da parte di un account è possibile agire tramite il prompt dei comandi.

Avviare il prompt dei comandi come amministratore (In Windows 8 e 10 premere la combinazione di tasti WIN+X e dal menu selezionare la voce Prompt dei comandi (amministratore) )
Prompt dei comandi (amministratore)
FIG 1 - Prompt dei comandi (amministratore)

Il comando da utilizzare per limitare il tempo di utilizzo del sistema da parte di un account ha la seguente sintassi:
net user <account_utente> /time:<intervallo-giorni>,<intervallo-ore>

Al posto di <account_utente> è necessario specificare l'account che si vuole limitare, <intervallo-giorni> e <intervallo-ore> rappresentano l'intervallo temporale in cui l'account è autorizzato ad accedere e ad utilizzare il sistema. I giorni della settimana vanno specificati con le lettere D, L, Ma, Me, G, V, S. Vediamo alcuni esempi.
Net User <account_utente> /time:<Intervallo-giorni>,<intervallo-ore>
FIG 2 - Net User <account_utente> /time:<Intervallo-giorni>,<intervallo-ore>

Per limitare l'accesso all'account Virtual2 dal Lunedì al Venerdì e dalle ore 7 alle ore 21
Net User Virtual2 /time:L-V,7-21
oppure
Net User Virtual2 /time:L-V,7am-9pm

Se all'intervallo vogliamo aggiungere anche Sabato e Domenica basta aggiungere il nuovo intervallo separandolo dal precedente con un punto e virgola
Net User Virtual2 /time:L-V,7-21; S-D,8-14

Per rimuovere la restrizione
Net User Virtual2 /time:all

Attenzione! Nel caso in cui dopo lo switch /time non venga specificato alcun intervallo, all'utente specificato sarà inibito sempre l'accesso al sistema.

La limitazione può essere impostata solo per gli utenti standard e non per gli account amministratore.

Per verificare se un account ha limitazioni temporali è possibile usare il comando
Net User <account_utente>
Ad es.
Net User Virtual2

Net User <account_utente>
FIG 3 - Net User <account_utente>

martedì 5 luglio 2016

PowerShell: Disabilitare/Abilitare una connessione di rete

Nell'articolo PowerShell: Visualizzare le proprietà delle schede di rete tramite Get-NetAdapter ho mostrato come recuperare le informazioni delle connessioni di rete tramite PowerShell. In questo articolo, invece, mostrerò come è possibile disabilitare e riabilitare una connessione di rete utilizzando i cmdlet Disable-NetAdapter e Enable-NetAdapter.
Per entrambi i cmdlet è necessario eseguire PowerShell come amministratore in caso contrario si riceverà un messaggio di errore di Accesso Negato.


Disable-NetAdapter

Disable-NetAdapter consente di disabilitare la connessione di rete specificata. Ad es.
Disable-NetAdapter -Name "Wi-Fi"
Al parametro Name va passato il nome della connessione di rete da disabilitare. Il parametro accetta anche i caratteri wildcard consentendo di specificare parte del nome della connessione.
Disable-NetAdapter -Name "Wi*"
oppure
Disable-NetAdapter -Name "W*Fi"
Prima che il comando venga eseguito viene visualizzata la richiesta di conferma (FIG 1).


Disable-NetAdapter, richiesta di conferma
FIG 1 - Disable-NetAdapter, richiesta di conferma


Per fare in modo che il comando venga eseguito senza che venga richiesta la conferma, è possibile utilizzare il parametro -Confirm passando il valore false:
Disable-NetAdapter -Name "Wi-Fi" –Confirm:$false

Una volta eseguito il comando, andando a verificare lo stato della connessione tramite Get-NetAdapter, noteremo che la connessione specificata è nello stato disabilitata (disabled). Anche in Gestione Dispositivi del sistema operativo, la scheda di rete risulterà disabilitata.
Get-NetAdapter, connessione di rete disabilitata
FIG 2 - Get-NetAdapter, connessione di rete disabilitata


Disable-NetAdapter consente anche di disabilitare una connessione di rete presente su una postazione/sessione remota, basta utilizzare il parametro -CimSession e specificare il nome della postazione. Ad es.
Disable-NetAdapter -Name "Wi-Fi" -CimSession computer1 -Confirm:$false
dove computer1 è il nome della postazione remota

Enable-NetAdapter

Enable-NetAdapter consente di abilitare una connessione di rete disabilitata e il suo utilizzo è del tutto analogo a quello visto con Disable-NetAdapter.

Per abilitare una connessione di rete
Enable-NetAdapter -Name "Wi-Fi"
Enable-NetAdapter -Name "Wi*"
oppure
Enable-NetAdapter -Name "W*Fi"

Per abilitare una connessione di rete senza che venga richiesto di confermare l'operazione
Enable-NetAdapter -Name "Wi-Fi" –Confirm:$false

Enable-NetAdapter, abilitare connessione di rete
FIG 3 - Enable-NetAdapter, abilitare connessione di rete

Per abilitare la connessione di rete su una sessione/postazione remota
Enable-NetAdapter -Name "Wi-Fi" -CimSession computer1 -Confirm:$false
dove computer1 rappresenta il nome della postazione o della sessione remota.


giovedì 30 giugno 2016

PowerShell: Visualizzare le proprietà delle schede di rete tramite Get-NetAdapter

Il cmdlet Get-NetAdapter consente di visualizzare le proprietà delle schede di rete. Lanciando il cmdlet da PowerShell visualizziamo le schede di rete visibili e alcune delle loro proprietà (FIG 1)
PowerShell cmdlet Get-NetAdapter
FIG 1 - PowerShell cmdlet Get-NetAdapter
Name: Rappresenta il nome assegnato alle Connessioni di rete.
InterfaceDescription: Descrizione dell'interfaccia. Generalmente contiene il modello/produttore della scheda.
ifIndex: Interface Index. Sulle workstation la proprietà ifIndex è rappresentata da un numero che identifica in modo univoco l'interfaccia di rete fisica o logica (non possono esserci due interfacce con lo stesso ifIndex).
Status: E' lo stato dell'interfaccia è indica se la connessione è attiva (UP), disconnessa (Disconnected) o disabilitata (Disabled).
MACAddress: Media Access Control. Si tratta dell'indirizzo fisico della scheda.
LinkSpeed: Rappresenta la massima velocità della connessione.

Per formattare l'output possiamo utilizzare i comandi Format come Format-List (abbreviato FL)
Get-NetAdapter |fl
Con questo tipo di formattazione vengono visualizzate ulteriori proprietà come DriverInformation che visualizza la versione del driver della scheda.
PowerShell cmdlet Get-NetAdapter |fl
FIG 2 - PowerShell cmdlet Get-NetAdapter |fl

Utilizzando Format-Custom (abbreviato FC) vengono visualizzate tutte le proprietà (comprese quelle non valorizzate) dell'interfaccia.
Get-NetAdapter |fc

Di seguito riporto alcuni esempi che possono essere utili in diverse occasioni.

Esempio 1
Get-NetAdapter -CimSession <nome_sessione/computer_remoto>
Con -CimSession possiamo specificare una sessione o un computer remoto e visualizzarne le proprietà delle schede di rete.

Esempio 2
Get-NetAdapter | Format-List -Property Name, InterfaceDescription, InterfaceName
Con Format-List -Property possiamo visualizzare solo le proprietà che ci interessano specificandole all'interno del comando. Nell'esempio viene richiesto di visualizzare solo le proprietà Name, InterfaceDescription e InterfaceName.
PowerShell cmdlet Get-NetAdapter |fl - Property
FIG 3 - PowerShell cmdlet Get-NetAdapter |fl - Property

Esempio 3
Get-NetAdapter -IncludeHidden
Per default vengono visualizzate solo le schede di rete visibili. Con l'opzione -IncludeHidden verrano visualizzate anche quelle non visibili/logiche.
PowerShell cmdlet Get-NetAdapter -IncludeHidden
FIG 4 - PowerShell cmdlet Get-NetAdapter -IncludeHidden

Esempio 4
Get-NetAdapter -Physical
Visualizza solo le schede di rete fisiche.

Esempio 5
Get-NetAdapter -Name "Ethernet"
Visualizza solo le proprietà della connessione di rete avente come nome quello specificato (Ethernet). É possibile utilizzare anche caratteri wildcard come nel seguente comando
Get-NetAdapter -Name "Eth*"
oppure
Get-NetAdapter -Name "E*t"
PowerShell cmdlet Get-NetAdapter -Name "Eth*"
FIG 5 - PowerShell cmdlet Get-NetAdapter -Name "Eth*"

Esempio 6
Get-NetAdapter | Format-Table –View Driver
Visualizza tutte le schede di rete visibili con tutte le proprietà relative ai driver
PowerShell cmdlet Get-NetAdapter | Format-Table –View Driver
FIG 6 - PowerShell cmdlet Get-NetAdapter | Format-Table –View Driver



mercoledì 29 giugno 2016

Ransomware ApocalypseVM: Recupero dei file

Circola una nuova variante del ransomware Apocalypse: ApocalypseVM. Al fine di rendere difficile il reverse engineering del malware da parte degli esperti di sicurezza, gli sviluppatori hanno provveduto a proteggerlo tramite l'utilizzo di VMProtect (un utility di compressione che provvede ad offuscare il codice contenuto nel file). Questa nuova variante del ransomware aggiunge ai file cifrati l'estensione .encrypted e .locked e, per ogni file cifrato, provvede alla creazione di un file di testo del tipo [filename].How_To_Get_Back.txt contenente le informazioni per il pagamento del riscatto. Anche per questa variante del ransomware Fabian Wosar di Emsisoft ha creato un tool per il recupero dei file cifrati. Il tool Emsisoft Decrypter for ApocalypseVM può essere scaricato dal seguente link:
DOWNLOAD

Per recuperare i propri dati basta trascinare la versione cifrata e quella non cifrata di un file (di almeno 4096 byte) sul file eseguibile del tool al fine di generare la chiave privata.
Una finestra di dialogo mostrerà la chiave privata recuperata e, cliccando su OK, verrà visualizzata una nuova schermata che consentirà di decriptare i dati tramite il pulsante Decrypt. Al termine dell'operazione, nella scheda Results, verranno visualizzati i risultati.


Emsisoft Decrypter for ApocalypseVM
FIG 1 - Emsisoft Decrypter for ApocalypseVM