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

通过命令行将变量传递给powershell脚本,powershell,powershell-ise,Powershell,Powershell Ise,我是powershell的新手,正在努力自学基础知识。我需要编写一个ps脚本来解析一个文件,这并不太难 现在我想更改它,将变量传递给脚本。该变量将是解析字符串。现在,变量将始终为1个单词,而不是一组单词或多个单词 这似乎很简单,但却给我带来了一个问题。以下是我的简单代码: $a = Read-Host Write-Host $a 从命令行运行脚本时,变量传递不起作用: .\test.ps1 hello .\test.ps1 "hello" .\test.ps1 -a "hello" .\tes

我是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"
正如您所看到的,我尝试了许多方法,但都没有成功,脚本获取值并将其输出

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

我只想让它输出我传入的值,我遗漏了什么微小的东西


谢谢。

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

param(
[string]$a
)

Write-Host $a
那你就可以用

./Test.ps1 "Here is your text"

Found()

这里有一个关于Powershell参数的好教程:

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

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


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

在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"
或者


使用param命名参数允许您忽略参数的顺序:

ParamEx.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
蝙蝠

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

传递的参数如下所示

Param([parameter(Mandatory=$true,
   HelpMessage="Enter name and key values")]
   $Name,
   $Key)
.\script_name.ps1-namename-KeyKey


@Michaelheddpeth:看起来这是一个暂时的问题;现在又恢复了。我不知道有哪一个链接更适合这篇文章。就我个人而言,$args参数更简单。:)链接又断开了:-(@MichaëlPolla:我希望他们停止移动文章!我再次修复了链接。Id可能重复,请使用。/Test.ps1-a=“这是您的文本”但它打印的$a是这样的:-a=这是您的string@ozzy432836我也更喜欢语法,但它并不是建立在PosiS壳中的。没有一个空间PS将它看作一个未命名的参数。你当然可以实现你自己的参数解析,但是你可能会认为它不是别人所期望的。Powershell的内置功能都是。ows用于命名和未命名(又名位置)参数、具有默认值的强制参数和可选参数,并自动生成帮助。这是一个很好的选择,因为您(&I)更喜欢“=”而不是空格。我浪费时间用C重新发明了这个轮子,我的用户很少关心。在第一行写它很重要,因为如果param不在第一行,它会出错。帮助消息是如何进来的?@not2qubit实际上,如果用户不知道如何执行,帮助文本将很有用。要获得帮助文本,你必须键入!?不传递任何输入。
Param([parameter(Mandatory=$true,
   HelpMessage="Enter name and key values")]
   $Name,
   $Key)