如何将所需的参数传递到Powershell ISE中的脚本?


75

参见标题。

我在脚本的开头指定了所需的参数:

param ($G_ARCHIVE = $(throw "Need file to upload!"),
       $G_LOGFILE = $(throw "Need logfile!"))

当我想使用Powershell ISE调试脚本时:如何填写这些参数?

Answers:


79

使用命令窗格。在ISE编辑器中打开脚本文件,设置断点(F9)。然后在命令窗格中键入使用必需参数调用此脚本的命令。我认为在ISE中没有另一种(内置)方法可以做到这一点。


7
因为我的文件路径中有空格,所以这种方法对我不起作用,解决方案是按以下方式使用“与号函数”:PS C:\ Windows>&(“ c:\ my folder \ script.ps1” )-myArg 123 -anotherArg abc
Emil G

1
您实际上可以使用相对路径:。\ script.ps1
Ashraf Alam

28
  1. 在Windows Powershell ISE中打开脚本(myscript.ps1)
  2. F9在要检查的变量上按(调试)。例如下面示例中的第二行,其中分配了$ outputText变量
  3. 在shell窗口中,提供脚本的相对路径以及param值。例如:。\ myscript.ps1“我的值”
  4. 按回车键(您无需按F5
  5. 您将能够看到以黄色突出显示的调试断点。将光标置于所需的变量上,以检查当前值。

显示使用ISE和命令参数进行PowerShell调试的示例


2
这个答案与被接受的答案有什么不同?
eckes

5
用插图解释更多细节的想法将对其他人有所帮助。例如,提供相对(或绝对)位置是必需的,而最初并没有提供。
阿什拉夫·阿拉姆2014年

16

还有另一种方法。您可以使用$PSDefaultParameterValues自存在的自动变量(自v3开始)为cmdlet和高级功能提供新的默认参数(不适用于普通功能)。但是,即使在ISE中调试时,它也适用于脚本。您必须声明[CmdletBinding()][Parameter()]喜欢使用高级功能。

因此,对于您的示例,

[CmdletBinding()]
param ($G_ARCHIVE = $(throw "Need file to upload!"),
$G_LOGFILE = $(throw "Need logfile!"))

您将在ISE Prompt上执行以下操作:

$PSDefaultParameterValues.add("ExampleScript.ps1:G_ARCHIVE","File-to-upload.txt")
$PSDefaultParameterValues.add("ExampleScript.ps1:G_LOGFILE","Example.log")

您还可以将参数值设置为脚本块,该脚本块将在运行时自动执行:

$PSDefaultParameterValues["ExampleScript.ps1:G_LOGFILE"]={
  "Example-{0:yyMMddHHmm}.log" -f [datetime]::Now
}

该变量是一个哈希表,所有标准语法都适用,除了必须具有脚本名称(或高级函数或cmdlet),后跟冒号和参数名称。您可以为多个脚本或命令设置默认值,并为每个脚本或命令设置多个参数(每个参数是一个新的表条目)。

通过这种方式,您可以像平常一样点击F5运行脚本。参数将从变量中获取,因此您无需键入任何内容。

其他用例$PSDefaultParameterValues可能是自定义,例如让Get-History仅获取最后10个条目,除非您-Count在命令中指定参数。由于条目仅在当前会话中持续存在,因此您需要向配置文件添加自定义项。您可以通过Get-Help about_Parameters_Default_Values在提示符下键入或阅读更多信息,或在TechNet上查看相同的信息。


另一个脚本块示例。您可以让脚本自动使用最新的zip文件。$PsDefaultParameterValues=["ExampleScript.ps1:G_ARCHIVE"]={(ls *.zip | sort lastwritetime | select -last 1).fullname}当您不断创建一些外部数据集的新版本来测试和调试脚本时,这种方法非常有用。
PatrickFranchise

$ PSDefaultParameterValues.Item(“ KEY”)=“ VALUE”是另一种选择
RichardOD

1
仅当用[Parameter()]修饰符声明参数时,它才在脚本 中起作用,@ eckes示例中不是这种情况。
洛朗·卡普兰妮

你是对的。我提到它需要是一个高级功能,但不是必须使用脚本来做同样的事情。
PatrickFranchise

-2

有一种在ISE中设置所需参数的简单得多的方法:

按下F5ISE之前,请设置所需的参数。我通常会注释所需的参数,例如:#$ G_ARCHIVE =“ C:\ Temp \ TestFile_001.txt”

我选择“#”之后的所有内容,然后按F8。下次我使用调试脚本时F5,参数设置为我正在测试的值,而无需通过命令行传递参数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.