web-dev-qa-db-fra.com

Passer une variable à un script powershell via une ligne de commande

Je suis nouveau dans PowerShell et j'essaie de m'apprendre 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 plusieurs mots.

Cela semble trop simple, mais pose un problème pour moi. Voici mon code simple:

$a = Read-Host
Write-Host $a

Lorsque j'exécute le script à partir de ma ligne de commande, la variable transmise 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 constater, j'ai essayé beaucoup de méthodes sans succès, du script prenant la valeur à la sortie.

Le script est exécuté et attend que je tape une valeur. Lorsque je le fais, il renvoie cette valeur.

Je veux juste qu'il affiche ma valeur passée, quelle petite chose me manque-t-il?

Je vous remercie.

48
cquadrini

Faites ceci dans votre test.ps1, à la première ligne

param(
[string]$a
)

Write-Host $a

Ensuite, vous pouvez l'appeler avec

./Test.ps1 "Here is your text"

Trouvé ici

60
Solaflex

Déclarez 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 Windows Exécuter OR:

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'"
7
Shilpa11

Paramètre passé comme ci-dessous,

Param([parameter(Mandatory=$true,
   HelpMessage="Enter name and key values")]
   $Name,
   $Key)

.\nom_script.ps1 -Nom nom - clé clé

0
kalaivani

Utiliser 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.bat

rem Notice that named params mean the order of params can be ignored
powershell -File .\ParamEx.ps1 -Bogus FooBar -FileName "c:\windows\notepad.exe"
0
mxmoss