4

我有一个批处理文件,它将调用一个 Powershell 脚本:

批处理文件: @ECHO OFF powershell ..\PowerShellScript.ps1

powershell 脚本又具有一个需要参数的函数:

POWERSHELL 脚本:

function PSFunction([string]$Parameter1)
{
Write-Host $Parameter1
}

假设我有一个值:VALUE1,在调用 PowerShellScript.ps1 时需要从批处理文件中传递,如何将它传递给函数 PSFunction,以便我的输出为 VALUE1?

4

4 回答 4

6

修改你的脚本看起来像下面

function PSFunction([string]$Parameter1)
{
  Write-Host $Parameter1
}

PSFunction $args[0]

从批处理文件中,它看起来像

powershell ..\PowerShellScript.ps1 VALUE1
于 2009-07-08T20:10:12.840 回答
4

使用 -Command 开关告诉 powershell.exe 解释一个字符串,就好像它是在 PowerShell 提示符下键入的一样。在您的情况下,字符串可以点源 PowerShellScript.ps1(将其导入新的 powershell.exe 环境),然后使用 VALUE1 作为参数调用 PSFunction:

set VALUE1=Hello World
powershell.exe -command ". ..\PowerShellScript.ps1; PSFunction '%VALUE1%'"
于 2009-07-08T21:01:35.607 回答
3

在 Powershell 脚本中定义函数不会执行该函数。如果你想要这样,那么你的脚本可能需要看起来像这样:

function PSFunction([string]$Parameter1)
{
  Write-Host $Parameter1
}
PSFunction "some string"

在脚本中,您仍然有一个动态$args变量,可以获取您传递给脚本的任何参数。所以

function PSFunction([string]$Parameter1)
{
  Write-Host $Parameter1
}
PSFunction $args[0]

会将您在命令行中提供的第一个参数传递给函数。

于 2009-07-08T20:11:00.747 回答
1

在我看来,您应该简单地选择使用什么 - 批处理文件或 PowerShell :) PowerShell 更强大,但批处理文件更容易创建(尤其是使用Dr.Batcher)并且可以在任何地方运行。

于 2011-04-16T22:19:25.270 回答