55

我是powershell的新手,并试图自学基础知识。我需要编写一个 ps 脚本来解析文件,这并不太难。

现在我想更改它以将变量传递给脚本。该变量将是解析字符串。现在,变量将始终是 1 个单词,而不是一组单词或多个单词。

这似乎非常简单,但对我来说却是个问题。这是我的简单代码:

$a = Read-Host
Write-Host $a

当我从命令行运行脚本时,变量传递不起作用:

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

如您所见,我尝试了许多方法都没有成功,脚本将值输出它。

该脚本确实运行,并等待我输入一个值,当我这样做时,它会回显该值。

我只是想让它输出我传入的值,我错过了什么小东西?

谢谢你。

4

5 回答 5

74

在你的 test.ps1 中做这个,在第一行

param(
[string]$a
)

Write-Host $a

然后你可以调用它

./Test.ps1 "Here is your text"

在这里找到(英语

于 2013-05-07T19:12:29.757 回答
56

这是关于 Powershell 参数的一个很好的教程:

PowerShell ABC - P 代表参数

基本上,您应该在脚本的第一行param使用语句

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

或使用 $args 内置变量,该变量会自动填充所有参数。

于 2013-05-07T19:13:45.460 回答
12

在test.ps1中声明参数:

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

从 Run OR 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'"
于 2017-04-07T12:57:27.700 回答
7

传递的参数如下,

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

.\script_name.ps1 -名称名称-Key key

于 2018-11-26T05:51:20.380 回答
2

使用 param 命名参数可以忽略参数的顺序:

参数表达式.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"
于 2018-07-27T21:19:16.430 回答