web-dev-qa-db-fra.com

PowerShell PSScriptRoot est nul

Quand je lance $PSScriptRoot il renvoie null. J'utilise PS version 4.

$val  = Join-Path -Path $PSScriptRoot WebPlatformInstaller_AMD64_en-US.msi

Erreur

Join-Path: impossible de lier l'argument au paramètre 'Path' car il s'agit d'une chaîne vide.

11
kumar

Si vous utilisez ISE, utilisez:

$psISE.CurrentFile.FullPath

Lorsque ISE est lancé, $ psISE est créé et peut être utilisé pour déterminer le chemin actuel de l'instance ISE. Cela a été introduit dans la version 3.0.

Voir Hiérarchie du modèle d'objet ISE

Si vous vouliez obtenir le chemin dans Shell ou ISE, vous pouvez utiliser quelque chose comme ceci:

if ($psISE)
{
    Split-Path -Path $psISE.CurrentFile.FullPath        
}
else
{
    $global:PSScriptRoot
}
10
Xopher

Vous devez vous assurer que cette expression se trouve dans un script .ps1 enregistré.

Cela peut se produire dans les cas suivants:

  • Vous utilisez cette instruction dans la console PowerShell ISE
  • Vous utilisez cette instruction dans la console PowerShell sans fichier de script
  • Vous avez marqué uniquement cette expression pour exécution dans PowerShell ISE
6
k7s5a