Visualizzazione post con etichetta Get-Content. Mostra tutti i post
Visualizzazione post con etichetta Get-Content. Mostra tutti i post

mercoledì 13 luglio 2022

PowerShell: Verificare se un account utente è disabilitato/abilitato in Active Directory

Per verificare se un account utente è abilitato o disabilitato in Active Directory è possibile utilizzare il seguente script PowerShell
 $User = Read-Host -Prompt "Inserisci il nome dell'account";    
 Get-ADUser -Filter {name -like $User -or samaccountname -like $User} | Select Name, SamAccountName, Enabled   
Verifica account
FIG 1 - Verifica account


Se si dispone di un file contenente l'elenco degli utenti da verificare è possibile utilizzare il seguente codice andando a sostituire la stringa C:\Temp\ElencoUtenti.txt con il percorso e il nome del file contenente l'elenco.
 $userList = "C:\Temp\ElencoUtenti.txt"  
 $users = Get-Content $userList  
 foreach ($user in $users){  
  Get-ADUser -Filter {name -like $user -or samaccountname -like $user} | Select Name, SamAccountName, Enabled   
 }  





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




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.





giovedì 10 novembre 2016

PowerShell: Mandare in stampa determinati file presenti in una cartella

Per mandare in stampa un determinato file utilizzando PowerShell è possibile utilizzare il comando
Start-Process -FilePath <path_e_nome_file> –Verb Print

Ad es. per stampare il file c:\temp\list.pdf il comando da eseguire è
Start-Process -FilePath c:\temp\list.pdf –Verb Print

Il file verrà aperto, mandato in stampa sulla stampante predefinita e quindi verrà chiuso.

Per stampare tutti i file PDF contenuti nella cartella c:\temp\ 
Dir c:\temp\*.pdf | Foreach-Object { Start-Process -FilePath $_.FullName –Verb Print }
PowerShell, stampare tutti i file PDF presenti in una cartella
FIG 1 - PowerShell, stampare tutti i file PDF presenti in una cartella

In caso di file di solo testo si può scegliere di utilizzare i cmdlet Get-Content e Out-Printer
Get-Content c:\temp\list.txt | Out-Printer