Passer une variable à un script powershell via la ligne de commande
Je suis nouveau à powershell, et j'essaie de m'enseigner les bases. J'ai besoin d'écrire un script ps pour analyser un fichier, ce qui n'a pas été trop difficile.
Maintenant, je veux le changer pour passer une variable au script. cette variable sera la chaîne d'analyse. Maintenant, la variable sera toujours 1 mot, et non un ensemble de mots ou de plusieurs mots.
Cela semble super simple mais pose un problème pour moi. Voici mon code simple:
$a = Read-Host
Write-Host $a
Quand j'exécute le script à partir de ma commande ligne la variable passant ne fonctionne pas:
.test.ps1 hello
.test.ps1 "hello"
.test.ps1 -a "hello"
.test.ps1 -a hello
.test.ps1 -File "hello"
Comme vous pouvez le voir, j'ai essayé beaucoup de méthodes sans succès, du script prenant la valeur une sortie.
Le script s'exécute et attend que je tape une valeur, et quand je le fais, il fait écho à cette valeur.
Je veux juste qu'il affiche ma valeur passée, quelle minuscule chose me manque-t-il?
Je vous Remercie.
4 réponses
Voici un bon tutoriel sur les paramètres Powershell:
PowerShell ABC-P est pour les paramètres
Fondamentalement, vous devriez utiliser une instruction param
sur la première ligne du script
param([type]$p1 = , [type]$p2 = , ...)
Ou utilisez la variable intégrée $args, qui est automatiquement remplie avec tous les arguments.
Déclarer le paramètre dans test. ps1:
Param(
[Parameter(Mandatory=$True,Position=1)]
[string]$input_dir,
[Parameter(Mandatory=$True)]
[string]$output_dir,
[switch]$force = $false
)
Exécutez le script à partir du Planificateur de tâches exécuter ou Windows:
powershell.exe -command "& C:\FTP_DATA\test.ps1 -input_dir C:\FTP_DATA\IN -output_dir C:\FTP_DATA\OUT"
Ou
powershell.exe -command "& 'C:\FTP DATA\test.ps1' -input_dir 'C:\FTP DATA\IN' -output_dir 'C:\FTP DATA\OUT'"
L'utilisation de param pour nommer les paramètres vous permet d'ignorer l'ordre des paramètres:
ParamEx. ps1
# Show how to handle command line parameters in Windows PowerShell
param(
[string]$FileName,
[string]$Bogus
)
write-output 'This is param FileName:'+$FileName
write-output 'This is param Bogus:'+$Bogus
ParaEx.MTD
rem Notice that named params mean the order of params can be ignored
powershell -File .\ParamEx.ps1 -Bogus FooBar -FileName "c:\windows\notepad.exe"