sabato 27 febbraio 2021

PowerShell: Rimuovere un membro da un gruppo Active Directory

Il cmdlet per rimuovere un membro da un gruppo Active Directory è Remove-ADGroupMember.

Sintassi

Remove-ADGroupMember
      [-WhatIf]
      [-Confirm]
      [-AuthType <ADAuthType>]
      [-Credential <PSCredential>]
      [-Identity] <ADGroup>
      [-Members] <ADPrincipal[]>
      [-Partition <String>]
      [-PassThru]
      [-Server <String>]
      [-DisablePermissiveModify]
      [<CommonParameters>]

Parametri

-AuthType 
Specifica il metodo di autenticazione. I valori accettati dal parametro sono:
  • Negotiate oppure 0 (default)
  • Basic oppure 1
-Confirm
Se specificato, tale parametro mostra la richiesta di conferma prima di eseguire il cmdlet.

-Credential
Specifica le credenziali dell'account utente con cui eseguire il comando. Se omesso viene considerato l'utente corrente che sta eseguendo il comando. Al parametro può essere passato il nome dell'account, come ad es. "utente01" o "Dominio\utente01" oppure può essere passato un'oggetto PSCredential generato dal cmdlet Get-Credential. Se viene specificato un'account utente verrà richiesto di inserire la password all'esecuzione del comando.

-DisablePermissiveModify
Gli aggiornamenti dei membri del gruppo utilizzano una modifica permissiva per impostazione predefinita e il messaggio di errore quando si tenta di rimuovere un account non presente viene soppresso. Specificando tale parametro il messaggio di errore verrà visualizzato.

-Identity
Tale parametro specifica l'oggetto gruppo Active Directory su cui si desidera intervenire. Al parametro può essere passato un qualsiasi valore che identifica il gruppo in maniera univoca come:
Distinguished name
GUID (objectGUID)
Security identifier (objectSid)
Security Account Manager account name (sAMAccountName) 

-Members
Permette di specificare un array di utenti, gruppi e computer separati da virgola da rimuovere dal gruppo. Il parametro accetta come valori:
Distinguished name
GUID (objectGUID)
Security identifier (objectSid)
SAM account name (sAMAccountName)

-Partition
A tale parametro va passato il Distinguished Name (DN) di una partizione di Active Directory. Il cmdlet utilizzerà tale partizione per ricercare l'oggetto specificato dal parametro Identity.

-PassThru
Restituisce un oggetto che rappresenta l'item su cui si sta lavorando. Per impostazione predefinita, il cmdlet non genera alcun output.

-Server
Permette di specificare l'istanza di Active Directory Domain Services a cui connettersi per eseguire l'operazione.

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


Rimuovere un membro da un gruppo Active Directory
Per rimuovere un membro da un gruppo Active Directory il comando sarà analogo al seguente
Remove-ADGroupMember -Identity Gruppo1 -Members Giovanni.Lubrano
dove con il parametro -Indentity si va ad indicare il gruppo sul quale agire e con -Members indichiamo l'account o più account separati da virgola da rimuovere.
PowerShell, Remove-AdGroupMember
FIG 1 - PowerShell, Remove-AdGroupMember

E' possibile creare un file CSV contenente l'elenco di tutti gli account da rimuovere dal gruppo Active Directory come quello in FIG 2.
File CSV con l'elenco degli account
FIG 2 - File CSV con l'elenco degli account

Il comando da eseguire per rimuovere dal gruppo specificato (Gruppo1) l'elenco degli account presenti nel file CSV (FileUtenti.csv) sarà simile a
Import-CSV C:\FileUtenti.csv -Header utenti | ForEach-Object {Remove-AdGroupMember -Identity "Gruppo1" -members $_.utenti}

Per rimuovere un account da tutti i gruppi Active Directory si può utilizzare il comando
Get-ADUser -Identity Giovanni.Lubrano -Properties MemberOf | ForEach-Object {$_.MemberOf | Remove-ADGroupMember -Members $_.DistinguishedName -Confirm:$false}





martedì 23 febbraio 2021

PowerShell: Aggiungere membri in un gruppo Active Directory

Per aggiungere account utente e computer ad un gruppo Active Directory viene utilizzato il cmdlet Add-AdGroupMember.

Sintassi

Add-ADGroupMember
   [-WhatIf]
   [-Confirm]
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   [-Identity] <ADGroup>
   [-Members] <ADPrincipal[]>
   [-MemberTimeToLive <TimeSpan>]
   [-Partition <String>]
   [-PassThru]
   [-Server <String>]
   [-DisablePermissiveModify]
   [<CommonParameters>]

   
Parametri

-AuthType 
Specifica il metodo di autenticazione. I valori accettati dal parametro sono:
  • Negotiate oppure 0 (default)
  • Basic oppure 1
-Confirm
Se specificato, tale parametro mostra la richiesta di conferma prima di eseguire il cmdlet.

-Credential
Specifica le credenziali dell'account utente con cui eseguire il comando. Se omesso viene considerato l'utente corrente che sta eseguendo il comando. Al parametro può essere passato il nome dell'account, come ad es. "utente01" o "Dominio\utente01" oppure può essere passato un'oggetto PSCredential generato dal cmdlet Get-Credential. Se viene specificato un'account utente verrà richiesto di inserire la password all'esecuzione del comando.

-DisablePermissiveModify
Gli aggiornamenti dei membri del gruppo utilizzano una modifica permissiva per impostazione predefinita e il messaggio di errore quando si aggiunge un account che è già membro del gruppo viene soppresso. Specificando tale parametro il messaggio di errore verrà visualizzato.

-Identity
Tale parametro specifica l'oggetto gruppo Active Directory su cui si desidera intervenire. Al parametro può essere passato un qualsiasi valore che identifica il gruppo in maniera univoca come:
Distinguished name
GUID (objectGUID)
Security identifier (objectSid)
Security Account Manager account name (sAMAccountName) 

-Members
Permette di specificare un array di utenti, gruppi e computer separati da virgola da aggiungere al gruppo. Il parametro accetta come valori:
Distinguished name
GUID (objectGUID)
Security identifier (objectSid)
SAM account name (sAMAccountName)

-MemberTimeToLive
Permette di specificare un Time to Live (TTL) per i nuovi membri del gruppo.

-Partition
A tale parametro va passato il Distinguished Name (DN) di una partizione di Active Directory. Il cmdlet utilizzerà tale partizione per ricercare l'oggetto specificato dal parametro Identity.

-PassThru
Restituisce un oggetto che rappresenta l'item su cui si sta lavorando. Per impostazione predefinita, il cmdlet non genera alcun output.

-Server
Permette di specificare l'istanza di Active Directory Domain Services a cui connettersi per eseguire l'operazione.

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

Aggiungere membri in un gruppo Active Directory
Per aggiungere account utente, computer o altri gruppi come membri in un gruppo Active Directory il comando sarà simile a
Add-AdGroupMember -Identity Gruppo1 -Members yosemite.sam, Giovanni.Lubrano
Come visibile è possibile specificare più membri separandoli con la virgola.

PowerShell, Add-AdGroupMember
FIG 1 - PowerShell, Add-AdGroupMember

Per aggiungere un account computer è necessario aggiungere il simbolo $ alla fine del nome dell'account.
Add-AdGroupMember -Identity Gruppo1 -Members PCDIR004$

Per velocizzare l'inserimento di account all'interno di un gruppo è possibile creare un file CSV. Il file sarà simile a quello mostrato in FIG 2 e conterrà l'elenco degli account da aggiungere al gruppo.
File CSV con l'elenco degli account
FIG 2 - File CSV con l'elenco degli account

Il comando da eseguire per aggiungere al gruppo specificato (Gruppo1) l'elenco degli account presenti nel file CSV (FileUtenti.csv) sarà simile a
Import-CSV C:\FileUtenti.csv -Header utenti | ForEach-Object {Add-AdGroupMember -Identity "Gruppo1" -members $_.utenti}

Per aggiungere un account utente a più gruppi è possibile utilizzare il comando
"Gruppo1","Gruppo2" | Add-ADGroupMember -Members Giovanni.Lubrano
con il seguente comando viene richiesto di specificare l'account utente da inserire nei due gruppi
"Gruppo1","Gruppo2" | Add-ADGroupMember -Members (Read-Host -Prompt "Inserisci l'account utente: ")

PowerShell, Aggiungere un account utente a più gruppi
FIG 3 - PowerShell, Aggiungere un account utente a più gruppi

Sfruttando i cmdlet Get-ADGroupMemberGet-ADUser possiamo copiare gli account utente da un gruppo all'altro. Ad esempio il seguente comando copia i membri account utente dal Gruppo1 al Gruppo2.
Get-ADGroupMember "Gruppo1" | Get-ADUser | ForEach-Object {Add-ADGroupMember -Identity "Gruppo2" -Members $_}








domenica 21 febbraio 2021

PowerShell: Visualizzare i membri di un gruppo Active Directory

In questo articolo tratteremo il cmdlet Get-ADGroupMember utilizzato per visualizzare i membri di un gruppo Active Directory. I membri possono essere account utente, computer o altri gruppi.

Sintassi

Get-ADGroupMember
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   [-Identity] <ADGroup>
   [-Partition <String>]
   [-Recursive]
   [-Server <String>]
   [<CommonParameters>]

Parametri

-AuthType 
Specifica il metodo di autenticazione. I valori accettati dal parametro sono:
  • Negotiate oppure 0 (default)
  • Basic oppure 1
-Credential
Specifica le credenziali dell'account utente con cui eseguire il comando. Se omesso viene considerato l'utente corrente che sta eseguendo il comando. Al parametro può essere passato il nome dell'account, come ad es. "utente01" o "Dominio\utente01" oppure può essere passato un'oggetto PSCredential generato dal cmdlet Get-Credential. Se viene specificato un'account utente verrà richiesto di inserire la password all'esecuzione del comando.

-Identity
Tale parametro specifica l'oggetto gruppo Active Directory su cui si desidera intervenire. Al parametro può essere passato un qualsiasi valore che identifica il gruppo in maniera univoca come:
Distinguished name
GUID (objectGUID)
Security identifier (objectSid)
Security Account Manager account name (SAMAccountName) 

-Partition
A tale parametro va passato il Distinguished Name (DN) di una partizione di Active Directory. Il cmdlet utilizzerà tale partizione per ricercare l'oggetto specificato dal parametro Identity.

-Recursive
Specifica che il cmdlet ottiene i membri di un gruppo inclusi i membri di gruppi secondari.

-Server
Permette di specificare l'istanza di Active Directory Domain Services a cui connettersi per eseguire l'operazione.

Visualizzare i membri di un gruppo Active Directory
Per visualizzare i membri di un gruppo Active Directory (ad es. un gruppo con nome Gruppo1) si utilizza il comando
Get-ADGroupMember -Identity Gruppo1
PowerShell, Get-ADGroupMember
FIG 1 - PowerShell, Get-ADGroupMember


Se il gruppo contiene altri gruppi e possibile visualizzare anche i membri dei gruppi secondari utilizzando il parametro -Recursive come indicato dal seguente comando
Get-ADGroupMember -Identity "Gruppo1" -Recursive





mercoledì 17 febbraio 2021

PowerShell: Visualizzare informazioni su uno o più gruppi Active Directory

Per visualizzare uno o più gruppi Active Directory si utilizza il cmdlet Get-ADGroup.

Sintassi

Get-ADGroup
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   -Filter <String>
   [-Properties <String[]>]
   [-ResultPageSize <Int32>]
   [-ResultSetSize <Int32>]
   [-SearchBase <String>]
   [-SearchScope <ADSearchScope>]
   [-Server <String>]
   [-ShowMemberTimeToLive]
   [<CommonParameters>]

Get-ADGroup
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   [-Identity] <ADGroup>
   [-Partition <String>]
   [-Properties <String[]>]
   [-Server <String>]
   [-ShowMemberTimeToLive]
   [<CommonParameters>]

Get-ADGroup
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   -LDAPFilter <String>
   [-Properties <String[]>]
   [-ResultPageSize <Int32>]
   [-ResultSetSize <Int32>]
   [-SearchBase <String>]
   [-SearchScope <ADSearchScope>]
   [-Server <String>]
   [-ShowMemberTimeToLive]
   [<CommonParameters>]

Parametri

-AuthType 
Specifica il metodo di autenticazione. I valori accettati dal parametro sono:
  • Negotiate oppure 0 (default)
  • Basic oppure 1
-Credential
Specifica le credenziali dell'account utente con cui eseguire il comando. Se omesso viene considerato l'utente corrente che sta eseguendo il comando. Al parametro può essere passato il nome dell'account, come ad es. "utente01" o "Dominio\utente01" oppure può essere passato un'oggetto PSCredential generato dal cmdlet Get-Credential. Se viene specificato un'account utente verrà richiesto di inserire la password all'esecuzione del comando.

-Filter
Permette di specificare una query che recupera l'oggetto gruppo Active Directory.

-Identity
Tale parametro specifica l'oggetto gruppo Active Directory su cui si desidera intervenire. Al parametro può essere passato un qualsiasi valore che identifica il gruppo in maniera univoca come:
Distinguished name
GUID (objectGUID)
Security identifier (objectSid)
Security Account Manager account name (sAMAccountName) 

-LDAPFilter
Specifica una query LDAP che viene utilizzata per filtrare gli oggetti Active Directory. 

-Partition
A tale parametro va passato il Distinguished Name (DN) di una partizione di Active Directory. Il cmdlet utilizzerà tale partizione per ricercare l'oggetto specificato dal parametro Identity.

-Properties
Specifica le proprietà dell'oggetto da recuperare. Può essere usato per recuperare le proprietà che non sono incluse nel set di default.

-ResultPageSize
Specifica il numero di oggetti da includere in una pagina per una query AD DS.

-ResultSetSize
Specifica il numero massimo di oggetti da restituire per la query AD DS.

-SearchBase
Specifica un percorso Active Directory all'interno del quale effettuare la ricerca.

-SearchScope
Specifica l'ambito di una ricerca Active Directory. I valori accettabili per questo parametro sono:
  • Base o 0
  • OneLevel o 1
  • SubTree o 2
-Server
Permette di specificare l'istanza di Active Directory Domain Services a cui connettersi per eseguire l'operazione.

-ShowMemberTimeToLive
Indica che questo cmdlet visualizza i valori di Time to Live (TTL) per i membri del gruppo.


Esempi

Esempio 1
Get-ADGroup -filter * -properties GroupCategory | ft name,groupcategory
Visualizza tutti i gruppi Active Directory
Visualizza tutti i gruppi Active Directory
FIG 1 - Visualizza tutti i gruppi Active Directory


Esempio 2
Get-ADGroup -Identity Gruppo1
Visualizza il gruppo specificato dal parametro -Identity.
Visualizza il gruppo Active Directory specificato
FIG 2 - Visualizza il gruppo Active Directory specificato

Esempio 3
Get-ADGroup -Filter 'GroupCategory -eq "Security"'
Visualizza solo i gruppi di sicurezza.






venerdì 12 febbraio 2021

Ransomware Ziggy: Decriptare i file

Come visto per tanti ransomware, anche Ziggy blocca l'accesso ai file cifrando il loro contenuto (tramite l'utilizzo degli algoritmi RSA-4096 e AES-256 GCMe richiedendo un riscatto. In tutte le cartelle contenenti file cifrati viene creato il file "## HOW TO DECRYPT ##.exe", un file eseguibile che visualizza le istruzioni per il pagamento del riscatto. I file cifrati vengono rinominati aggiungendo al nome l'ID della vittima, l'indirizzo email lilmoon1@criptext.com e, infine, l'estensione .ziggy.

Ad esempio il file
foto.jpg
verrà rinominato dal ransomware in qualcosa del tipo
foto.jpg.id=[A235D928].email=[lilmoon1@criptext.com].ziggy

Nel messaggio di riscatto la vittima viene invitata a contattare un indirizzo email indicando il proprio ID per procedere al pagamento del riscatto in Bitcoin. Una volta effettuato il pagamento verranno inviati un tool e relative istruzioni per procedere al recupero dei propri dati. Nel messaggio viene anche indicato che il prezzo da pagare dipende da quanto celermente le vittime contatteranno gli sviluppatori del ransomware facendo intendere che più tempo passa dall'infezione più alto sarà il riscatto. Prima di effettuare il pagamento, alla vittima viene data la possibilità di inviare 5 file che verranno decrittati gratuitamente (una sorta di prova di affidabilità). 
In questi casi dovrebbe essere superfluo ricordare che, avendo a che fare con criminali, il pagamento del riscatto non garantisce il recupero dei dati.
Ziggy, messaggio del riscatto
FIG 1 - Ziggy, messaggio del riscatto


Da qualche giorno i server di Ziggy sono stati chiusi e gli sviluppatori, forse anche per le recenti operazioni di polizia contro i ransomware Emotet e Netwalker, hanno deciso di rendere pubbliche le chiavi di decrittazione. Gli sviluppatori del ransomware hanno rilasciato un file SQL contenente, per ciascuna vittima, 3 chiavi da utilizzare per decrittare i dati ed è stato rilasciato anche il relativo tool. 
File SQL con chiavi di decrittazione
FIG 2 - File SQL con chiavi di decrittazione

Decryptor fornito dagli sviluppatori di Ziggy
FIG 3 - Decryptor fornito dagli sviluppatori di Ziggy


Il ransomware procedeva a criptare i dati degli utenti con chiavi di cifratura offline nel caso in cui le vittime non fossero connesse ad Internet o nel caso in cui i server C & C non fossero raggiungibili. Gli sviluppatori hanno anche condiviso il codice sorgente del decryptor contenente le chiavi di decrittazione offline.

Grazie alle informazioni e alle chiavi rilasciate, l'esperto di ransomware Michael Gillespie ha creato il tool Emsisoft Decryptor for Ziggy che permette alle vittime di recuperare i propri dati:
  • Il tool può essere scaricato da https://www.emsisoft.com/ransomware-decryption-tools/ziggy
  • Una volta avviato, per proseguire, è necessario accettare i termini di licenza cliccando sul pulsante Yes.
    Decryptor for Ziggy, Licenza
    FIG 4 - Decryptor for Ziggy, Licenza

  • Cliccare sull'unico pulsante Browse attivo, selezionare un file crittografato da recuperare quindi cliccare su Start per avviare l'analisi.
    Decryptor for Ziggy
    FIG 5 - Decryptor for Ziggy

  • Al termine dell'analisi verrà visualizzata una finestra di dialogo informativa relativa alle chiavi di decrittazione trovate. Per proseguire cliccare su OK.
    Decryptor for Ziggy, Decryption Key found
    FIG 6 - Decryptor for Ziggy, Decryption Key found

  • La scansione e il recupero dei file cifrati viene, di default, effettuata su tutti i dischi e drive removibili connessi al sistema. Tramite il pulsante Add folder è possibile aggiungere nuovi percorsi o rimuoverli utilizzando i pulsanti Remove object(s), per eliminare quelli selezionati, o Clear object list per azzerare l'elenco. All'interno della scheda Options è possibile indicare se mantenere o eliminare i file cifrati una volta decrittati. Dopo aver effettuato le personalizzazioni desiderate è possibile cliccare su Decrypt per avviare il processo.

    Decryptor for Ziggy, Decrypt
    FIG 7 - Decryptor for Ziggy, Decrypt

  • Nella scheda Results sarà possibile visualizzare i dettagli sull'operazione di recupero in corso.





giovedì 11 febbraio 2021

Ransomware Fonix: Decriptare i file

Scoperto dal ricercatore di sicurezza Michael Gillespie  il ransomware Fonix, anche conosciuto come FonixCrypter e XINOF, è stato rilasciato a giugno 2020 ma solo a partire dal mese di novembre dello stesso anno le vittime sono aumentate in maniera significativa. Fonix, come gran parte dei ransomware, provvede a cifrare i file della vittima e a visualizzare una richiesta di riscatto.

I file cifrati vengono rinominati: al nome del file viene aggiunto l'indirizzo email fonix@tuta.io, l'ID della vittima e l'estensione .Fonix
Ad esempio un file 
foto.jpg
viene rinominato dal ransomware in
foto.jpg.EMAIL=[fonix@tuta.io]ID=[FE867B00].Fonix

Le istruzioni su come pagare il riscatto risiedono all'interno del file "# How To Decrypt Files #.hta" presente in ogni cartella contenente i dati cifrati.
Nel messaggio di riscatto viene indicato che il ransomware cripta i file utilizzando l'algoritmo di crittografia Salsa20 e la chiave RSA 4098. Per ottenere una chiave di decrittazione, le vittime sono invitate a pagare una certa somma tramite Bitcoin. Per ottenere istruzioni su come acquistare la chiave, alla vittima viene richiesto di inviare un'e-mail a fonix@tuta.io entro 48 ore dall'attacco di Fonix, poiché dopo questo periodo il costo raddoppierà. Prima di effettuare il pagamento, viene offerta la possibilità di inviare un file criptato gratuitamente per la decrittazione. Il messaggio avvisa  di non eliminare o rinominare i file crittografati, né di provare a decifrarli con altri software, perché questo danneggerà permanentemente i dati. 
Ovviamente, trattandosi di criminali, non è garantito che pagando il riscatto si riceva la chiave di decrittazione.
Ransomware Fonix, richiesta di riscatto
FIG 1 - Ransomware Fonix, richiesta di riscatto



Decriptare i file
A fine gennaio 2021 uno degli admin di Fonix ha comunicato la chiusura dei server utilizzati dal ransomware e ha rilasciato una chiave pubblica insieme ad un tool per la decrittazione dei file. Il tool non è di semplice utilizzo per i meno esperti. Fortunatamente  il team Kaspersky ha aggiornato il suo RakhniDecryptor e le vittime possono facilmente ripristinare i loro dati utilizzando questo strumento.
Annuncio Fonix Admin
FIG 2 - Annuncio Fonix Admin

I passaggi da seguire per il recupero dei dati sono semplici:
  • Il tool può essere scaricato da https://noransom.kaspersky.com/.
    Download Rakhni Decryptor
    FIG 3 - Download Rakhni Decryptor

  • Una volta scaricato il file .zip, estrarre il suo contenuto ed eseguire il file RakhniDecryptor.exe.
  • Per proseguire è necessario accettare la licenza di utilizzo cliccando sul pulsante Accept.
    Licenza Rakhni Decryptor
    FIG 4 - Licenza Rakhni Decryptor

  • La scansione viene, di default, effettuata su tutti i dischi e drive removibili connessi al sistema. Cliccando su link Change parameters sarà possibile specificare ulteriori percorsi e indicare se eliminare i file cifrati una volta decrittati (FIG 6).
    RakhniDecryptor
    FIG 5 - RakhniDecryptor

    RakhniDecryptor, Change parameters
    FIG 6 - RakhniDecryptor, Change parameters

  • Nella schermata principale cliccando su Start scan verrà eseguita la scansione dei drive e la decrittazione dei file. Non resta che attendere la fine dell'operazione e la visualizzazione del report.







domenica 7 febbraio 2021

Come ricercare file di grandi dimensioni tramite il Prompt dei comandi

Tramite il prompt dei comandi è possibile ricercare i file di grandi dimensioni utilizzando il comando forfiles.

Digitando 
forfiles /?
seguito da invio verrà mostrato l'help del comando con informazioni sulla sintassi e i vari parametri come indicato di seguito.


FORFILES [/P nomepercorso] [/M mascheraricerca] [/S]
         [/C comando] [/D [+ | -] {dd/MM/yyyy | dd}]

Descrizione:
    Seleziona un file, o un gruppo di file, e esegue un
    comando sul file selezionato. Utile per i processi batch.

Elenco parametri:
    /P    nomepercorso  Indica il percorso da cui avviare la ricerca.
                        La cartella predefinita è la directory di lavoro
                        corrente.

    /M    masch.ricerca Esegue la ricerca di file in base a una
                        maschera di ricerca.
                        La maschera di ricerca predefinita è '*' .

    /S                  Indica la ricerca ricorsiva nelle
                        sottodirectory. Come "DIR /S".

    /C    comando       Indica il comando da eseguire per ciascun file.
                        Le stringhe del comando devono essere
                        racchiuse tra virgolette doppie.

                        Il comando predefinito è "cmd /c echo @file".

                        È possibile utilizzare le seguenti variabili nella
                        stringa di comando:
                        @file    - Restituisce il nome del file.
                        @fname   - Restituisce il nome file senza
                                   estensione.
                        @ext     - Restituisce solo l'estensione del
                                   file.
                        @path    - Restituisce il percorso completo del file.
                        @relpath - Restituisce il percorso relativo del
                                   file.
                        @isdir   - Restituisce "TRUE" se il tipo di file è
                                   una directory e "FALSE" per i file.
                        @fsize   - Restituisce le dimensioni del file in
                                   byte.
                        @fdate   - Restituisce la data dell'ultima modifica del
                                   file.
                        @ftime   - Restituisce l'ora dell'ultima modifica del
                                   file.

                        Per includere caratteri speciali nella riga
                        di comando, utilizzare il codice esadecimale
                        per il carattere nel formato 0xHH (ad esempio,
                        0x09 per TAB). I comandi interni CMD.exe
                        devono essere preceduti da "cmd /c".

    /D    data          Seleziona i file con la data dell'ultima
                        modifica successiva
                        o uguale a (+), o precedente o uguale alla
                        (-), data specificata utilizzando il
                        formato "dd/MM/yyyy", o seleziona i file con
                        la data dell'ultima modifica successiva
                        o uguale alla (+) data corrente più
                        "gg" giorni, o precedente o uguale alla
                        (-) data corrente meno "gg" giorni. Un numero
                        "gg" di giorni valido può essere qualsiasi numero
                        compreso tra 0 e 32768.
                        "+" viene considerato il segno predefinito se
                        non altrimenti specificato.

    /?                  Visualizza questo messaggio della Guida.

Esempi:
    FORFILES /?
    FORFILES
    FORFILES /P C:\WINDOWS /S /M DNS*.*
    FORFILES /S /M *.txt /C "cmd /c type @file | more"
    FORFILES /P C:\ /S /M *.bat
    FORFILES /D -30 /M *.exe
             /C "cmd /c echo @path 0x09 è stato modificato 30 giorni fa"
    FORFILES /D 01/01/2001
             /C "cmd /c echo @fname è stato modificato dopo il 1 gennaio 2001"
    FORFILES /D +4/2/2021 /C "cmd /c echo @fname è stato modificato oggi"
    FORFILES /M *.exe /D +1
    FORFILES /S /M *.doc /C "cmd /c echo @fsize"
    FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"


Per ricercare file che superano la dimensione di 100MB (104857600 byte) in tutte le sottocartelle si può utilizzare il comando
forfiles /S /M * /C "cmd /c if @fsize GEQ 1048576 echo @path"

Se si intende visualizzare, oltre al path, anche la dimensione effettiva del file 
forfiles /S /M * /C "cmd /c if @fsize GEQ 1048576 echo @path - @fsize "


Prompt dei comandi - ForFiles
FIG 1 - Prompt dei comandi - ForFiles








mercoledì 3 febbraio 2021

Windows 10: Unità SATA interna rilevata come supporto rimovibile

A seconda di come vengono contrassegnate le porte SATA sulla scheda madre da parte del BIOS, può capitare che i driver di Windows rilevino i dispositivi SATA interni (HDD o SDD) come unità rimovibili. Si tratta di una situazione che può essere una causa potenziale di danni o perdita di dati.

Per risolvere il problema:
  • Aprire un prompt dei comandi con privilegi di amministratore.
  • Digitare il seguente comando seguito da invio per avviare Gestione dispositivi
    devmgmt.msc
  • Espandere la voce Unità disco, individuare il disco su cui si intende agire e visualizzare le proprietà (doppio click con il tasto sinistro del mouse oppure cliccarci su con il tasto destro e selezionare Proprietà).
    Gestione dispositivi
    FIG 1 - Gestione dispositivi

  • Nella finestra delle proprietà prendere nota del Bus number (in FIG 2 il Bus Number è 0).
    Bus Number
    FIG 2 - Bus Number
  • Ritornare al prompt dei comandi aperto in precedenza e digitare il seguente comando seguito da invio 
    reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\storahci\Parameters\Device" /f /v TreatAsInternalPort /t REG_MULTI_SZ /d x
    dove al posto di x va indicato il bus number annotato precedentemente