Visualizzazione post con etichetta Windows. Mostra tutti i post
Visualizzazione post con etichetta Windows. Mostra tutti i post

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.





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"




giovedì 21 aprile 2022

PowerShell: Windows Defender e eliminazione elenco minacce

Windows Defender, per impostazione predefinita, elimina automaticamente gli elementi che ha identificato come una minaccia dopo 15 giorni. Questa preferenza può essere verificata e configurata direttamente tramite PowerShell

Avviare PowerShell come amministratore.
Per visualizzare dopo quanti giorni un elemento identificato come minaccia viene cancellato, eseguire il comando
(Get-MpPreference).ScanPurgeItemsAfterDelay

Per modificare tale valore si utilizza il comando Set-MpPreference insieme al parametro -ScanPurgeItemsAfterDelay a cui va passato il numero di giorni desiderato. Ad esempio, il seguente comando imposta a 10 giorni l'eliminazione definitiva della minaccia
Set-MpPreference -ScanPurgeItemsAfterDelay 10
MpPreference
FIG 1 - MpPreference






mercoledì 20 aprile 2022

PowerShell: Aprire la finestra di dialogo per l'arresto del sistema di Windows

Per richiamare, tramite PowerShell, la finestra di dialogo "Fine della sessione di lavoro" per l'arresto del sistema è possibile utilizzare il seguente comando
(New-Object -ComObject Shell.Application).ShutdownWindows()

PowerShell, Fine della sessione di lavoro
FIG 1 - PowerShell, Fine della sessione di lavoro

Finestra di dialogo Fine della sessione di lavoro
FIG 2 - Finestra di dialogo Fine della sessione di lavoro





martedì 29 marzo 2022

PowerShell: Aggiornare il server di stampa delle stampanti di rete configurate sul PC

A seguito sostituzione del server di stampa o alla modifica del suo nome, è necessario aggiornare la configurazione delle stampanti di rete installate su tutti i PC. L'operazione può essere eseguita tramite il seguente script.
 # Specificare il vecchio server di stampa  
 $strOLDPrintServer = "Vecchio_Server_Stampa"  
 # Specificare il nuovo server di stampa  
 $strNewPrintServer = "Nuovo_Server_Stampa"  
    
 # Verifica se lo script è già stato eseguito andando a verificare la presenza di un file  
 If (-not (Test-Path ".\$env:USERNAME-printers.txt")) {  
   Write-Host "Avvio Update dei server di stampa ..."  
      Write-Host "Stampanti di rete"  
    
   # L'operazione viene eseguita solo sulle stampanti di rete che hanno il vecchio server di stampa specificato  
     Get-WMIObject Win32_Printer | where{$_.network -eq "true" -and $_.SystemName -like "\\" + $strOLDPrintServer} | Select ShareName, Default, Name, SystemName | ForEach {  
    
                # Visualizza il nome della stampante di rete trovata ($_.ShareName) e se si tratta di stampante predefinita ($_.Default) e il server di stampa ($_.SystemName)  
                Write-Host "Nome: " $_.ShareName " Predefinita: " $_.Default " PrinterServer: " $_.SystemName  
   
                # rimuove la vecchia stampante  
                (New-Object -ComObject WScript.Network).RemovePrinterConnection($_.Name)  
                   
                # Aggiunge la nuova stampante utilizzando il nuovo server di stampa $strNewPrintServer   
                # e il nome $_.ShareName   
                $printer = [WMIClass]"\\.\root\cimv2:Win32_Printer"  
                $printer.AddPrinterConnection("\\" + $strNewPrintServer + "\" + $_.Sharename)  
                   
                # Se la vecchia stampante era predefinita allora imposta predefinita anche quella nuova  
                if($_.Default -eq $true) {  
                     $printer = Get-WmiObject Win32_Printer | ? { $_.name -like "\\" + $strNewPrintServer +"\" + $_.Sharename }  
                     $printer.SetDefaultPrinter()  
                }  
        
   }  
 }  
   
 # Crea un file di testo. La presenza del file indicherà che lo script è già stato eseguito.  
 Write-Host "Fine" | Out-File ".\$env:USERNAME-printers.txt"  

Lo script è molto semplice e i commenti aiutano la comprensione del suo funzionamento. All'interno del codice vanno specificati i nomi del vecchio e del nuovo server di stampa rispettivamente nelle variabili $strOLDPrintServer$strNewPrintServer. Lo script analizza tutte le stampanti configurate sul computer prendendo in considerazione solo le stampanti di rete che fanno riferimento al vecchio server di stampa. Tali stampanti verranno eliminate e riconfigurate utilizzando il nome del nuovo server di stampa. Nel caso di stampanti predefinite l'impostazione verrà ripristinata. Per evitare che lo script possa essere eseguito più volte, all'interno della cartella contenente il file PS1 verrà creato un file di testo. La presenza di tale file indicherà allo script che è già stato eseguito sulla postazione e non verrà eseguita alcuna ulteriore operazione.
Aggiornamento stampanti con il nuovo server di stampa
FIG 1 - Aggiornamento stampanti con il nuovo server di stampa


Dal seguente link è possibile scaricare il file PS1






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






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








venerdì 18 febbraio 2022

PowerShell: Disattivare la protezione in tempo reale dell'Antivirus Microsoft Defender

La protezione in tempo reale dell'antivirus è fondamentale per la sicurezza del sistema e dovrebbe essere disabilitata solo per una buona ragione. Ad esempio, in alcune occasioni, potrebbe rivelarsi utile disabilitare temporaneamente la protezione in tempo reale per eseguire script legittimi che altrimenti verrebbero bloccati.

Per disattivare la protezione in tempo reale dell'antivirus Microsoft Defender si può avviare PowerShell come amministratore ed eseguire il comando
Set-MpPreference -DisableRealtimeMonitoring $true

Per riattivare la protezione in tempo reale basta eseguire il comando sostituendo $true con $false.
Disattivazione-Attivazione protezione in tempo reale di Microsoft Defender
FIG 1 - Disattivazione-Attivazione protezione in tempo reale di Microsoft Defender





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>





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