lunedì 29 marzo 2021

PowerShell: Riconvertire il file di testo in eseguibile (Parte 2)

Nell'articolo precedente (PowerShell: Convertire un file eseguibile in un file di testo) è stato mostrato come convertire un file eseguibile in un file di testo. L'operazione avrebbe poco senso se non fosse possibile eseguire l'operazione inversa e ritrasformare il file di testo in un file eseguibile. Anche in questo caso verrà utilizzato uno script PowerShell per certi versi simile a quello visto nell'articolo precedente.
Le istruzioni presenti all'interno dello script sono le seguenti:
    [CmdletBinding()] Param ( 
        [Parameter(Position = 0, Mandatory = $True)]
        [String]$FileTXT,
    
        [Parameter(Position = 1, Mandatory = $True)]
        [String]$FileEXE
    )
    
    [String]$dump = get-content -path "$FileTXT" -ReadCount 0
    [Byte[]] $temp = $dump -split ' '
    [System.IO.File]::WriteAllBytes($FileEXE, $temp)
    Write-Output "File convertito in $FileExe"

La prima parte riguarda la gestione dei parametri. In questo caso entrambi i parametri sono obbligatori e indicano il file di testo da convertire e il nome del file eseguibile che verrà creato. Nella seconda parte non facciamo altro che caricare tutto il contenuto del file di testo in una stringa. Successivamente dalla stringa estraiamo i byte (separati da un carattere spazio) e li carichiamo all'interno di un array di byte. Infine non resta che salvare i byte all'interno del file eseguibile con l'istruzione
[System.IO.File]::WriteAllBytes($FileEXE, $temp)

Dal seguente link è possibile scaricare lo script PowerShell Txt2Exe.ps1

Script PowerShell Txt2Exe
FIG 1 - Script PowerShell Txt2Exe





mercoledì 24 marzo 2021

PowerShell: Convertire un file eseguibile in un file di testo (Parte 1)

In alcuni contesti, per passare "inosservati" e superare restrizioni e controlli, può essere utile trasformare temporaneamente un file eseguibile in un innocuo file di testo per poi eseguire l'operazione inversa in un secondo momento. Tale conversione può essere eseguita tramite un semplice script PowerShell

La conversione può essere effettuata con poche righe di codice come quelle mostrate di seguito

    [CmdletBinding()] Param(
        [Parameter(Position = 0, Mandatory = $True)]
        [String]
        $FileEXE, 
        
        [Parameter(Position = 1, Mandatory = $False)]
        [String]
        $FileTXT = "$pwd\EseguibileConvertito.txt"
    )
    [byte[]] $dump = Get-Content -encoding byte -path "$FileEXE" -ReadCount 0
    [System.IO.File]::WriteAllLines($FileTXT, ([string]$dump))
    Write-Output "Il file e' stato convertito in $FileTXT"


Innanzitutto andiamo a caricare i parametri passati durante la chiamata dello script. Nella variabile $FileEXE andiamo a caricare il primo parametro passato, obbligatorio, che corrisponde al file eseguibile da convertire.
Il secondo parametro, facoltativo, verrà caricato nella variabile $FileTXT e rappresenta il nome del file di testo in cui verrà salvata la conversione. Nel caso in cui tale parametro non venisse specificato, il file di testo verrà creato nel percorso corrente ($pwd) e gli verrà assegnato il nome EseguibileConvertito.txt.

Le due istruzioni più interessanti sono
    [byte[]] $dump = Get-Content -encoding byte -path "$FileEXE" -ReadCount 0
    [System.IO.File]::WriteAllLines($FileTXT, ([string]$dump))

Con la prima, attraverso il cmdlet Get-Content e il parametro -encoding byte, andiamo a caricare tutti i byte che compongono il file eseguibile in un array di byte. Il parametro -ReadCount 0 permette di leggere tutto il contenuto del file eseguibile in una singola operazione.
Nell'istruzione successiva i byte vengono trasformati in testo per essere scritti all'interno del file di output. Il file di output avrà una dimensione superiore a quella del file eseguibile di partenza. 

Dal seguente link è possibile scaricare lo script Exe2Txt.ps1

Script PowerShell Exe2Txt
FIG 1 - Script PowerShell Exe2Txt.ps1




martedì 23 marzo 2021

Windows 10: Emoji nei nomi dei file e cartelle

Nell'articolo Windows 10: Pannello Emoji (Emoji, Kaomoji e Simboli) abbiamo visto come inserire un emoji all'interno del testo che stiamo digitando online o all'interno di un'applicazione come Microsoft Word. L'interfaccia di selezione degli emoji, richiamabile tramite la combinazione WIN+., funziona in gran parte dei programmi e delle applicazioni che utilizzano lo standard Unicode per la codifica dei caratteri. Tra i programmi compatibili c'è anche la shell di Windows con Esplora file il che rende possibile inserire emoji anche all'interno dei nomi di file e cartelle. Il funzionamento è analogo a quanto visto nel precedente articolo: nel digitare il nome del file o della cartella basta richiamare il pannello degli emoji con l'apposita combinazione di tasti e selezionare l'emoji da inserire (o digitare la parola corrispondente al simbolo grafico, ad es torta, selezionarlo con  tasti freccia e inserirlo premendo invio).
Inserimento emoji nel nome della cartella
FIG 1- Inserimento emoji nel nome della cartella


Emoji nel nome della cartella
FIG 2 - Emoji nel nome della cartella


Anche se Windows supporta il formato Unicode da molti anni non è consigliabile utilizzarlo per inserire simboli grafici all'interno dei nomi di file e cartelle in quanto programmi non aggiornati, o lo stesso prompt dei comandi, non sono in grado di interpretare correttamente tali caratteri visualizzando al loro posto una serie di glifi e punti interrogativi.

Prompt dei comandi non supporta caratteri Unicode
FIG 3 - Prompt dei comandi non supporta caratteri Unicode







lunedì 22 marzo 2021

PowerShell: Monitorare un file di testo in tempo reale

Spesso i sistemisti hanno la necessità di monitorare file di log rilevando eventuali modifiche in tempo reale. PowerShell permette di monitorare un file di testo visualizzano in tempo reale le modiche attraverso il cmdlet Get-Content.

Ad esempio
Get-Content C:\temp\log.txt -Wait

Il comando può essere utilizzato in tutte le versioni di PowerShell ma presenta un grosso limite: visualizza l'intero contenuto del file prima di visualizzare le nuove righe aggiunte. A partire dalla versione 3 di PowerShell (Windows 8 e successivi) al cmdlet è stato aggiunto un nuovo argomento -Tail che consente di iniziare a monitorare il file dalla fine e non mostrando prima il suo intero contenuto.

Ad esempio
Get-Content C:\temp\log.txt -Tail 0 -Wait
Il file inizierà ad essere monitorato dalla fine e non verrà mostrato prima il suo contenuto. Al parametro -Tail è possibile passare il numero di linee, alla fine del file, da includere nel monitoraggio e da visualizzare.
PowerShell, Get-Content
FIG 1 - PowerShell, Get-Content
Get-Content C:\temp\log.txt -Tail 3 -Wait
Visualizza le ultime 3 righe del file prima di visualizzare eventuali nuove righe aggiunte.

E' anche possibile filtrare le linee che contengono un testo specifico. Il comando
Get-Content C:\temp\log.txt  -Tail 0 -Wait | where { $_ -match "ERROR" }
visualizzerà solo le linee aggiunte alla fine del file che contengono la stringa ERROR.





martedì 16 marzo 2021

Windows Server 2019: Schedulare la generazione di rapporti di archiviazione

Nell'articolo precedente (Windows Server 2019: Gestione rapporti di archiviazione) abbiamo visto come generare un rapporto di archiviazione relativo ai file duplicati. In un'azienda può essere utile schedulare settimanalmente o mensilmente questo tipo di rapporti in modo da tenere sotto controllo la presenza di file duplicati, la quota di occupazione disco o verificare che tipo di file gli utenti stanno salvando sul file server. Il procedimento è molto simile a quello visto nell'articolo precedente:
  • Da Server Manager cliccare su Strumenti quindi su Gestione risorse file server.
    Sever Manager, Strumenti
    FIG 1 - Sever Manager, Strumenti

  • Cliccare, con il tasto destro del mouse, su Gestione rapporti di archiviazione e selezionare, dal menu contestuale, la voce Pianifica una nuova attività rapporto.
    Gestione risorse file server
    FIG 2- Gestione risorse file server

  • Nella casella Nome rapporto digitare il nome che si intende assegnare al report. In Dati rapporto selezionare i report che si intende generare (in questo esempio sono state selezionate le voci File di grandi dimensioni e File duplicati).
    Proprietà attività rapporto archiviazione
    FIG 3 - Proprietà attività rapporto archiviazione

  • Selezionare, evidenziandola in blu, l'opzione File di grandi dimensioni e cliccare sul pulsante Modifica parametri.
    Proprietà attività rapporto archiviazione, File di grandi dimensioni
    FIG 4 - Proprietà attività rapporto archiviazione, File di grandi dimensioni

  • Specificare la dimensione minima superata la quale il file viene considerato di grandi dimensioni (in questo caso è stata specificata la dimensione minima di 50 MB) e cliccare su OK.
    Proprietà rapporto
    FIG 5 - Proprietà rapporto

  • Cliccare sulla scheda Ambito e quindi sul pulsante Aggiungi.
    Proprietà attività rapporto archiviazione. Ambito
    FIG 5 - Proprietà attività rapporto archiviazione, Ambito

  • Selezionare la cartella o il disco che si intende verificare (in questo caso la cartella C:\Dati Personali) e cliccare su OK.
    File Duplicati, cartella
    FIG 6 - File Duplicati, cartella

  • Selezionare la scheda Pianificazione. In tale scheda possiamo pianificare la generazione dei report settimanalmente o mensilmente. Lasciare selezionate l'opzione Ogni settimana, selezionare il giorno (ad es. sabato) e inserire l'ora. Terminate le impostazioni cliccare su OK.
    Pianificazione generazione rapporto
    FIG 7 - Pianificazione generazione rapporto

  • Come visibile in FIG 8, la generazione dei report è stata pianificata.
    Elenco report pianificati
    FIG 8 - Elenco report pianificati

  • Per generare subito i rapporti senza attendere la pianificazione basta cliccarci su con il tasto destro del mouse e selezionare Esegui attività rapporto.
    Esegui attività rapporto
    FIG 9 - Esegui attività rapporto

  • Nella finestra successiva possiamo decidere se attendere che il report venga generato e visualizzato oppure generare il report in background. Lasciare selezionata l'opzione Attendi che i rapporti vengano generati, quindi visualizzati e cliccare su OK.
    Genera rapporti archiviazioni
    FIG 10 - Genera rapporti archiviazioni

  • Dopo qualche secondo verranno generati i report sotto forma di documenti HTML che è possibile consultare con il proprio browser.
    Report generati
    FIG 11 - Report generati









sabato 6 marzo 2021

Windows Server 2019: Gestione rapporti di archiviazione

Il tool per la gestione rapporti di archiviazione può essere utile per individuare file duplicati o di grandi dimensioni sul Server file permettendo di valutarne una migliore organizzazione e salvaguardare lo spazio su disco. 

  • Da Server Manager cliccare su Strumenti quindi su Gestione risorse file server.
    Sever Manager, Strumenti
    FIG 1 - Sever Manager, Strumenti

  • Cliccare, con il tasto destro del mouse, su Gestione rapporti di archiviazione e selezionare, dal menu contestuale, la voce Genera rapporti.
    Gestione rapporti di archiviazione
    FIG 2 - Gestione rapporti di archiviazione

  • In Selezionare i rapporti da generare selezionare la casella File duplicati. In fondo è possibile selezionare anche il formato del rapporto: in questo caso lasciare selezionata l'opzione proposta di default (DHTML).
    Proprietà attività rapporto archiviazione
    FIG 3 - Proprietà attività rapporto archiviazione

  • Per specificare la cartella o il disco su cui agire cliccare sulla scheda Ambito e quindi sul pulsante Aggiungi.
    Proprietà attività rapporto archiviazione. Ambito
    FIG 4 - Proprietà attività rapporto archiviazione, Ambito

  • Selezionare la cartella o il disco che si intende verificare (in questo caso la cartella C:\Dati Personali) e cliccare su OK.
    File Duplicati, cartella
    FIG 5 - File Duplicati, cartella

  • Ritornando alla finestra Proprietà attività rapporto archiviazione cliccare su OK.
    Proprietà attività rapporto archiviazione
    FIG 6 - Proprietà attività rapporto archiviazione

  • Nella finestra successiva possiamo decidere se attendere che il report venga generato e visualizzato oppure generare il report in background. Lasciare selezionata l'opzione Attendi che i rapporti vengano generati, quindi visualizzati e cliccare su OK.
    Genera rapporti archiviazioni
    FIG 7 - Genera rapporti archiviazioni

  • Dopo qualche secondo viene generato il report sotto forma di documento HTML. Aprire il documento tramite il browser.
    Report in formato HTML
    FIG 8 - Report in formato HTML
  • Il report ci indica i file duplicati trovati e altre informazioni come la loro dimensione, le cartelle in cui risiedono, le abilitazioni, ecc.
    Rapporto file duplicati
    FIG 9 - Rapporto file duplicati




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}