venerdì 11 febbraio 2022

Windows 10: Tracciare gli accessi al FileSystem

In questo articolo verrà mostrato come tracciare gli accessi al FileSystem sul PC riprendendo quanto già visto negli articoli Windows 10: Visualizzare i tentativi di accesso al sistemaWindows 10: Verificare operazioni eseguite sugli account e cancellazione registri eventi  e Windows 10: Visualizzare i processi eseguiti da un utente sul PC.
Prima di procedere bisogna attivare l'audit (si veda l'articolo Windows 10: Attivazione audit) e, dato il numero elevato di eventi da tracciare, incrementare le dimensioni del registro eventi come indicato nell'articolo Windows 10: Aumentare la dimensione dei registri eventi.

Attivare l'audit su una cartella

Supponiamo di voler tracciare le operazioni che vengono eseguite su una cartella, ad es. C:\Test:
  • Cliccare, con il tasto destro del mouse, sulla cartella e selezionare, dal menu contestuale, la voce Proprietà.
  • Selezionare la scheda Sicurezza quindi cliccare su Avanzate.
    Proprietà cartella
    FIG 1 - Proprietà cartella

  • Selezionare la scheda Controllo quindi cliccare su Continua.
    Impostazioni avanzate di sicurezza
    FIG 2 - Impostazioni avanzate di sicurezza

  • A questo punto la finestra apparirà come in FIG 3 e saremo pronti a configurare l'audit sulla cartella. Windows consente di tracciare le operazioni eseguite da un singolo utente o da tutti gli utenti appartenenti ad un determinato gruppo. In questo articolo andremo a monitorare tutte le operazioni eseguite dagli utenti che appartengono ai gruppi Users e Administrators. Cliccare sul pulsante Aggiungi.
    Impostazioni avanzate di sicurezza, Voci di controllo
    FIG 3 - Impostazioni avanzate di sicurezza, Voci di controllo

  • Cliccare sul link Seleziona un'entità.
    Voci di controllo
    FIG 3 - Voci di controllo

  • Nella casella Immettere il nome dell'oggetto da selezionare, digitare users, cliccare sul pulsante Controlla nomi quindi confermare la scelta cliccando su OK.
    Seleziona Utente o Gruppo
    FIG 4 - Seleziona Utente o Gruppo

  • Una volta tornati alla finestra per l’impostazione dell’audit, selezionare la caselle di controllo relative alle attività che si intendono monitorare (Lettura ed esecuzione, Visualizzazione contenuto cartella, Lettura, Scrittura) e cliccare su OK per ritornare alla finestra principale dell'audit.
    Voci di controllo, Autorizzazioni di base
    FIG 5 - Voci di controllo, Autorizzazioni di base

  • Ripetere le stesse operazioni per il gruppo Administrators.
  • Ci ritroveremo in una situazione analoga a quella mostrata in FIG 6. Cliccare su OK per confermare le operazioni e chiudere la finestra Proprietà.
    Impostazioni avanzate di sicurezza
    FIG 6 - Impostazioni avanzate di sicurezza




Verifica operazioni eseguite su file o cartella (Evento ID 4656)

Per generare qualche evento da analizzare, eseguire qualche operazione all'interno della cartella come la creazione di un nuovo file di testo e la copia ed esecuzione di un file batch.
  • Avviare il Visualizzatore eventi (WIN+R e digitare eventvwr.msc seguito da invio).
  • Nel riquadro sinistro espandere Registri di Windows e selezionare il registro Sicurezza. Cliccare su Filtro registro corrente.
    Visualizzatore eventi
    FIG 7 - Visualizzatore eventi

  • L'evento che ci interessa è quello con ID 4656: È stato richiesto l'handle di un oggetto. L'evento viene generato ogniqualvolta un utente prova ad accedere a una risorsa (come un file oppure una directory) sottoposta ad audit. Nella casella contrassegnata dall'etichetta <Tutti gli ID evento> digitare l'ID 4656 e cliccare su OK.
    Filtro registro corrente
    FIG 8 - Filtro registro corrente

  • Se il numero dei risultati è elevato possiamo affinare ulteriormente la ricerca. Cliccare sul tasto Trova presente sul pannello destro della finestra. Inserire, nell'apposita casella, il nome della cartella (C:\Test) che si desidera controllare e cliccare su OK.
    Registro eventi, Trova
    FIG 9 - Registro eventi, Trova

  • L'evento contiene diverse informazioni suddivise per sezioni:
    Soggetto. Contiene informazioni relative all'utente che ha provato ad eseguire l'accesso. Tra i dati forniti in questa sezione troviamo ID Sicurezza, Nome Account, Dominio Account e l'ID accesso, un identificativo numerico che non viene ripetuto fino al successivo riavvio della macchina e che identifica la sessione di logon dell'utente consentendo di ricostruirne l'attività.
    Oggetto. Identifica l'oggetto del tentativo di accesso. In questa sezione vengono illustrati i campi Server dell'oggetto, il Tipo di oggetto, il Nome oggetto e il campo ID handle, un valore numerico che, come il campo ID accesso, non è ripetibile fino al successivo riavvio del sistema e che può essere utilizzato per ricostruire tutte le attività eseguite sull'oggetto nel corso di una sessione di lavoro.
    Informazioni sul processo. Identifica il processo/programma che ha effettuato, per conto dell'utente, l'accesso alla risorsa sotto audit. Viene indicato il Nome processo e l'ID processo.
    Informazioni di richiesta di accesso. In questa sezione vengono fornite informazioni aggiuntive sulla richiesta d'accesso tra cui l'ID transazione e il campo Accessi in cui vengono mostrati i permessi richiesti.
    Proprietà evento
    FIG 10 - Proprietà evento


Dalle proprietà dell'evento mostrato in FIG 11 si evince che il file c:\test\Nuovo documento di testo.txt è stato eliminato, attraverso il processo explorer.exe, dall'utente Virtual.
Evento ID 4656, File eliminato
FIG 11 - Evento ID 4656, File eliminato


L'evento mostrato in FIG 12 indica che il file batch C:\Test\fileBatch.bat è stato letto dal processo cmd.exe eseguito su richiesta dell'utente Virtual.
Evento ID 4656, File batch
FIG 12 - Evento ID 4656, File batch


Ricerca degli eventi tramite PowerShell

Vediamo come ricercare gli eventi all'interno del registro utilizzando PowerShell. Prendiamo come esempio l'evento mostrato in FIG 13 relativo ad un operazione eseguita all'interno della cartella C:\Test. L'evento ha come Handle ID 0x2fc8
Evento ID 4656, handle ID 0x2fc8
FIG 13 - Evento ID 4656, handle ID 0x2fc8

Possiamo effetture la ricera per l'Handle ID tramite il comando PowerShell
Get-WinEvent -FilterHashtable @{LogName='Security';data='0x2fc8'}| Format-List
PowerShell, Ricerca evento tramite Handle ID
FIG 14 - PowerShell, Ricerca evento tramite Handle ID

Ricostruire tutte le attività compiute su un oggetto o da un determinato utente  nell’ambito di una sessione di lavoro è complesso e leggere i risultati delle interrogazioni effettuate tramite PowerShell non è l'ideale.


Ricercare gli eventi tramite XPath

Per ricercare maggiori informazioni possiamo eseguire una query in formato XPath:
  • Da Visualizzatore eventi cliccare su Filtro registro corrente e nella casella <Tutti gli ID evento> digitare nuovamente l'ID 4656
  • Spostarsi sulla scheda XML. Verrà visualizzata la query XPath con i criteri di filtro inseriti. Per modificare la query manualmente selezionare la casella Modifica query manualmente e rispondere affermativamente alla successiva finestra di dialogo.
  • Modificare il contenuto della query come indicato di seguito sostituendo a 0x2c30 l'handle ID da ricercare.
    <QueryList>
      <Query Id="0" Path="Security">
        <Select Path="Security">*[System[(EventID>0)]]and *[EventData[Data[@Name='HandleId']='0x2c30']]
        </Select>
      </Query>
    </QueryList>
  • Cliccando su OK verrà eseguita la query con le condizioni specificate.
    Query XPath
    FIG 15 - Query XPath
  • Dai risultati della query notiamo, oltre all'evento con ID 4656, anche nuovi eventi non osservati in precedenza con i seguenti ID:
    4663 "Tentativo di accedere a un oggetto." che viene generato quando il processo o gli utenti individuati dall'evento ID 4656 accedono all'oggetto.
    4658 "L' handle di un oggetto è stato chiuso." che viene generato quando il processo o gli utenti individuati dall'evento ID 4656 hanno terminato di utilizzare l'oggetto.
    Risultato query XPath
    FIG 16 - Risultato query XPath

  • Per verificare le operazioni eseguite dall'utente possiamo modificare la query come indicato di seguito (sostituendo Virtual con il nome dell'utente da verificare)
    <QueryList>
      <Query Id="0" Path="Security">
        <Select Path="Security">*[System[(EventID>0)]]and *[EventData[Data[@Name='SubjectUserName']='Virtual']]
    	</Select>
      </Query>
    </QueryList>
  • Se vogliamo focalizzare la nostra attenzione sull'utente e sulle operazioni eseguite mediante Esplora file possiamo affinare la query in questo modo
    <QueryList>
      <Query Id="0" Path="Security">
        <Select Path="Security">*[System[(EventID>0)]]and*[EventData[Data[@Name='SubjectUserName']='Virtual']]and
    	*[EventData[Data[@Name='ProcessName']='C:\Windows\explorer.exe']]
    	</Select>
      </Query>
    </QueryList>
  • Per visualizzare le operazioni eseguite da un particolare utente su un determinato file utilizzando Esplora file, la query da utilizzare sarà simile alla seguente
    <QueryList>
      <Query Id="0" Path="Security">
    	<Select Path="Security">
    	*[System[(EventID>0)]]and*[EventData[Data[@Name='SubjectUserName']='Virtual']]and
    	*[EventData[Data[@Name='ProcessName']='C:\Windows\explorer.exe']]and
    	*[EventData[Data[@Name='ObjectName']='C:\Test\FilePassword.txt']]
    	</Select>
      </Query>
    </QueryList>





giovedì 10 febbraio 2022

PowerShell: Visualizzare l'intestazione HTTP di un sito web

Quando si naviga su un sito web il browser riceve diverse meta informazioni all'interno dell'intestazione HTTP che normalmente non vengono visualizzate all'utente. 
Per visualizzare le informazioni dell'intestazione HTTP di un sito web è possibile utilizzare il cmdlet PowerShell Invoke-WebRequest e passare al parametro -Method il valore "Head" per ottenere le informazioni dell'intestazione invece del contenuto della pagina web. Il codice da utilizzare sarà simile a questo
 # In URL inserire il sito di cui si intende visualizzare l'header HTTP  
 $url = 'www.google.com'  
 (Invoke-WebRequest -Method Head -Uri $url -UseBasicParsing).RawContent  

L'output sarà simile a quello mostrato in FIG 1.
Header HTTP
FIG 1 - Header HTTP

Le informazioni contenute nelle intestazioni HTTP restituite dalle pagine web possono variare di molto. Nell'intestazione sono presenti istruzioni inviate al browser ed è possibile verificare se la pagina web istruisce il browser ad impostare nuovi cookie.

Per visualizzare le informazioni in forma tabellare basta sostituire semplicemente RawContent con Headers all'interno del comando.
 # In URL inserire il sito di cui si intende visualizzare l'header HTTP  
 $url = 'www.google.com'  
 (Invoke-WebRequest -Method Head -Uri $url -UseBasicParsing).Headers  
L'output, in questo caso, sarà simile a come mostrato in FIG 2.
Header HTTP in formato tabella
FIG 2 - Header HTTP in formato tabella






mercoledì 9 febbraio 2022

Kali Linux: Installare TeamViewer

TeamViewer è una delle piattaforme per l'accesso ed il supporto remoto più note e utilizzate. In questo breve tutorial verrà mostrato come installarlo su Kali Linux.

Per l'installazione è possibile scaricare manualmente il pacchetto Debian (.deb) dal sito www.teamviewer.com oppure, come vedremo di seguito, installarlo tramite il repository APT di TeamViewer dopo averlo aggiunto a Kali Linux. 

Il primo passo consiste nell'aggiungere il repository di TemaViewer a Kali Linux e per farlo basta eseguire il seguente comando da Terminale
echo "deb http://linux.teamviewer.com/deb stable main" | sudo tee /etc/apt/sources.list.d/teamviewer.list

Aggiornare l'elenco dei pacchetti con il comando
sudo apt update
Configurazione repository TeamViewer e aggiornamento elenco pacchetti
FIG 1 - Configurazione repository TeamViewer e aggiornamento elenco pacchetti


Installare la chiave GPG di TeamViewer
sudo apt -y install gpg ca-certificates
wget -O - https://download.teamviewer.com/download/linux/signature/TeamViewer2017.asc | sudo apt-key add -
Chiave GPG
FIG 2 - Chiave GPG


Lanciare l'installazione di TeamViewer
sudo apt update
sudo apt install teamviewer
Avvio installazione TeamViewer
FIG 3 - Avvio installazione TeamViewer

Ricercare TeamViewer utilizzando l'apposita funzione di Desktop Launcher e avviarlo oppure eseguire il comando teamviewer da Terminale
Avvio TeamViewer
FIG 4 - Avvio TeamViewer

Accettare l'EULA e cliccare su Continue.
EULA
FIG 5 - EULA

Ci ritroveremo dinanzi ad una finestra come quella mostrata in FIG 6.
TeamViewer
FIG 6 - TeamViewer








lunedì 7 febbraio 2022

PowerShell: Elencare le unità di rete con Get-PSDrive

Ci sono diversi modi per avere un elenco di unità di rete mappate sul sistema; uno di questi prevede l'utilizzo del cmdlet Get-PSDrive di PowerShell. Tramite il comando mostrato di seguito andiamo a verificare se la root di destinazione inizia con "\\" che indica un percorso di rete UNC
Get-PSDrive -PSProvider FileSystem | Where-Object DisplayRoot -like '\\*'

Get-PSDrive
FIG 1 - Get-PSDrive



domenica 6 febbraio 2022

PowerShell: Download di file con BITS

BITS (Background Intelligent Transfer System) è un componente di Windows utilizzato dal sistema operativo per il download degli aggiornamenti. Tale componente è utilizzabile anche da programmatori e amministratori di sistema per il download/upload di file di grandi dimensioni su server web HTTP o REST e su file server SMB. BITS sfrutta la banda non utilizzata per trasferire dati preservando la reattività di altre applicazioni di rete inoltre, gestisce eventuali interruzioni di rete mettendo in pausa e riprendendo automaticamente i trasferimenti anche dopo un riavvio ed è in grado di operare anche quando la macchina non è loggata. BITS non funziona con tutti i download ma è necessario che anche il server supporti tale tecnologia.
Per sfruttare le potenzialità di BITS attraverso PowerShell, si utilizza il cmdlet Start-BitsTransfer.

Sintassi

Start-BitsTransfer
     [-Asynchronous]
     [-Dynamic]
     [-CustomHeadersWriteOnly]
     [-Authentication <String>]
     [-Credential <PSCredential>]
     [-Description <String>]
     [-HttpMethod <String>]
     [[-Destination] <String[]>]
     [-DisplayName <String>]
     [-Priority <String>]
     [-TransferPolicy <CostStates>]
     [-ACLFlags <ACLFlagValue>]
     [-SecurityFlags <SecurityFlagValue>]
     [-UseStoredCredential <AuthenticationTargetValue>]
     [-ProxyAuthentication <String>]
     [-ProxyBypass <String[]>]
     [-ProxyCredential <PSCredential>]
     [-ProxyList <Uri[]>]
     [-ProxyUsage <String>]
     [-RetryInterval <Int32>]
     [-RetryTimeout <Int32>]
     [-MaxDownloadTime <Int32>]
     [-Source] <String[]>
     [-Suspended]
     [-TransferType <String>]
     [-CustomHeaders <String[]>]
     [-NotifyFlags <NotifyFlagValue>]
     [-NotifyCmdLine <String[]>]
     [-CertStoreLocation <CertStoreLocationValue>]
     [-CertStoreName <String>]
     [-CertHash <Byte[]>]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]

Descrizione

Il cmdlet Start-BitsTransfer crea un job Background Intelligent Transfer Service (BITS) per trasferire uno o più file tra un computer client e un server. Il parametro TransferType specifica la direzione del trasferimento. Per impostazione predefinita, dopo che il cmdlet inizia il trasferimento, il prompt dei comandi non è disponibile fino a quando il trasferimento non sarà completo o si verifica un errore. Se lo stato dell'oggetto BitsJob restituito è Error, il codice di errore e la descrizione sono contenuti nell'oggetto e possono essere utilizzati per l'analisi.

Parametri

-ACLFlags
Specifica il proprietario e le informazioni dell'elenco di controllo degli accessi (ACL) da mantenere per il job di trasferimento. É possibile specificare uno o più dei seguenti valori:
  • o: Copia le informazioni sul proprietario con il file.
  • g: Copia le informazioni sul gruppo con il file.
  • d: Copia le informazioni sulla lista di controllo degli accessi discrezionali (DACL) con il file.
  • s: Copia le informazioni dell'elenco di controllo dell'accesso al sistema (SACL) con il file.

-Asynchronous
Indica che il cmdlet crea ed elabora il job di trasferimento BITS in background. Il prompt dei comandi riappare immediatamente dopo la creazione del lavoro di trasferimento BITS. L'oggetto BitsJob restituito può essere utilizzato per monitorare lo stato e il progresso del trasferimento.

-Authentication
Specifica il meccanismo di autenticazione da utilizzare sul server. I valori accettati per questo parametro sono:
  • Basic: è uno schema in cui il nome utente e la password sono inviati in chiaro al server o al proxy.
  • Digest: è uno schema  challenge-response  che usa una stringa di dati specificata dal server per la challenge.
  • Ntlm: NT LAN Manager (NTLM) è uno schema challenge-response che usa le credenziali dell'utente per l'autenticazione in un ambiente di rete basato su Windows.
  • Negotiate (l'impostazione predefinita): è uno schema challenge-response che negozia con il server o il proxy per determinare quale schema usare per l'autenticazione. Per esempio, questo valore di parametro permette la negoziazione per determinare se viene usato il protocollo Kerberos o NTLM.
  • Passport: Passport è un servizio di autenticazione centralizzato fornito da Microsoft che offre un unico accesso per i siti membri.

-CertHash
Specifica un hash SHA1 che identifica il certificato.

-CertStoreLocation
Specifica la location da usare per cercare il certificato. I valori validi sono:
  • CURRENT_USER
  • LOCAL_MACHINE
  • CURRENT_SERVICE
  • SERVICES
  • USERS
  • CURRENT_USER_GROUP_POLICY
  • LOCAL_MACHINE_GROUP_POLICY
  • LOCAL_MACHINE_ENTERPRISE

-CertStoreName
Specifica il nome dello store di certificati. I valori validi sono:
  • CA: Certification Authority certificates
  • MY: Personal certificates
  • ROOT: Root certificates
  • SPC: Software Publisher Certificate

-Confirm
Chiede conferma prima di eseguire il cmdlet.

-Credential
Specifica le credenziali da usare per autenticare l'utente al server indicato nel valore del parametro Source. L'impostazione predefinita è l'utente corrente.

-CustomHeaders
Specifica una o più intestazioni HTTP personalizzate da includere nella richiesta al server. Specifica un array di stringhe.

-CustomHeadersWriteOnly
Indica che le intestazioni personalizzate HTTP per questo job sono in sola scrittura.
Questo parametro viene utilizzato quando le intestazioni personalizzate includono informazioni di sicurezza. Altri programmi sullo stesso computer non possono leggere l'intestazione. Il processo BITS può leggere le intestazioni e inviarle attraverso la connessione HTTP. 
Dopo aver impostato le intestazioni in solo scrittura per un job non sarà possibile modificarle.

-Description
Permette di specificare una descrizione del job di trasferimento BITS. La descrizione è limitata a 1.024 caratteri.

-Destination
Specifica un array che contiene la posizione di destinazione e i nomi dei file che si intende trasferire. I nomi di destinazione sono accoppiati con i corrispondenti nomi di file sorgente. Per esempio, il primo nome di file specificato nel parametro Source corrisponde al primo nome di file nel parametro Destination, e il secondo nome di file nel parametro Source corrisponde al secondo nome di file nel parametro Destination. I parametri Source e Destination devono avere lo stesso numero di elementi, altrimenti il comando produce un errore.

-DisplayName
Specifica un nome di visualizzazione per il job di trasferimento BITS. Il nome visualizzato fornisce un modo semplice per differenziare i trasferimenti BITS.

-Dynamic
Indica che il trasferimento utilizza l'impostazione dinamica.

-HttpMethod
Specifica un metodo per il trasferimento diverso dal metodo predefinito GET. Se si specifica GET, il parametro non ha effetto.
Se si specifica un metodo, il job prende la priorità in primo piano, che non può essere cambiata.

-MaxDownloadTime
Specifica il tempo massimo, in secondi, per il trasferimento dei file in un lavoro. Il valore predefinito è 7.776.000 secondi o 90 giorni.

-NotifyCmdLine
Specifica un programma da eseguire dopo che il job termina o fallisce con un errore. Il programma viene eseguito nel contesto dell'utente che esegue questa cmdlet.
Specifica il nome del programma ed eventuali parametri come un array di stringhe.

-NotifyFlags
Specifica il tipo di notifica dell'evento che vuoi ricevere, come gli eventi di trasferimento del lavoro. I valori validi sono:
1: Genera un evento quando tutti i file del job sono stati trasferiti.
2: Genera un evento quando si verifica un errore.
4: Disabilita le notifiche.

-Priority
Imposta la priorità del job di trasferimento BITS, che influenza l'uso della larghezza di banda. I valori accettati per questo parametro sono:
  • Foreground (predefinito): Il trasferimento viene gestito in primo piano. I trasferimenti in primo piano competono per la larghezza di banda della rete con altre applicazioni, il che può ostacolare l'esperienza complessiva della rete dell'utente. Tuttavia, se il cmdlet Start-BitsTransfer viene utilizzato in modo interattivo, questa è probabilmente l'opzione migliore. Questo è il livello di priorità più alto.
  • High: Il trasferimento avviene in background con un'alta priorità. I trasferimenti in background utilizzano la larghezza di banda di rete inattiva del computer client per trasferire i file.
  • Normal: Il trasferimento avviene in background con una priorità normale. I trasferimenti in background utilizzano la larghezza di banda di rete inattiva del computer client per trasferire i file.
  • Low: Il trasferimento avviene in background con una priorità bassa. I trasferimenti in background usano la larghezza di banda di rete inattiva del client per trasferire i file. Questo è il livello di priorità in background più basso.
-ProxyAuthentication
Specifica il meccanismo di autenticazione da usare al proxy web. I valori accettati per questo parametro sono:
  • Basic: Basic è uno schema in cui il nome utente e la password sono inviati in chiaro al server o al proxy.
  • Digest: Digest è uno schema challenge che usa una stringa di dati specificata dal server per la challenge.
  • Ntlm: NTLM è uno schema challenge-response che usa le credenziali dell'utente per l'autenticazione in un ambiente di rete basato su Windows.
  • Negotiate (l'impostazione predefinita): Negotiate è uno schema challenge-response che negozia con il server o il proxy per determinare quale schema usare per l'autenticazione. Per esempio, questo valore di parametro permette la negoziazione per determinare se viene usato il protocollo Kerberos o NTLM.
  • Passport: Passport è un servizio di autenticazione centralizzato fornito da Microsoft che offre un unico accesso per i siti membri.

-ProxyBypass
Specifica una lista di nomi di host da usare per una connessione diretta. Gli host nell'elenco vengono provati in ordine fino a quando non si ottiene una connessione di successo. Se si specifica questo parametro il cmdlet bypassa il proxy. Se questo parametro viene utilizzato, il parametro ProxyUsage deve essere impostato su Override, altrimenti si verificherà un errore.

-ProxyCredential
Specifica le credenziali da utilizzare per autenticare l'utente al proxy. Con il cmdlet Get-Credential è possibile creare un valore per questo parametro.

-ProxyList
Specifica una lista di proxy da utilizzare. I proxy nell'elenco vengono provati in ordine fino a quando non si ottiene una connessione di successo. Se questo parametro è specificato e ProxyUsage è impostato su un valore diverso da Override, la cmdlet genera un errore.

-ProxyUsage
Specifica le impostazioni di utilizzo del proxy. I valori accettati per questo parametro sono:
  • SystemDefault (il valore predefinito): Usa le impostazioni proxy predefinite del sistema.
  • NoProxy: Non usare un proxy per trasferire i file. Utilizzare questa opzione quando si trasferiscono file all'interno di una rete locale (LAN).
  • AutoDetect: Rileva automaticamente le impostazioni proxy. Il BITS rileva le impostazioni proxy per ogni file nel lavoro.
  • Sovrascrivi: Specifica i proxy o i server da usare. Se viene specificato anche il parametro ProxyList, vengono utilizzati i proxy di quella lista. Se viene specificato anche il parametro ProxyBypass, vengono utilizzati i server di quella lista. In entrambi i casi, viene utilizzato il primo membro della lista. Se il primo membro non è raggiungibile, vengono provati i membri successivi fino a quando un membro viene contattato con successo.

-RetryInterval
Specifica la lunghezza minima di tempo, in secondi, che il BITS attende prima di un ulteriore tentativo di trasferimento dopo un errore. Il valore minimo consentito è 60 secondi. Se questo valore supera il valore RetryTimeout dell'oggetto BitsJob, il BITS non ritenta il trasferimento ma imposta lo stato Error.
Il valore predefinito è 600 secondi (10 minuti).

-RetryTimeout
Specifica il tempo, in secondi, in cui il BITS prova a trasferire il file dopo il primo errore. Impostando 0 si evitano i tentativi e si forza il job nello stato BG_JOB_STATE_ERROR quando si verifica un errore. Se il valore del periodo di ripetizione supera l'impostazione del criterio di gruppo JobInactivityTimeout (90 giorni di default), quest'ultimo ha la precedenza e il trasferimento viene cancellato.
Il valore predefinito è 1.209.600 secondi (14 giorni).

-SecurityFlags
Specifica i flag di sicurezza per la richiesta HTTP.
I flag che si possono impostare, a partire dal bit meno significativo, sono i seguenti:
1: Abilita il controllo CRL.
2: Ignora i nomi comuni errati nel certificato del server.
3: Ignora le date errate nel certificato del server.
4: Ignora le autorità di certificazione errate nel certificato del server.
5: Ignora l'uso scorretto del certificato del server.
12: Permette il reindirizzamento da HTTPS a HTTP.
Usa i bit da 9 a 11 per implementare la policy di reindirizzamento:
0,0,0: I reindirizzamenti sono automaticamente permessi.
0,0,1: Il nome remoto è aggiornato se si verifica un reindirizzamento. 
0,1,0: Il BITS fallisce se si verifica un reindirizzamento.

-Source
Specifica la posizione di origine e i nomi dei file da trasferire. I nomi dei file di origine sono abbinati ai corrispondenti nomi dei file di destinazione. Per esempio, il primo nome del file specificato nel parametro Source corrisponde al primo nome del file nel parametro Destination, e il secondo nome del file nel parametro Source corrisponde al secondo nome del file nel parametro Destination. I parametri Source e Destination devono avere lo stesso numero di elementi, altrimenti il comando produce un errore. Il parametro accetta i caratteri jolly standard come l'asterisco (*) e il punto interrogativo (?) e anche un'operatore di intervallo come "[a-r]".

-Suspended
Indica che il cmdlet sospende il trasferimento BITS. Se il parametro Suspended non è specificato, il trasferimento viene avviato automaticamente, in caso contrario il prompt dei comandi ritorna immediatamente dopo la creazione del job di trasferimento BITS. Per avviare un trasferimento sospeso si può utilizzare il cmdlet Resume-BitsTransfer.

-TransferPolicy
Specifica, tramite l'utilizzo di una maschera di bit, gli stati di una connessione a consumo in cui il trasferimento può essere pianificato. 
I valori accettati per questo parametro sono
  • Unrestricted (o unknown): 0x00000001, lo stato dei costi per questa rete a consumo non è noto.
  • Capped: 0x00000002, si tratta di una rete a consumo con un piano che ha un limite di utilizzo dei dati.
  • BelowCap: 0x00000004,  il consumo dati della rete a consumo è al di sotto del limite del piano dati.
  • NearCap: 0x00000008, il consumo dati è vicino al limite del piano dati.
  • OverCapCharged: 0x00000010, il consumo dati è superiore al limite del piano dati, e l'uso è addebitato.
  • OverCapThrottled: 0x00000020, il consumo dati è al di sopra del limite del piano dati, e l'uso è limitato.
  • UsageBased: 0x00000040, il consumo dati per questa rete è addebitato in base all'uso.
  • Roaming: 0x00000080, il consumo dati per questa rete incorre in costi di roaming. Lo stato dei costi include anche un'opzione (IgnoreCongestion) e un insieme di politiche standard (Uncosted, Standard, NoSurcharge, NotRoaming, e Always) che sono combinazioni di valori di bit discreti.
  • IgnoreCongestion: 0x80000000, il trasferimento può essere programmato anche se il fornitore di rete segnala che la rete è congestionata.
  • PolicyUnrestricted: 0x80000021, l'insieme degli stati di costo che non consumano la quota di un piano limitato, o incorrono in spese extra.
  • Standard: 0x80000067,  un insieme di stati di costo adatti a trasferimenti a priorità moderata.
  • NoSurcharge: 0x8000006f, l'insieme degli stati di costo che non comportano supplementi per l'uso.
  • NotRoaming: 0x8000007f, l'insieme degli stati di costo che escludono lo stato di roaming.
  • Always: 0x800000ff, l'insieme di tutti gli stati di costo.

-TransferType
Specifica il tipo di trasferimento dati. I valori accettati per questo parametro sono:
  • Download (il valore predefinito): Scarica i file sul computer client.
  • Upload: Carica un file sul server.
  • UploadReply: Carica un file sul server e riceve un file di risposta dal server.

-UseStoredCredential
Specifica che le credenziali memorizzate nel Windows Credential Manager dovrebbero essere usate per l'autenticazione quando richiesto per il tipo di server di destinazione specificato. Se questo parametro non è specificato e un server richiede l'autenticazione, allora le credenziali esplicite devono essere incluse utilizzando i parametri Credential o ProxyCredential. Questo parametro è un parametro flag i cui valori possono essere sommati per creare il comportamento desiderato.
I valori accettati per questo parametro sono:
  • None: Usa solo le credenziali fornite dai parametri Credential o ProxyCredential. Questo è il comportamento predefinito se il parametro non è specificato.
  • Proxy: Le credenziali memorizzate nel Windows Credential Manager sono utilizzate per l'autenticazione per qualsiasi server proxy che richiede l'autenticazione. Se nessuna credenziale nel Windows Credential Manager corrisponde al server proxy che necessita di autenticazione, allora è necessario specificare le credenziali utilizzando il parametro ProxyCredential.
  • Server: Questo valore non è supportato e genera un errore se specificato.

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

Esempi

Esempio 1
Start-BitsTransfer -Source "http://server01/servertestdir/testfile1.txt" -Destination "c:\clienttestdir\testfile1.txt"
Crea un job di trasferimento BITS dal server al client.
Poiché il cmdlet Start-BitsTransfer assume che il primo parametro sia l'origine e che il secondo sia la destinazione il comando può essere semplificato in
Start-BitsTransfer "http://server01/servertestdir/testfile1.txt" "c:\clienttestdir\testfile1.txt"

Esempio 2
Import-CSV ElencoFile.txt | Start-BitsTransfer
Questo comando crea job di trasferimento BITS che scaricano più file da un server. Il comando importa le posizioni dei file di origine e di destinazione dal file .txt e poi invia le informazioni al comando Start-BitsTransfer. Il comando Start-BitsTransfer crea un nuovo job di trasferimento BITS per ciascuno dei file in ElencoFile.txt e poi li trasferisce simultaneamente al client.

Il contenuto del file ElencoFile.txt sarà simile a
Source, Destination
http://server01/servertestdir/testfile1.txt, c:\clienttestdir\testfile1.txt
Esempio 3
Start-BitsTransfer -Source "c:\clienttestdir\testfile1.txt" -Destination "http://server01/servertestdir/testfile1.txt" -TransferType Upload
Questo comando crea un job di trasferimento BITS che carica un file su un server. I nomi locali e remoti del file sono specificati nei parametri Source e Destination. Poiché il tipo di trasferimento predefinito è Download, il parametro TransferType deve essere impostato su Upload.

Esempio 4
Start-BitsTransfer -Source .\Patch0416.msu -Destination $env:temp\Patch0416.msu -ProxyUsage Override -ProxyList BitsProxy:8080 -ProxyCredential Server01\Admin01
Questo comando usa il cmdlet Start-BitsTransfer per copiare un file patch da un server su una rete a un client su una rete diversa quando le reti sono collegate solo da un server proxy.

Esempio 5
 #Percorso e nome del file da scaricare  
 $url = 'https://images-assets.nasa.gov/video/Seventeen Seconds of Fuel Remained/Seventeen Seconds of Fuel Remained~orig.mp4'  
 #Path di destinazione  
 $targetfolder = $env:temp  
 #Il file verrĂ  salvato con lo stesso nome nel percorso di destinazione  
 $filename = Split-Path -Path $url -Leaf  
 $targetFile = Join-Path -Path $targetfolder -ChildPath $filename  
   
 #avvio trasferimento BITS  
 Start-BitsTransfer -Source $url -Destination $targetfolder -Description 'Download in corso...' -Priority Low   
   
 #Il file video viene visualizzato dal player predefinito  
 Start-Process -FilePath $targetFile  
Lo script sopra riportato provvede a scaricare un video dal sito della NASA e, al termine del download, provvede a visualizzarlo con il player predefinito. Come visibile nello script con il comando Start-BitsTransfer è stata impostata una priorità bassa per il download in modo da poter scaricare il file senza monopolizzare la banda di rete.
Start-BitsTransfer
FIG 1 - Start-BitsTransfer



Esempio 6
 $url = 'https://images-assets.nasa.gov/video/Seventeen Seconds of Fuel Remained/Seventeen Seconds of Fuel Remained~orig.mp4'  
 $targetfolder = $env:temp  
 Start-BitsTransfer -Source $url -Destination $targetfolder -Asynchronous -Priority Low  
   
 Get-BitsTransfer | ForEach-Object {  
   Write-Warning $_.FileList.RemoteName  
   $_  
  } |  Where-Object { $_.jobstate -eq 'Transferred' } | ForEach-Object {  
   #$_ | Select-Object -Property *  
   $file = $_.FileList.LocalName  
   Write-Warning "Copia file $file..."  
   $_ | Complete-BitsTransfer  
  }  
Lo script sopra riportato scarica in bakcground un video dal sito della NASA con bassa priorità e in modalità asincrona. Lo svantaggio dei trasferimenti asincroni del BITS è che i dati vengono scaricati in una cache nascosta e bisogna completare manualmente il trasferimento del file. Tramite Get-BitsTransfer si verificano i job completati quindi il trasferimento del file viene finalizzato utilizzando il cmdlet Complete-BitsTransfer.

Eseguendo PowerShell come amministratore è possibile controllare i trasferimenti BITS iniziati da altri utenti, compreso il sistema operativo utilizzando il cmdlet Get-BitsTransfer.

Get-BitsTransfer -AllUsers
per visualizzare i BITS avviati da altri utenti

Get-BitsTransfer -AllUsers | Select-Object OwnerAccount, Priority, FileList
Per visualizzare maggiori dettagli sui BITS avviati da altri utenti, tra cui priorità e il nome dei file.
Get-BitsTransfer
FIG 2 - Get-BitsTransfer







venerdì 4 febbraio 2022

Linux: Divertirsi con la shell bash (3)

Da terminare incollare ed eseguire il seguente codice per visualizzare caratteri casuali che scorrono dall'alto verso il basso stile Matrix.

while :;do echo $LINES $COLUMNS $(( $RANDOM % $COLUMNS)) $(printf "\U$(($RANDOM % 500))");sleep 0.05;done|gawk '{a[$3]=0;for (x in a){o=a[x];a[x]=a[x]+1;printf "\033[%s;%sH\033[2;32m%s",o,x,$4;printf "\033[%s;%sH\033[1;37m%s\033[0;0H",a[x],x,$4;if (a[x] >= $1){a[x]=0;} }}'


Matrix
FIG 1 - Matrix




giovedì 3 febbraio 2022

PowerShell: Ottimizzare le prestazioni degli script

A chi lavora con gli script PowerShell viene spesso richiesto di ottimizzare il codice e i tempi di esecuzione al fine di ridurre gli impatti sul sistema. Per script complessi e lunghi non è semplice individuare la causa di ritardi nell'esecuzione e cosa andare ad ottimizzare. In questi casi può essere d'aiuto un modulo PowerShell chiamato "PSProfiler" che visualizza il tempo di esecuzione di ogni linea presente all'interno dello script.

Per poter utilizzare tale modulo va prima installato con il comando
Install-Module -Name PSProfiler -Scope CurrentUser  
PSProfiler
FIG 1 - PSProfiler

Successivamente lo script da analizzare va invocato mediante Measure-Script
Measure-Script -Path  C:\Users\Virtual\bubble_sort.ps1

Una volta completata l'esecuzione dello script, viene visualizzato un rapporto dettagliato che mostra quante volte ogni linea di codice è stata eseguita e quanto tempo ha impiegato.
Report PSProfiler
FIG 2 - Report PSProfiler