Передача переменной в powershell script через командную строку

Я новичок в powershell и пытаюсь научить себя основам. Мне нужно написать ps script для синтаксического анализа файла, который не был слишком сложным.

Теперь я хочу изменить его, чтобы передать переменную в script. эта переменная будет синтаксической строкой. Теперь переменная всегда будет 1 слово, а не набор слов или несколько слов.

Это кажется слишком простым, но создает для меня проблему. Вот мой простой код:

$a = Read-Host
Write-Host $a

Когда я запускаю script из моей командной строки, переход переменной не работает:

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

Как вы можете видеть, я пробовал много методов без успеха, из script, беря значение, выводящее его.

script запускается и ждет, когда я наберу значение, и когда я это сделаю, он будет эхо-значением этого значения.

Я просто хочу, чтобы он выводил мои переданные значения, какую незначительную вещь мне не хватает?

Спасибо.

Ответ 1

Вот хороший учебник по параметрам Powershell:

PowerShell ABC - P для параметров

По сути, вы должны использовать оператор param в первой строке скрипта

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

или используйте встроенную переменную $ args, которая автоматически заполняется всеми аргументами.

Ответ 2

Сделайте это в своем test.ps1, в первой строке

param(
[string]$a
)

Write-Host $a

Затем вы можете вызвать его с помощью

./Test.ps1 "Here is your text"

Найдено здесь

Ответ 3

Объявите параметр в test.ps1:

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

Запустите script из запуска или планировщика задач Windows:

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

или,

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

Ответ 4

Передан параметр, как показано ниже,

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

.\script_name.ps1 -Name имя -Key ключ

Ответ 5

Использование param для именования параметров позволяет игнорировать порядок параметров:

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"