Come ottenere la posizione corrente dello script PowerShell

  1. Utilizzo del cmdlet Split-Path per ottenere la posizione attuale dello script PowerShell
  2. Utilizzo della variabile $PSScriptRoot per ottenere la posizione attuale dello script PowerShell
  3. Ottieni la directory di lavoro in Windows PowerShell per ottenere la posizione attuale dello script PowerShell
  4. Conclusione
Come ottenere la posizione corrente dello script PowerShell

In questa guida completa, approfondiamo vari metodi per determinare la posizione attuale di uno script PowerShell, un aspetto fondamentale che migliora la portabilità e l’affidabilità degli script. Ogni metodo discusso si adatta a diverse versioni di PowerShell e scenari di scripting, garantendo una vasta applicabilità.

Iniziamo con il cmdlet Split-Path, un approccio versatile per le versioni precedenti di PowerShell, per poi passare alla comodità di $PSScriptRoot in PowerShell 3 e versioni successive. Inoltre, esploriamo il robusto metodo $ExecutionContext e il semplice cmdlet Get-Location, adatto a diversi ambienti e requisiti.

Infine, semplifichiamo il processo con l’alias familiare pwd, dimostrando l’adattabilità di PowerShell.

Utilizzo del cmdlet Split-Path per ottenere la posizione attuale dello script PowerShell

Prima di PowerShell 3, non c’era modo migliore di interrogare la proprietà MyInvocation.MyCommand.Definition utilizzando il cmdlet Split-Path.

Lo scopo principale di utilizzare Split-Path con $global:MyInvocation è estrarre il percorso della directory dello script PowerShell attualmente in esecuzione. Questo è particolarmente utile quando gli script devono interagire con altri file o directory nella stessa posizione dello script o quando il comportamento dello script dipende dalla sua posizione.

$scriptDirectory = Split-Path -Parent $MyInvocation.MyCommand.Definition
Write-Host "Current script location: $scriptDirectory"

In questo esempio, utilizziamo Split-Path con il parametro -Parent per isolare il componente della directory dal percorso completo dello script in esecuzione. Questo percorso è ottenuto da $MyInvocation.MyCommand.Definition.

Il percorso della directory risultante è memorizzato nella variabile $scriptDirectory.

Infine, utilizziamo Write-Host per stampare questo percorso della directory, fornendo una chiara e immediata visualizzazione della posizione attuale dello script. Questo metodo è non solo efficiente ma garantisce anche compatibilità tra diverse versioni di PowerShell.

Output:

ottieni la posizione attuale dello script di powershell - output 1

Vale la pena notare che questo funzionerà solo se si include la sintassi sopra in un file PowerShell (.ps1) salvato. Eseguire la sintassi sopra nella riga di comando restituirà un’eccezione Null.

Vale anche la pena notare che eseguire la sintassi sopra nell’Integrated Scripting Environment (ISE) di PowerShell come selezione (Esegui come selezione o premendo F8) attiverà un ParameterArgumentValidationErrorNullNotAllowed o un’eccezione Null.

Un semplice rimedio per risolvere il problema è chiamare la variabile $psISE e ottenere la proprietà CurrentFile.FullPath, e da lì, puoi ottenere la posizione attuale dello script.

Utilizzo della variabile $PSScriptRoot per ottenere la posizione attuale dello script PowerShell

Se stai eseguendo PowerShell versione 3 o successiva, è stata introdotta una variabile automatica per memorizzare la directory del file o modulo corrente.

La variabile $PSScriptRoot contiene il percorso della directory dello script in esecuzione. Questa variabile automatica è incredibilmente utile per creare script portatili dove il codice fisso dei percorsi non è pratico.

È particolarmente utile quando i tuoi script devono caricare file o moduli situati nella stessa directory dello script stesso.

Write-Host "The current script is located in: $PSScriptRoot"

Nel nostro script, utilizziamo il cmdlet Write-Host per stampare il valore di $PSScriptRoot. Questa variabile contiene automaticamente il percorso completo alla directory in cui si trova lo script.

Invocando Write-Host, assicuriamo che il percorso venga visualizzato nella console di PowerShell. Questo approccio è sia semplice che efficace, rendendo lo script versatile per vari ambienti e scenari.

Output:

ottieni la posizione attuale dello script powershell - output 2

Ottieni la directory di lavoro in Windows PowerShell per ottenere la posizione attuale dello script PowerShell

Ora che abbiamo discusso come ottenere la posizione attuale nello script, non farebbe male imparare a ottenere la directory di lavoro corrente del nostro script.

In Windows PowerShell v2, la variabile $ExecutionContext contiene la proprietà EngineIntrinsics. Puoi utilizzare questa variabile e proprietà per trovare gli oggetti di esecuzione disponibili per i cmdlet, inclusa la directory di lavoro corrente dello script PowerShell in esecuzione.

$currentScriptLocation = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath('.\')
Write-Host "Current script location: $currentScriptLocation"

In questo esempio, utilizziamo $ExecutionContext per acquisire la posizione corrente dello script. Chiamando il metodo GetUnresolvedProviderPathFromPSPath con il parametro '.\', chiediamo efficacemente a PowerShell di tradurre la directory corrente (rappresentata da '.\') in un percorso completo.

Il risultato è memorizzato nella variabile $currentScriptLocation, che poi visualizziamo usando Write-Host. Questo metodo è particolarmente robusto, poiché non dipende dal modo in cui viene eseguito lo script e funziona attraverso diverse versioni di PowerShell.

Output:

ottieni la posizione attuale dello script di powershell - output 3

Tuttavia, se stai eseguendo l’ultima versione di Windows PowerShell, è stato introdotto un cmdlet separato per rendere le cose più convenienti. Possiamo utilizzare il cmdlet Get-Location e chiamare la proprietà Path per ottenere la directory di lavoro corrente dello script.

$currentDirectory = (Get-Location).Path
Write-Host "Current directory: $currentDirectory"

Nel codice fornito, utilizziamo prima il cmdlet Get-Location per recuperare l’oggetto della posizione corrente. Accediamo poi alla sua proprietà Path per ottenere la directory corrente come stringa, che memorizziamo nella variabile $currentDirectory.

Infine, usiamo Write-Host per visualizzare queste informazioni. Questo metodo è altamente efficace per gli script che devono conoscere il loro contesto di esecuzione in termini di posizione nella directory.

Output:

ottieni la posizione attuale dello script PowerShell - output 4

In PowerShell, pwd è un alias per il cmdlet Get-Location. Il cmdlet Get-Location recupera la directory di lavoro corrente della sessione PowerShell, che è esattamente ciò che fa il comando tradizionale pwd (stampa directory di lavoro) nei sistemi simili a Unix.

PowerShell, tenendo a mente la flessibilità e la compatibilità, fornisce questi alias per facilitare l’uso di comandi simili in PowerShell per gli utenti familiari con altri ambienti shell (come Unix o Linux).

$currentDirectory = pwd
Write-Host "Current directory: $currentDirectory"

In questo esempio, utilizziamo il comando pwd per ottenere l’oggetto della posizione corrente, che viene poi memorizzato nella variabile $currentDirectory. Sfruttando Write-Host, stampiamo il percorso della directory corrente nella console.

Questo metodo è notevolmente semplice e non richiede alcuna sintassi complessa o parametri aggiuntivi. È un modo veloce e affidabile per accertare la directory da cui viene eseguito lo script.

Output:

ottieni la posizione attuale dello script powershell - output 5

Conclusione

Questo articolo ha fornito un’accurata esplorazione di vari metodi per accertare la posizione attuale di uno script PowerShell, ciascuno adattato a diverse versioni di PowerShell e contesti di scripting. Dal cmdlet Split-Path adatto per le versioni precedenti alla variabile automatica $PSScriptRoot nelle versioni più recenti, la guida assicura rilevanza per un ampio raggio di utenti di PowerShell.

Inoltre, l’uso di $ExecutionContext e del cmdlet Get-Location offre rispettivamente alternative robuste e semplici, mentre l’alias pwd presenta un’opzione familiare per gli utenti di diversi background di scripting. Questa guida completa non solo migliora la portabilità e l’affidabilità degli script, ma sottolinea anche la natura versatile di PowerShell.

Armati di queste tecniche, scrittori di script e amministratori di sistema sono meglio attrezzati per gestire le dipendenze dei percorsi dei file, rendendo i loro script più adattabili ed efficaci in vari ambienti. In definitiva, comprendere questi metodi è fondamentale per padroneggiare la scrittura di script PowerShell e ottimizzare la funzionalità degli script su diverse piattaforme e scenari.

Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn