通过命令行将变量传递给powershell脚本

cqu*_*ini 52 powershell powershell-ise

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

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

这看起来很简单,但对我来说却是一个问题.这是我的简单代码:

$a = Read-Host
Write-Host $a
Run Code Online (Sandbox Code Playgroud)

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

.\test.ps1 hello
.\test.ps1 "hello"
.\test.ps1 -a "hello"
.\test.ps1 -a hello
.\test.ps1 -File "hello"
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我已经尝试了许多没有成功的方法,脚本将值输出它.

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

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

谢谢.

Sol*_*lex 64

在第一行的test.ps1中进行此操作

param(
[string]$a
)

Write-Host $a
Run Code Online (Sandbox Code Playgroud)

然后你可以用它来调用它

./Test.ps1 "Here is your text"
Run Code Online (Sandbox Code Playgroud)

这里找到


Bri*_*ens 50

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

PowerShell ABC's - P代表参数

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

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

或使用$ args内置变量,该变量由所有args自动填充.


小智 9

在test.ps1中声明参数:

 Param(
                [Parameter(Mandatory=$True,Position=1)]
                [string]$input_dir,
                [Parameter(Mandatory=$True)]
                [string]$output_dir,
                [switch]$force = $false
                )
Run Code Online (Sandbox Code Playgroud)

从运行或Windows任务计划程序运行脚本:

powershell.exe -command "& C:\FTP_DATA\test.ps1 -input_dir C:\FTP_DATA\IN -output_dir C:\FTP_DATA\OUT"
Run Code Online (Sandbox Code Playgroud)

要么,

 powershell.exe -command "& 'C:\FTP DATA\test.ps1' -input_dir 'C:\FTP DATA\IN' -output_dir 'C:\FTP DATA\OUT'"
Run Code Online (Sandbox Code Playgroud)


小智 7

传递参数如下,

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

.\script_name.ps1 -Name name -Key key