Domanda Passaggio di una variabile a uno script PowerShell tramite riga di comando


Sono nuovo di PowerShell e sto cercando di insegnarmi le basi. Ho bisogno di scrivere uno script ps per analizzare un file, che non è stato troppo difficile.

Ora voglio cambiarlo per passare una variabile allo script. quella variabile sarà la stringa di analisi. Ora, la variabile sarà sempre 1 parola e non un insieme di parole o più parole.

Questo sembra molto semplice ma mi pone un problema. Ecco il mio codice semplice:

$a = Read-Host
Write-Host $a

Quando eseguo lo script dalla mia riga di comando, il passaggio della variabile non funziona:

.\test.ps1 hello
.\test.ps1 "hello"
.\test.ps1 -a "hello"
.\test.ps1 -a hello
.\test.ps1 -File "hello"

Come puoi vedere, ho provato molti methos senza successo, della sceneggiatura prendendo il valore di un output.

Lo script viene eseguito e mi aspetta che digiti un valore e, quando lo faccio, rimprovera quel valore.

Voglio solo che produca il mio valore passato, quale minuscola cosa mi manca?

Grazie.


44
2018-05-07 19:06


origine


risposte:


Ecco un buon tutorial sui parametri di PowerShell:

PowerShell ABC - P è per i parametri

Fondamentalmente, dovresti usare a param dichiarazione sul prima linea della sceneggiatura

param([type]$p1 = , [type]$p2 = , ...)

oppure usa la variabile built-in $ args, che viene popolata automaticamente con tutti gli argomenti.


43
2018-05-07 19:13



Rendi questo nel tuo test.ps1, nella prima riga

param(
[string]$a
)

Write-Host $a

Quindi puoi chiamarlo con

./Test.ps1 "Here is your text"

Trovato Qui 


57
2018-05-07 19:12



Dichiarare il parametro in test.ps1:

 Param(
                [Parameter(Mandatory=$True,Position=1)]
                [string]$input_dir,
                [Parameter(Mandatory=$True)]
                [string]$output_dir,
                [switch]$force = $false
                )

Esegui lo script da Esegui o Utilità di pianificazione di Windows:

powershell.exe -command "& C:\FTP_DATA\test.ps1 -input_dir C:\FTP_DATA\IN -output_dir C:\FTP_DATA\OUT"

o,

 powershell.exe -command "& 'C:\FTP DATA\test.ps1' -input_dir 'C:\FTP DATA\IN' -output_dir 'C:\FTP DATA\OUT'"

6
2018-04-07 12:57



L'utilizzo di param per denominare i parametri consente di ignorare l'ordine dei parametri:

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
2017-07-27 21:19