Передача переменной в 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"