80

见标题。

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

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

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

4

5 回答 5

86

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

于 2011-01-14T10:49:50.857 回答
31
  1. 在 Windows Powershell ISE 中打开脚本 (myscript.ps1)
  2. F9您要检查的变量(调试)。例如下面示例中的第二行,其中 $outputText 变量被分配
  3. 在 shell 窗口中提供脚本的相对路径以及参数值。例如: .\myscript.ps1 "我的价值"
  4. 点击回车(你不需要点击F5
  5. 您将能够看到以黄色突出显示的调试断点。将光标置于所需变量以检查当前值。

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

于 2014-09-25T06:47:24.630 回答
17

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

所以对于你的例子,

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

您将在 ISE 提示上执行类似的操作:

$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上查看相同的信息。

于 2015-09-22T17:55:19.120 回答
1

至少在Powershell 5.1 ISE您按下F5运行参数化脚本时,系统会要求您一一输入参数值。

使用$PSDefaultParameterValues填充变量时,可以通过$psISE变量引用加载的脚本,例如

$PSDefaultParameterValues.add("$($psISE.CurrentFile.DisplayName):G_ARCHIVE","test")
于 2022-02-16T07:19:52.983 回答
0

有一种更简单的方法可以在 ISE 中设置所需的参数:

在按下F5ISE 之前,设置您需要的参数。我通常注释我需要的参数,例如:# $G_ARCHIVE = "C:\Temp\TestFile_001.txt"

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

于 2016-01-19T09:22:36.713 回答