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

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

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

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

$a = Read-Host
Write-Host $a

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

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

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

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

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

спасибо.

4 ответов


вот хороший учебник по PowerShell params:

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

в основном, вы должны использовать param заявление первая строка скрипт

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

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


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

param(
[string]$a
)

Write-Host $a

затем вы можете вызвать его с

./Test.ps1 "Here is your text"

нашел здесь


объявите параметр в тесте.ps1:

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

запустите скрипт из Run или Windows Task Scheduler:

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'"

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

ParamEx.пс1

# 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.летучая мышь!--3-->

rem Notice that named params mean the order of params can be ignored
powershell -File .\ParamEx.ps1 -Bogus FooBar -FileName "c:\windows\notepad.exe"