通过命令行将变量传递给PowerShell脚本
我是PowerShell的新手,试图自我介绍基础知识。我需要编写一个ps脚本来解析文件,这并不难。通过命令行将变量传递给PowerShell脚本
现在我想改变它来传递一个变量给脚本。该变量将是解析字符串。现在,变量总是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"
正如你所看到的,我已经尝试了许多methos没有成功,脚本将价值输出。
该脚本确实运行,并等待我键入一个值,当我这样做时,它会回应该值。
我只是想要它输出我传入的值,我错过了什么微乎其微的东西?
谢谢。
这里有PowerShell的PARAMS一个很好的教程调用它:
PowerShell ABC's - P is for Parameters
基本上,你应该对剧本
param([type]$p1 = , [type]$p2 = , ...)
的第一线使用param
语句,或者使用的$ args内置变量,它是自动填充所有参数的个数。
链接被破坏 – 2014-09-23 14:26:01
@MichaelHedgpeth:看起来这是一个暂时的问题;它现在正在备份。我不知道这篇文章有更长久的链接。 – 2014-09-23 15:28:31
你是对的,感谢后续 – 2014-09-23 18:56:00
认为这种方式你test.ps1,在第一行
param(
[string]$a
)
Write-Host $a
然后你就可以用
./Test.ps1 "Here is your text"
找到here
我宁愿用./Test.ps1调用它-a =“这是你的文本”,但它的打印$ a是这样的:-a =这里是你的字符串 – ozzy432836 2017-02-21 23:06:33
@ ozzy432836我更喜欢这种语法,但它并不是内置的电源外壳。没有空间,PS将它视为一个单一的未命名的论点。你当然可以实现你自己的参数解析,但你可能会认为它不会是其他人所期望的。Powershell的内置功能允许使用默认值命名和未命名(aka位置)参数,强制参数和可选参数,并自动生成帮助。因为你(我)喜欢在空间上放置一个'=',所以很多东西都可以扔掉。我浪费了我的时间在C#中重新发明这个轮子我的用户很少能够关心。 – 2018-02-27 03:23:22
声明中test.ps1参数:
Param(
[Parameter(Mandatory=$True,Position=1)]
[string]$input_dir,
[Parameter(Mandatory=$True)]
[string]$output_dir,
[switch]$force = $false
)
运行从运行或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'"
的可能的复制[如何处理PowerShell中的命令行参数](http://stackoverflow.com/questions/2157554/how-to-handle-command-line-arguments-in-powershell) – 2016-02-03 11:55:39