Passando uma variável para um programa powershell através da linha de comandos
Sou nova em powershell e tento ensinar-me o básico. Eu preciso escrever um script ps para processar um arquivo, o que não tem sido muito difícil.
Agora quero mudá-lo para passar uma variável ao script. essa variável será a cadeia de processamento. Agora, a variável será sempre uma palavra, e não um conjunto de palavras ou múltiplas palavras.
Isto parece-me simples, mas é um problema para mim. Aqui está o meu código simples:
$a = Read-Host
Write-Host $a
Quando eu executar o guião do meu ... linha de comandos a passagem da variável não funciona:
.\test.ps1 hello
.\test.ps1 "hello"
.\test.ps1 -a "hello"
.\test.ps1 -a hello
.\test.ps1 -File "hello"
Como podem ver, Já tentei muitos methos sem sucesso, do guião a tomar o valor de um output.
o script funciona, e espera que eu digite um valor, e quando o faço, ecos esse valor.
Só quero que dê o meu valor passado, que coisa minúscula estou a perder? Obrigado. 46
4 answers
Aqui está um bom tutorial sobre PowerShell params:
PowerShell ABC-P é para parâmetros
Basicamente, deve usar uma declaração param
na primeira linha do programa
param([type]$p1 = , [type]$p2 = , ...)
Ou usar a variável $args built-in, que é auto-povoada com todos os args.
43
Author: Brian Stephens, 2016-12-20 08:41:34
Faça isto no seu teste.ps1, na primeira linha
param(
[string]$a
)
Write-Host $a
Então podes ligar-lhe com
./Test.ps1 "Here is your text"
Encontrei Aqui
58
Author: Solaflex, 2013-05-07 19:37:22
Declarar o parâmetro no ensaio. ps1:
Param(
[Parameter(Mandatory=$True,Position=1)]
[string]$input_dir,
[Parameter(Mandatory=$True)]
[string]$output_dir,
[switch]$force = $false
)
Execute o programa a partir do Execute ou do escalonamento de Tarefas do 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'"
6
Author: Shilpa11, 2017-04-07 13:02:03
Usar o param para nomear os parâmetros permite-lhe ignorar a ordem dos parâmetros:
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
Author: mxmoss, 2018-07-27 21:19:16