PowerShell e tutto quello che devi sapere su questa utilità

E se il tuo PC potesse svolgere al posto tuo le attività noiose? Con Windows PowerShell questo è possibile. Ecco come utilizzare PowerShell per automatizzare le attività quotidiane ripetitive che nessuno vuole svolgere più e più volte.

Sommario

Che cos'è PowerShell?

Microsoft PowerShell è un'utilità da riga di comando e un linguaggio di scripting che rappresenta un potente strumento per gli amministratori, consentendo di automatizzare un'ampia gamma di attività per computer e reti. PowerShell contiene componenti del prompt dei comandi ed è basato sul framework .NET. Se stai leggendo di WebTech360, allora devi sapere che PowerShell è lo strumento preferito dagli amministratori IT per gestire reti di grandi dimensioni.

Imparare a usare PowerShell semplificherà molte noiose attività quotidiane. È inoltre possibile apportare modifiche a livello di sistema tramite la rete, senza dover modificare singolarmente ogni server. PowerShell sta diventando una parte essenziale della gestione di ambienti cloud ibridi .

PowerShell può essere utilizzato in molti modi diversi per aiutarti a lavorare in modo più efficiente e a mantenere la tua rete efficiente. Gli utilizzi più basilari includono: la pianificazione di aggiornamenti giornalieri sui sistemi, la generazione di report per i processi correnti, servizi periodici e altro ancora. È vero che molte di queste attività possono essere eseguite tramite l'interfaccia grafica, ma lo scopo di PowerShell è proprio quello di eseguirle più velocemente.

Se si ha un'attività di manutenzione ordinaria la cui configurazione richiede alcuni minuti, è possibile scrivere la stessa funzionalità in un singolo comando PowerShell denominato. Quindi la prossima volta ti basterà aprire lo script e verrà eseguito in background. Padroneggiare la logica di scripting di PowerShell, comprendere il funzionamento degli oggetti e delle variabili (var) e implementarle in modo intelligente sulla rete ti farà chiedere perché non hai utilizzato PowerShell prima.

Questo tutorial illustrerà le basi di PowerShell, che saranno utili per chi è alle prime armi con l'informatica, soprattutto se si ha familiarità con il prompt dei comandi di Windows. L'articolo spiegherà come utilizzare strumenti e comandi di base, come manipolare file e cartelle, comprendere gli oggetti, utilizzare le variabili e gestire server remoti.

Una breve storia delle utilità della riga di comando di Windows

Dopo il rilascio di Windows NT, CMD.EXE divenne l'utilità della riga di comando per Windows. Sebbene CMD.EXE ereditasse alcuni componenti dal suo predecessore DOS (COMMAN.COM), si basava ancora su un linguaggio di scripting piuttosto "primitivo": utilizzava i file di comando di Windows (.CMD e .BAT). L'aggiunta di Windows Scripting Host e dei linguaggi VBScript e JScript ha migliorato notevolmente le capacità di scripting dell'utilità.

Queste tecnologie sono un mix ben bilanciato di utilità avanzate della riga di comando e ambienti di scripting. In realtà il vero problema non è quanti file CMD.EXE, .CMD e Windows Scripting Host possano essere manipolati. Ciò di cui le persone si lamentano e si preoccupano di più è portare a termine alcuni compiti apparentemente semplici.

Utilizzando il "framework" della riga di comando e degli strumenti di scripting, qualsiasi script moderatamente completo richiede una combinazione di comandi batch, Windows Scripting Host ed eseguibili autonomi. Ogni script utilizza convenzioni diverse per l'esecuzione, la richiesta, l'analisi e la restituzione dei dati.

Il debole supporto delle variabili in CMD.EXE, le interfacce incoerenti e l'accesso limitato alle impostazioni di Windows, uniti a un'altra debolezza, rendono più difficile implementare e utilizzare gli script della riga di comando. Forse ti starai chiedendo qual è l'altro punto debole? Si prega di notare che si tratta di testo normale. In queste tecnologie tutto è in formato testo. L'output di un comando o di uno script è testo e deve essere analizzato e riformattato affinché possa fungere da input per il comando successivo. Questo è il punto di partenza di base che PowerShell trae da tutte le shell tradizionali.

Introduzione agli strumenti, ai comandi e ai moduli di PowerShell

I tre concetti introdotti in questa sezione rappresentano solo le nozioni di base per comprendere i concetti chiave che costituiscono il fondamento di PowerShell. Quando si utilizzano i comandi di PowerShell, sarà necessario dedicare più tempo all'apprendimento e alla padronanza di concetti più avanzati.

Strumenti di PowerShell

PowerShell è installato per impostazione predefinita in Windows 10, Windows 7, Windows Server 2008 R2 e nelle versioni più recenti di Windows. Le nuove versioni di PowerShell aggiungono nuove funzionalità e "cmdlet" (termine Microsoft per i comandi di PowerShell, pronunciato "command-lets") e vengono installate con la versione corrispondente di Windows Management Framework (WMF).

Attualmente la versione più recente consigliata è WMF 5.1. In alcuni casi, alcune nuove funzionalità dipendono dal sistema operativo oltre che dalla versione WMF. Ad esempio, Windows 8 e Windows Server 2012 supportano il cmdlet Test-NetConnection, che consente di testare la connettività a una porta TCP/IP specifica , ma questo cmdlet non è disponibile in Windows 7, anche se si esegue la versione più recente di WMF.

Nella maggior parte dei sistemi Windows, gli utenti hanno a disposizione due ambienti PowerShell: la console PowerShell e PowerShell ISE (Integrated Scripting Environment). La console di PowerShell ha l'aspetto di una tradizionale riga di comando, ma racchiude tutte le funzionalità di PowerShell. I nomi delle variabili, i cicli, il completamento automatico dei comandi e il piping sono disponibili nella console di PowerShell.

Per utilizzi più avanzati (come la creazione di script), PowerShell ISE offre il completamento automatico dei comandi, l'evidenziazione del codice e le funzionalità di completamento del codice Intellisense di Microsoft per aiutarti a creare e testare il codice PowerShell. PowerShell ISE consente inoltre di lavorare con più script di PowerShell contemporaneamente utilizzando la navigazione a schede.

cmdlet in PowerShell

La base dei comandi di PowerShell è il cmdlet. Microsoft ha adottato diverse strategie di progettazione durante la creazione di cmdlet in PowerShell.

La prima è la possibilità di dedurre facilmente i nomi dei cmdlet o almeno di renderli più facilmente individuabili. I comandi o cmdlet di PowerShell sono inoltre progettati per essere più semplici da usare, con una sintassi standardizzata, semplificando la creazione di script dall'interfaccia della riga di comando.

I cmdlet utilizzano il formato verbo-nome come in Get-Service, Stop-Service o Import-Csv. La parte verbale del nome di un cmdlet indica l'azione eseguita sul nome. In genere, i cmdlet utilizzati per recuperare informazioni hanno il verbo Get nel nome, ad esempio Get-Process o Get-Content . Il comando utilizzato per modificare qualcosa di solito inizia con il verbo Set , mentre per aggiungere una nuova entità da qualche parte di solito inizia con Add o New .

In secondo luogo, anche ai parametri comunemente utilizzati in PowerShell vengono assegnati nomi standardizzati. Ad esempio, il parametro -ComputerName consente l'esecuzione del cmdlet su uno o più computer remoti. -Credential viene utilizzato per fornire un oggetto di autenticazione, contenente le credenziali utente, per eseguire un comando come utente specifico.

Moduli in PowerShell

È possibile utilizzare alias sia per i cmdlet che per i parametri per risparmiare tempo nella digitazione, riducendo così la lunghezza complessiva del comando (molto utile quando si concatenano più comandi). Sebbene questi alias non utilizzino sempre convenzioni di denominazione standard, riflettono comunque le tradizionali utilità della riga di comando.

In PowerShell, alias quali DIR, CD, DEL e CLS corrispondono rispettivamente ai cmdlet Get-ChildItem, Set-Location, Remove-Item e Clear-Host. Gli alias dei parametri possono funzionare in due modi: possono utilizzare un alias predefinito fornito dal cmdlet oppure possono essere creati immettendo un numero di caratteri sufficiente a creare una corrispondenza univoca tra i parametri supportati dal cmdlet.

Gestione di file e cartelle

La maggior parte degli amministratori di sistema deve gestire file e cartelle nel corso del proprio lavoro, che si tratti di spostare una cartella in un'altra posizione sul server, di archiviare file di registro o di cercare file di grandi dimensioni. Nel caso in cui le stesse operazioni vengano ripetute su molti file, l'utilizzo di PowerShell per automatizzarle costituirà una soluzione efficace per risparmiare tempo.

Per trovare file e directory, uno dei primi strumenti da riga di comando che un amministratore avrebbe imparato ai vecchi tempi dell'informatica era il comando dir. Dir elencherà i file e le directory contenuti nella directory specificata.

PowerShell ha un comando simile sotto forma di cmdlet Get-ChildItem . Get-ChildItem consente di creare rapidamente un elenco di file in una directory in modo tale da poter manipolare i file tramite un comando pipe o assegnare l'output a una variabile.

È possibile utilizzare Get-ChildItem semplicemente specificando un percorso, tramite la pipeline, utilizzando il parametro -Path o subito dopo il nome del cmdlet. Per adattare la risposta restituita da Get-ChildItem, è necessario considerare alcuni parametri resi disponibili dal cmdlet.

Il parametro -Filter è uno dei metodi con cui è possibile cercare i file. Per impostazione predefinita, Get-ChildItem restituisce solo i figli diretti della directory di destinazione. Questa funzionalità può essere estesa utilizzando l'opzione aggiuntiva -Recurse , che esegue ricerche ricorsive nelle directory contenute nella directory corrente.

In PowerShell 4.0 Get-ChildItem ha aggiunto la possibilità di limitare i risultati a file o directory utilizzando l'opzione –File o –Directory . Nelle versioni precedenti di PowerShell il risultato doveva essere passato a Where-Object, filtrando in base alla proprietà PSIsContainer per effettuare questa determinazione. Di seguito è riportato un esempio di entrambe le tecniche utilizzate per restituire le cartelle contenute in C:Users:

Get-ChildItem C:Users -Directory Get-ChildItem C:Users | Where-Object {$_.PSIsContainer –eq $true}

Per rilevare file nascosti o di sistema, è necessario utilizzare  -Force . In PowerShell 4.0 e versioni successive, Get-ChildItem può essere utilizzato anche per restituire solo file nascosti, di sola lettura o di sistema utilizzando rispettivamente -Hidden, -ReadOnly e –System . Una funzionalità simile poteva essere ottenuta nelle versioni precedenti filtrando la proprietà Mode utilizzando Where-Object:

Get-ChildItem C:Users | Where-Object {$_.Mode -like '*R*'}

Controlla se il file esiste

Di solito, quando lavoriamo con i file, tutto ciò che ci serve sapere è se il file esiste o se il percorso della directory è valido. PowerShell fornisce un cmdlet per eseguire questa operazione nel formato Test-Path, che restituisce un valore true o false.

Test-Path viene utilizzato come misura precauzionale prima di tentare di copiare o eliminare un file specifico.

Copia, sposta ed elimina i file

Copy-Item: copia uno o più file o directory da una posizione, specificata dal parametro -Path, alla posizione specificata dall'opzione -Destination.

Move-Item: sposta un file o una cartella.

Quando si copiano o si spostano strutture di directory, è necessario utilizzare -Recurse per far sì che il cmdlet esegua l'azione sulla directory e sul suo contenuto. In alcuni casi, -Force è necessario , ad esempio quando un file di sola lettura viene sovrascritto da un'operazione di copia.

Remove-Item: Elimina file, cartella.

Si consiglia di utilizzare l'opzione -Force quando si incontra un file di sola lettura, mentre si consiglia di utilizzare l'opzione -Recurse quando si elimina una directory e il suo contenuto.

Utilizzo di PowerShell -WhatIf e -Confirm

Prima di effettuare qualsiasi cancellazione seria e di massa, utilizzare -WhatIf . -WhatIf consente di vedere cosa accadrebbe se venisse eseguito uno script o un comando e se ciò avrebbe un impatto negativo potenziale sull'eliminazione di importanti dati aziendali. Vale anche la pena notare che -WhatIf non è limitato alle operazioni sui file, ma è ampiamente utilizzato in PowerShell.

Per gli script che intendi eseguire manualmente o, peggio, che hanno comandi dipendenti che vengono eseguiti manualmente, prendi in considerazione l'utilizzo di -Confirm . Ciò consente di richiedere l'interazione dell'utente prima che l'azione abbia effettivamente luogo.

Script di PowerShell = file batch potenziati

PowerShell è scritto nel linguaggio .NET e si basa in gran parte su .NET Framework. Ecco perché PowerShell è stato progettato come linguaggio di scripting e di utilità orientato agli oggetti. Tutto in PowerShell viene trattato come un oggetto .NET Framework completamente funzionale. Comando che fornisce un set di oggetti che possono essere utilizzati utilizzando le proprietà e i metodi di quel tipo di oggetto. Quando si desidera inoltrare l'output di un comando a un altro, PowerShell passa effettivamente l'oggetto, non solo l'output di testo della prima riga di comando. Ciò fornisce al comando successivo l'accesso completo a tutte le proprietà e ai metodi dell'oggetto nella pipeline.

Trattare ogni cosa come un oggetto e la possibilità di accettare oggetti tra i comandi rappresenta un grande cambiamento teorico per le utilità della riga di comando. Detto questo, PowerShell funziona ancora come una tradizionale utilità shell. Comandi, script ed eseguibili possono essere digitati ed eseguiti dalla riga di comando e i risultati vengono visualizzati in formato testo. I file .CMD e .BAT di Windows, i file VBScript, JScript e gli eseguibili che vengono eseguiti all'interno di CMD.EXE continuano a essere eseguiti in PowerShell. Tuttavia, poiché non sono orientati agli oggetti, non hanno accesso completo agli oggetti creati e utilizzati in PowerShell. Questi script e queste esecuzioni legacy continueranno a trattare tutto come testo, ma è possibile combinare PowerShell con numerose altre tecnologie. Questo è un punto molto importante se si desidera iniziare a utilizzare PowerShell con una raccolta di script esistenti che non possono essere convertiti tutti in una volta.

Parametri di PowerShell spiegati

I cmdlet possono accettare parametri per modificare il loro comportamento. Quando si esegue un cmdlet o una funzione, è possibile fornire valori di parametri per specificare cosa, quando, dove e come viene eseguito ogni comando di PowerShell.

Ad esempio, Get-Process recupererà ed elencherà tutti i processi in esecuzione nel sistema operativo:

PowerShell e tutto quello che devi sapere su questa utilità
Get-Process elenca tutti i processi in esecuzione.

Ma cosa succede se si vuole ottenere solo un progresso specifico? È possibile farlo utilizzando i parametri. Ad esempio, per ottenere tutti i processi Slack, puoi utilizzare il parametro Name con il cmdlet Get-Process:

Get-Process -Name Slack

Quindi vedrai solo i processi denominati "slack":

PowerShell e tutto quello che devi sapere su questa utilità
Utilizzo di Get-Process con parametri

Suggerimento : alcuni parametri sono "posizionali", ovvero i loro nomi sono facoltativi. In questo caso, Get-Process -Name Slack e Get-Process Slack eseguono entrambi la stessa attività.

Ogni cmdlet accetterà diversi tipi di parametri. Utilizzare il comando Get-Help per visualizzare i parametri accettati dal cmdlet nella sezione SINTASSI.

Get-Help Get-Process

Verrà visualizzato un elenco di tutti i modi possibili in cui è possibile eseguire il cmdlet specificato:

PowerShell e tutto quello che devi sapere su questa utilità
parametri della sintassi del cmdlet

In questo caso, il cmdlet Get-Process accetta parametri quali Name, Id, ComputerName, Module, FileVersionInfo e altri parametri comuni. I simboli qui significano:

Simbolo

Nome

Senso

 

Tamburo

Il parametro non accetta input

-

Trattino

Specificare il nome del parametro

<>

parentesi graffe

Segnaposto per il testo

[]

Parentesi

Il parametro può accettare uno o più valori.

{}

parentesi graffe

Il parametro accetta un set di valori.

I parametri accettano un set di valori che indicano il tipo di dati richiesti, ad esempio stringa, numero intero, valore booleano o DateTime. Ad esempio, il seguente comando:

Get-Process [[-Name] ]

... significa che il parametro Nome accetta uno o più valori stringa, mentre questo comando:

Get-Process -Id 

... significa che il parametro Id accetta uno o più valori interi.

Nell'esempio Get-Process precedente è stato utilizzato il parametro Name per restringere i risultati. Tuttavia, se si desidera restringere il campo a un processo più specifico, è possibile utilizzare il parametro ID , che richiede un numero intero come indicato nella sua sintassi.

Get-Process -Id 3016

Quindi vedrai solo un processo nell'elenco:

PowerShell e tutto quello che devi sapere su questa utilità
Utilizzo del parametro Id nei cmdlet

Crea pipeline

PowerShell tratta tutti i dati come oggetti. Per creare uno script, questi oggetti vengono eseguiti tramite una serie di cmdlet o funzioni collegate dal simbolo della barra verticale (|). Per uno script efficiente è importante scegliere i cmdlet giusti e collegarli in una sequenza logica tramite una pipeline.

Supponiamo che tu voglia creare uno script per ordinare e visualizzare i 5 file che occupano più spazio in una cartella. Esistono metodi più efficaci per creare uno script di ordinamento dei file, ma quello che segue è semplice e facile da capire:

PowerShell e tutto quello che devi sapere su questa utilità
Script Sort-LargeFiles PS1

Per fare ciò in PowerShell, utilizzare una pipeline simile a questa:

Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
 | Select-Object -First 5 | Format-Table Name, Length -AutoSize

Salva la pipeline come script PS1

Ora che abbiamo una pipeline funzionante, puoi salvarla come file script PS1 in modo da non doverla importare ogni volta che la usi.

Il modo più semplice per creare un file PS1 è incollare lo script nel Blocco note e salvare il file con estensione .ps1.

PowerShell e tutto quello che devi sapere su questa utilità
Crea uno script con Blocco note

Dopo aver creato il file PS1, puoi utilizzarlo in PowerShell eseguendo ./ScriptName.ps1 :

PowerShell e tutto quello che devi sapere su questa utilità
Utilizzo dello script PS1

Suggerimento : se si verifica un errore di autorizzazioni, la soluzione più rapida è eseguire PowerShell con diritti di amministratore durante l'esecuzione dello script.

Congratulazioni! Ora puoi creare uno script PS1 di PowerShell.

Esempio di uno script di PowerShell

Leggere e comprendere le meraviglie delle nuove tecnologie è una cosa, ma usarle davvero è un'altra! Nel resto dell'articolo svilupperemo uno script di PowerShell per dimostrarne le capacità e l'utilizzo.

DIR è uno dei comandi più comuni in CMD.EXE . Questo comando mostra tutti i file e le sottodirectory contenuti in una directory padre (come mostrato nella Figura 1). Oltre al nome di ciascun oggetto, le informazioni fornite includono anche la data e l'ora dell'ultimo aggiornamento e la dimensione di ciascun file. DIR visualizza anche la dimensione complessiva di tutti i file presenti nella directory, nonché il numero totale di file e di sottodirectory.

PowerShell e tutto quello che devi sapere su questa utilità
Figura 1

Anche l'esecuzione di DIR in PowerShell produce un elenco di directory come quello della Figura 2, ma è leggermente diverso. PowerShell non ha un comando DIR, ma ha Get-ChildItem, che esegue la stessa funzione. In PowerShell, DIR è un alias per Get-ChildItem. In questo post non ho intenzione di addentrarmi nell'argomento degli alias. In PowerShell DIR può essere considerato l'abbreviazione di Get-ChildItem.

DIR in PowerShell fornisce molte delle stesse informazioni menzionate sopra: un elenco di file e cartelle, la data e l'ora dell'ultimo aggiornamento e la dimensione di ciascun file. Tuttavia mancano le informazioni di riepilogo fornite da DIR in CMD.EXE: dimensione totale di tutti i file nella directory, numero totale di file e numero totale di sottodirectory.

PowerShell e tutto quello che devi sapere su questa utilità
Figura 2

Per lo scenario di esempio, sarà necessario creare uno script di PowerShell che simuli il comando CMD.EXE DIR. Di seguito spiegherò le parti più essenziali di uno script.

DIR.PS1: Intestazione

Uno script di PowerShell è costituito da comandi di PowerShell in un file di testo normale con estensione .PS1. Invece di DIR, utilizzerai un file di testo denominato DIR.PS1.

Per eseguire lo script, digitare il seguente comando nella schermata PowerShell:

.DIR.PS1 X:Folder

Dove X è la lettera della partizione dell'unità (ad esempio C, D, E) e Cartella è il nome della cartella.

Per conoscere alcune informazioni sulla partizione dell'unità, è necessario utilizzare Windows Management Instrumentation (WMI). I dettagli di WMI vanno oltre lo scopo di questo articolo, pertanto non li tratteremo qui. Ma il codice PowerShell riportato di seguito è abbastanza semplice da comprendere anche senza la necessità dell'aiuto di WMI. È possibile creare una variabile “$filter” da utilizzare con il comando Get-WmiObject. Questa variabile filtro indica al comando Get-WmiObject che si desiderano informazioni solo su un'unità specifica. Il risultato del comando Get-WmiObject viene memorizzato in una variabile denominata $volInfo. Ricorda che in PowerShell tutto è un oggetto; $volInfo è ora anche un oggetto risultato restituito da Get-WmiObject.

$filter = "DeviceID = '" + $drive + ":'"
$volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter

Ora puoi accedere a tutti gli oggetti e metodi associati all'oggetto. Il numero di serie del volume è accessibile tramite la proprietà VolumeSerialNumber. Le informazioni restituite sono una stringa di 8 caratteri. Ma solitamente è meglio formattarlo come quattro numeri separati, separati da un trattino. può essere fatto in modo simile alla riga sottostante. Il trattino alla fine della prima riga è il carattere di continuazione della riga in PowerShell. Fondamentalmente comunica a PowerShell che la riga non è interrotta ma include la riga successiva. Quando si scrive un codice non è necessario separare le righe, ma per ridurre la larghezza e rendere il codice più facile da leggere, è opportuno farlo.

$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + "-" + `
$volInfo.VolumeSerialNumber.SubString(4, 4)

Ora che hai l'oggetto $volInfo, puoi scrivere le informazioni dell'intestazione DIR sullo schermo. Se l'unità non ha un nome, il testo visualizzato sullo schermo sarà leggermente diverso rispetto a quello visualizzato se l'unità ha un nome. Per verificare se la proprietà VolumeName è una stringa vuota oppure no, si utilizza una semplice istruzione If-Else. Il comando Write-Host viene utilizzato per scrivere singole righe di comando sullo schermo.

If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")

Il carattere “ `n ” all’inizio e alla fine del comando Write-Host viene utilizzato per inserire nuove righe prima e dopo il testo. Il comando Write-Host aggiunge una nuova riga alla fine di ogni riga. Quindi l'effetto di " `n " è quello di creare righe vuote prima e dopo la riga di testo.

Hai notato “-eq” nel comando If? È un operatore di confronto di uguaglianza. Nella tabella sottostante sono riportati tutti gli operatori di confronto:

-eq, -ieq Confronta per
-ne, -ine Il confronto non è uguale
-gt, -igt Confronta maggiore di
-ge, -ige Confronta maggiore o uguale a
-lt, -ilt Confronta più piccolo di
-le, -ile Confronta minore o uguale a

Il carattere -i prima degli operatori di confronto indica che l'operatore non distingue tra maiuscole e minuscole.

PowerShell e tutto quello che devi sapere su questa utilità
Figura 3: Dati di output dello script attualmente in uso

DIR.PS1: Elenco di file/cartelle

Ora sei pronto per visualizzare il contenuto e le proprietà di questa cartella. La prima cosa da fare è chiamare il comando Get-ChildItem di PowerShell per ottenere un set di file e passarli allo script come parametro. Il comando Get-ChildItem recupererà una raccolta di oggetti file e cartelle, non solo i loro nomi, ma invierà anche questi oggetti direttamente al comando Sort-Object per ordinarli. Per impostazione predefinita, il comando Sort-Object ordina gli oggetti in base alla proprietà Nome. Quindi non è necessario descrivere altri parametri. L'insieme ordinato di oggetti verrà quindi memorizzato in una variabile denominata $items.

$items = Get-ChildItem $args[0] | Sort-Object

Una volta che si dispone di una raccolta di oggetti file e cartelle, è necessario scorrerli e visualizzare le funzionalità appropriate. Il comando utilizzato a questo scopo è ForEach. Per ogni file o cartella, le caratteristiche visualizzate saranno la data e l'ora dell'ultimo aggiornamento, il nome, la lunghezza o la dimensione del file. Le stringhe dall'aspetto strano all'interno delle parentesi sono codici di formato stringa .NET. Vengono utilizzati per allineare i campi a sinistra/destra e per formattare date, orari e numeri. Non è molto importante comprendere questi codici di formato stringa, poiché non sono essenziali per la natura di questo script.

Il comando If è quello che consente di determinare se un oggetto è una directory oppure no. Se il primo carattere dell'attributo Mode è "d", l'oggetto è una directory. È necessario effettuare un secondo controllo perché il codice scritto per le directory è spesso diverso dal codice scritto per i file.

Notare la riga $totalDirs++ all'interno dell'istruzione If. Questo è il contatore responsabile di tenere traccia del numero di cartelle. Allo stesso modo, esiste una variabile $totalFiles che viene utilizzata per tenere traccia della dimensione totale di tutti i file. Questi valori vengono sempre calcolati durante l'esecuzione. Tuttavia, vengono visualizzati solo al termine del processo di elencazione dei file.

ForEach ($i In $items)
{
$date = "{0, -20:MM/dd/yyyy hh:mm tt}" -f $i.LastWriteTime
$file = $i.Name
If ($i.Mode.SubString(0, 1) -eq "d")
{
$totalDirs++
$list = $date + " {0, -15}" -f "
" + " " + $file
}
Else
{
$totalFiles++
$size = "{0, 18:N0}" -f $i.Length
$list = $date + $size + " " + $file
}
$totalSize += $i.Length
Write-Host $list
}

PowerShell e tutto quello che devi sapere su questa utilità
Figura 4: Visualizza i dati di output dello script aggiornato.

DIR.PS1: Piè di pagina

L'unica cosa rimasta da fare è scrivere sullo schermo il numero totale di file, cartelle, la dimensione totale di tutti i file e lo spazio libero su questa partizione del disco. Per fare ciò sarà necessario utilizzare le variabili contatore ($totalFiles, $totalDirs, $totalSize) create nella sezione precedente. È possibile scoprire quanto spazio libero è disponibile tramite la variabile $volInfo creata all'inizio dello script.

Write-Host ("{0, 16:N0}" -f $totalFiles + " File(s)" + `
"{0, 15:N0}" -f $totalSize + " bytes")
Write-Host ("{0, 16:N0}" -f $totalDirs + " Dir(s)" + `
"{0, 16:N0}" -f $volInfo.FreeSpace + " bytes free`n")

PowerShell e tutto quello che devi sapere su questa utilità
Figura 5: Visualizza i dati di output completi dello script.

Le previsioni e i miglioramenti possono essere

Sebbene lo script creato produca un output pressoché identico al comando CMD.EXE DIR, ci sono alcune avvertenze di cui è opportuno essere a conoscenza e alcuni miglioramenti che possono essere apportati.

  • Questo script non esegue alcun controllo degli errori.
  • Se non viene passato un percorso valido allo script, lo script fallirà e verrà visualizzato un messaggio di errore di PowerShell.
  • Il numero totale di directory specificato nello script è 2 in meno rispetto al risultato del comando CMD.EXE DIR perché il comando Get-ChildItem non conta i due “.” e “..” come in CMD.EXE.
  • Lo script ordina solo in base al nome del file, al nome della cartella e non prevede altri ordinamenti in base agli attributi.
  • Lo script non è in grado di visualizzare il contenuto della cartella e di tutte le sottocartelle.

Come PowerShell ti aiuta ad automatizzare qualsiasi cosa sul tuo PC

Scrivi semplici script di PowerShell

È possibile utilizzare PowerShell per automatizzare quasi ogni cosa, ad esempio rinominare i file in batch per coerenza o avviare automaticamente le applicazioni. Scriviamo alcuni semplici script di Windows PowerShell per vedere come funziona.

Nota : se si verifica un errore durante l'esecuzione dello script relativo alla policy di esecuzione, potrebbe essere necessario consentire temporaneamente l'esecuzione dello script eseguendo "Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass"

Rinomina in batch i file in una cartella

Puoi utilizzare PowerShell per copiare, spostare ed eliminare file sul tuo PC. È anche possibile rinominare in batch i file di uno specifico tipo. Ad esempio, ecco come puoi rinominare più file di testo sostituendo il prefisso "oldco" con "newco" nei nomi dei file:

Get-ChildItem -Path "C:\CompanyFiles" -Filter "*.txt" | Rename-Item -NewName {$_.Name -replace "oldco","newco"}

Nello script sopra, ".txt" è il filtro dell'estensione file. Puoi modificarlo e impostarlo su .jpg, .docx, ecc. per cercare diversi tipi di file.

Avvio automatico dell'applicazione

Se apri lo stesso set di applicazioni ogni giorno, puoi scrivere uno script di PowerShell per avviarle con un solo clic:

#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"

Incolla lo script in un file del Blocco note e salvalo come LaunchFavoriteApps.ps1. Quindi, fai semplicemente doppio clic sul file per avviare tutte le applicazioni elencate nello script.

Copia i file importanti in una posizione di backup

È possibile eseguire periodicamente il backup dei file importanti in una posizione di backup utilizzando il seguente script. Assicurati di modificare i percorsi di origine e destinazione secondo necessità:

#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse

Scrivi uno script di PowerShell per organizzare automaticamente i file quotidianamente

A causa dei numerosi tipi di file scaricati ogni giorno, la cartella Download può riempirsi rapidamente di file di ogni genere sparsi qua e là. Per risolvere questo problema, possiamo scrivere uno script di PowerShell che, alla fine di ogni giornata, ordina i file scaricati in cartelle in base al tipo di file.

Apri un nuovo file del Blocco note e incolla lo script seguente. Assicurati di modificare il percorso della cartella di origine nello script in modo che corrisponda al percorso della cartella Download:

# Change the source folder path below
$sourcePath = "E:\Downloads"
# Add file mapping folder names; the Others folder includes all the files that do not match file types in the other categories
$fileTypes = @{
"Documents" = @("*.docx", "*.pdf", "*.txt")
"Images" = @("*.jpg", "*.png", "*.gif")
"Media" = @("*.mp4", "*.mp3", "*.mov")
"Zip" = @("*.zip", "*.rar")
"ISO" = @("*.iso")
"Others" = @("*")
}
# Iterate through each folder type and prepare a destination folder for organizing files
foreach ($folder in $fileTypes.Keys) {
# Create the destination folder path
$destPath = Join-Path -Path $sourcePath -ChildPath $folder
# Check if the destination folder exists, and create it if it doesn't
if (!(Test-Path -Path $destPath)) {
New-Item -ItemType Directory -Path $destPath | Out-Null
}
# Move matching files from the source folder to the destination folder based on file type patterns
foreach ($pattern in $fileTypes[$folder]) {
Get-ChildItem -Path $sourcePath -Filter $pattern -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
Move-Item -Path $_.FullName -Destination $destPath -Force -ErrorAction Stop
Write-Output "Moved: $($_.FullName) to $destPath"
} catch {
Write-Warning "Failed to move file: $($_.FullName). Error: $_"
}
}
}
}
Write-Output "Files organized successfully!"

Per salvare il file, fare clic su File > Salva con nome e immettere OrganizeDownloadsFolder.ps1 come nome del file. Quindi fare clic su Salva come tipo e selezionare Tutti i file . Fare doppio clic sul file OrganizeDownloadsFolder.ps1 per eseguire lo script.

Pianificare ed eseguire attività

Naturalmente, la scrittura di script fa parte del processo di automazione. La seconda parte consiste nell'assicurarsi che lo script possa essere eseguito automaticamente per svolgere l'attività. Per fare ciò, possiamo creare attività pianificate per eseguire lo script quotidianamente o quando necessario.

Aprire PowerShell, quindi copiare e incollare lo script seguente e premere Invio . Assicurati di sostituire 'J:\OrganizeDownloadsFolder.ps1' con il percorso completo del file dello script OrganizeDownloadsFolder.ps1 .

$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File 'J:\OrganizeDownloadsFolder.ps1'"
$trigger = New-ScheduledTaskTrigger -Daily -At "5:00 PM"
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "OrganizeDownloadsFolderDaily"

Una volta terminato, premere Invio . Lo script creerà un'attività pianificata in Utilità di pianificazione per eseguire lo script di organizzazione dei file ogni giorno alle 17:00. Se preferisci un orario diverso, puoi modificarlo nello script qui sopra.

Inoltre, puoi usare PowerShell per automatizzare altre attività quotidiane, come uno script di monitoraggio dello spazio che ti avvisa quando lo spazio libero sull'unità principale si esaurisce, la protezione tramite password di batch di documenti PDF e persino l'applicazione di sfondi animati dalla cartella delle immagini.

Sebbene PowerShell sia un linguaggio di scripting e un'utilità potente, comprenderlo e utilizzarlo richiede poco tempo, soprattutto se non si ha familiarità con l'ambiente .NET Framework. Spero che questo articolo, insieme allo script di esempio, possa essere utile a chiunque voglia comprendere PowerShell. Ma lo script creato nell'esempio è piuttosto semplice. Credo che possa essere costruito e sviluppato in modo più completo per rispondere meglio alle applicazioni più complesse.

Sign up and earn $1000 a day ⋙

Leave a Comment

Come utilizzare lapp CK Club di Circle K per ricevere offerte interessanti

Come utilizzare lapp CK Club di Circle K per ricevere offerte interessanti

Per ricevere più velocemente le informazioni promozionali da Circle K, dovresti installare l'app CK Club. L'applicazione salva i pagamenti effettuati durante lo shopping o presso Circle K, nonché il numero di francobolli raccolti.

Instagram consentirà reel lunghi fino a 3 minuti

Instagram consentirà reel lunghi fino a 3 minuti

Instagram ha appena annunciato che consentirà agli utenti di pubblicare video Reels lunghi fino a 3 minuti, il doppio del precedente limite di 90 secondi.

Come visualizzare le informazioni sulla CPU del Chromebook

Come visualizzare le informazioni sulla CPU del Chromebook

Questo articolo ti guiderà su come visualizzare le informazioni sulla CPU e controllarne la velocità direttamente sul tuo Chromebook.

8 cose fantastiche che puoi fare con un vecchio tablet Android

8 cose fantastiche che puoi fare con un vecchio tablet Android

Se non vuoi vendere o regalare il tuo vecchio tablet, puoi utilizzarlo in 5 modi: come cornice digitale di alta qualità, lettore musicale, lettore di e-book e riviste, assistente per le faccende domestiche e come schermo secondario.

Come ottenere unghie bellissime in modo rapido

Come ottenere unghie bellissime in modo rapido

Vuoi avere unghie belle, lucide e sane in tempi rapidi. Di seguito troverai dei semplici consigli utili per avere delle unghie bellissime.

I segreti dellispirazione per i colori che solo i designer conoscono

I segreti dellispirazione per i colori che solo i designer conoscono

In questo articolo elencheremo suggerimenti ispirati al colore, condivisi dai migliori designer della community Creative Market, per consentirti di ottenere ogni volta la combinazione di colori perfetta.

Tutto ciò che ti serve per sostituire il tuo laptop con un telefono

Tutto ciò che ti serve per sostituire il tuo laptop con un telefono

È davvero possibile sostituire il computer portatile con il telefono? Sì, ma per trasformare il tuo telefono in un laptop avrai bisogno degli accessori giusti.

ChatGPT sarà presto in grado di vedere tutto ciò che accade sul tuo schermo

ChatGPT sarà presto in grado di vedere tutto ciò che accade sul tuo schermo

Una cosa importante nel video completo dell'evento è che è stata fatta una demo della futura funzionalità dell'app ChatGPT, ma non sono stati condivisi dettagli concreti. È la capacità di ChatGPT di vedere tutto ciò che accade sullo schermo del dispositivo dell'utente.

Lintelligenza artificiale sta imparando a ingannare gli umani nonostante sia stata addestrata ad essere onesta

Lintelligenza artificiale sta imparando a ingannare gli umani nonostante sia stata addestrata ad essere onesta

Secondo un nuovo studio, molte delle migliori IA, nonostante siano state addestrate ad essere oneste, imparano a ingannare durante l'addestramento e inducono sistematicamente gli utenti a credere in false credenze.

Come modificare le domande su ChatGPT

Come modificare le domande su ChatGPT

ChatGPT ora offre un'opzione per modificare le domande, così gli utenti possono modificare la domanda o il contenuto che stanno scambiando con ChatGPT.

Come riconoscere i codici QR falsi e proteggere i tuoi dati

Come riconoscere i codici QR falsi e proteggere i tuoi dati

I codici QR sembrano piuttosto innocui, finché non ne scansioni uno dannoso e ti ritrovi con qualcosa di pericoloso nel sistema. Se vuoi proteggere il tuo telefono e i tuoi dati, ecco alcuni modi per identificare i codici QR falsi.

Qualcomm lancia il modem X85 5G con una serie di notevoli miglioramenti

Qualcomm lancia il modem X85 5G con una serie di notevoli miglioramenti

Sul palco del MWC 2025, Qualcomm ha fatto scalpore presentando l'ottava generazione del suo modem 5G, denominato X85, che dovrebbe essere utilizzato negli smartphone di punta in arrivo entro la fine dell'anno.

La nuova tecnologia consente ai telefoni di cambiare colore in modo flessibile

La nuova tecnologia consente ai telefoni di cambiare colore in modo flessibile

Hai un iPhone 16 "Ultramarine" alla moda, ma un bel giorno all'improvviso ti senti stufo di quel colore; Cosa farai?

Microsoft integra DeepSeek nella piattaforma PC Copilot+

Microsoft integra DeepSeek nella piattaforma PC Copilot+

A gennaio, Microsoft ha annunciato l'intenzione di portare le versioni ottimizzate per NPU del modello DeepSeek-R1 direttamente sui computer Copilot+ dotati di processori Qualcomm Snapdragon X.

Differenza tra le funzioni SE e Cambia in Excel

Differenza tra le funzioni SE e Cambia in Excel

L'istruzione SE è una funzione logica comune in Excel. L'istruzione SWITCH è meno nota, ma in alcuni casi è possibile utilizzarla al posto dell'istruzione IF.