通过命令行将变量传递给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没有成功,脚本将价值输出。

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

我只是想要它输出我传入的值,我错过了什么微乎其微的东西?

谢谢。

+1

的可能的复制[如何处理PowerShell中的命令行参数](http://*.com/questions/2157554/how-to-handle-command-line-arguments-in-powershell) – 2016-02-03 11:55:39

这里有PowerShell的PARAMS一个很好的教程调用它:

PowerShell ABC's - P is for Parameters

基本上,你应该对剧本

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

第一线使用param语句,或者使用的$ args内置变量,它是自动填充所有参数的个数。

+1

链接被破坏 – 2014-09-23 14:26:01

+0

@MichaelHedgpeth:看起来这是一个暂时的问题;它现在正在备份。我不知道这篇文章有更长久的链接。 – 2014-09-23 15:28:31

+1

你是对的,感谢后续 – 2014-09-23 18:56:00

认为这种方式你test.ps1,在第一行

param(
[string]$a 
) 

Write-Host $a 

然后你就可以用

./Test.ps1 "Here is your text" 

找到here

+0

我宁愿用./Test.ps1调用它-a =“这是你的文本”,但它的打印$ a是这样的:-a =这里是你的字符串 – ozzy432836 2017-02-21 23:06:33

+0

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