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

eck*_*kes 69 powershell parameter-passing powershell-ise

见标题.

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

param ($G_ARCHIVE = $(throw "Need file to upload!"),
       $G_LOGFILE = $(throw "Need logfile!"))
Run Code Online (Sandbox Code Playgroud)

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

Rom*_*min 72

使用命令窗格.在ISE编辑器中打开脚本文件,设置断点(F9).然后在命令窗格中键入一个命令,使用所需参数调用此脚本.我不认为在ISE中有另一种(内置)方式.

  • 这种方法对我不起作用,因为我的文件路径中有空格,解决方案是以下列方式使用"&ampersand-function":PS C:\ Windows>&("c:\ my folder\script.ps1" )-myArg 123 -anotherArg abc (6认同)
  • 您实际上可以使用相对路径:.\script.ps1 (4认同)

Ash*_*lam 23

  1. 在Windows Powershell ISE中打开脚本(myscript.ps1)
  2. 按下F9要检查的变量(调试).例如,下面示例中的第二行,其中分配了$ outputText变量
  3. 在shell窗口中提供脚本的相对路径以及param值.例如:.\ myscript.ps1"我的价值"
  4. 点击进入(你不需要点击F5)
  5. 您将能够以黄色突出显示调试断点.将光标放在所需的变量上以检查当前值.

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

  • 用插图解释更多细节的想法将对其他人有所帮助。例如,需要提供相对位置(或绝对位置),而该位置最初是没有提供的。 (3认同)
  • 这个答案与接受的答案有何不同? (2认同)

Pat*_*ise 15

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

所以对你的例子来说,

[CmdletBinding()]
param ($G_ARCHIVE = $(throw "Need file to upload!"),
$G_LOGFILE = $(throw "Need logfile!"))
Run Code Online (Sandbox Code Playgroud)

你会在ISE提示上执行类似的东西:

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

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

$PSDefaultParameterValues["ExampleScript.ps1:G_LOGFILE"]={
  "Example-{0:yyMMddHHmm}.log" -f [datetime]::Now
}
Run Code Online (Sandbox Code Playgroud)

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

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

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