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.

Author: Solaflex, 2013-05-07

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