使用.cmd或.bat文件中的参数调用powershell函数

时间:2010-09-14 19:13:29

标签: powershell

我编写了一个powershell脚本,它是一个完整的函数接受参数(例如函数名称(参数){}),下面是调用该函数的参数。

我希望能够在其.ps1文件中调用此函数,并传入参数。如何通过.bat或.cmd文件打包到函数的调用?我正在使用Powershell v2.0。

3 个答案:

答案 0 :(得分:11)

你应该使用所谓的“dot-sourcing”脚本和带有多个语句的命令:脚本的点源+带参数的函数调用。

测试脚本Test-Function.ps1:

function Test-Me($param1, $param2)
{
 "1:$param1, 2:$param2"
}

调用.bat文件:

powershell ". .\Test-Function.ps1; Test-Me -Param1 'Hello world' -Param2 12345"

powershell ". .\Test-Function.ps1; Test-Me -Param1 \"Hello world\" -Param2 12345"

注意:这不是必需的,但我建议用双引号括起整个命令文本,如果需要,使用CMD转义规则转义内部引号。

答案 1 :(得分:1)

我相信您所要做的就是在调用脚本时命名参数,如下所示:

powershell.exe Path\ScripName -Param1 Value1 -Param2 Value2

Param1和Param2是函数签名中的实际参数名称。

享受!

答案 2 :(得分:0)

要使用参数从 cmd 或批处理调用 PowerShell 函数,您需要使用 -Commmand 参数或其别名 -C

例如,Romans 答案适用于 PowerShell 5.1,但不适用于 PowerShell 7.1。

引用我在 GitHub 上留下的关于为什么相同的命令不起作用的问题是:

<块引用>

为了支持 Unix shebang 行,pwsh 的 CLI 现在默认为 -File 参数(只需要一个脚本文件路径),而 powershell.exe 默认为 -Command / -c。 要使您的命令与 pwsh 一起使用,您必须明确使用 -Command / -C。

因此,如果您有一个 PowerShell 文件 test.ps1

function Get-Test() {
  [cmdletbinding()]
  Param (
    [Parameter(Mandatory = $true, HelpMessage = 'The test string.')]
    [String]$stringTest
    )
  Write-Host $stringTest
  return
}

然后批处理文件将是:

rem Both commands are now working in both v5.1 and v7.1.
rem v7.1
"...pathto\pwsh.exe" -NoExit -Command ". '"...pathto\test.ps1"'; Get-Test ""help me"""
rem v5.1
powershell.exe -NoExit -Command ". '"...pathto\test.ps1"'; Get-Test ""help me"""

如果您的 ...pathto\test.ps1 包含空格,则 .ps1 周围的引号是必须的。

同样适用于 ...pathto\pwsh.exe


这是我完整发布的 Github 问题:

https://github.com/PowerShell/PowerShell/issues/15281