我有一个批处理文件,它将调用Powershell脚本:
BATCH FILE: @ECHO OFF powershell .. \ PowerShellScript.ps1
powershell脚本又有一个需要参数的函数:
POWERSHELL SCRIPT:
function PSFunction([string]$Parameter1)
{
Write-Host $Parameter1
}
假设我有一个值:VALUE1需要在调用PowerShellScript.ps1时从批处理文件传递,如何将其传递给函数PSFunction以使我的输出为VALUE1?
答案 0 :(得分:6)
将脚本修改为如下所示
function PSFunction([string]$Parameter1)
{
Write-Host $Parameter1
}
PSFunction $args[0]
并从批处理文件中看起来像
powershell ..\PowerShellScript.ps1 VALUE1
答案 1 :(得分:4)
使用-Command开关告诉powershell.exe解释字符串,就好像它是在PowerShell提示符下键入的一样。在您的情况下,字符串可以点源PowerShellScript.ps1(将其导入新的powershell.exe环境),然后使用VALUE1作为参数调用PSFunction:
set VALUE1=Hello World
powershell.exe -command ". ..\PowerShellScript.ps1; PSFunction '%VALUE1%'"
答案 2 :(得分:3)
在Powershell脚本中定义函数不执行该函数。如果你想要,那么你的脚本可能需要看起来像这样:
function PSFunction([string]$Parameter1)
{
Write-Host $Parameter1
}
PSFunction "some string"
在脚本中,您仍然拥有一个动态$args
变量,该变量可以获取您传递给脚本的任何参数。所以
function PSFunction([string]$Parameter1)
{
Write-Host $Parameter1
}
PSFunction $args[0]
会将您在命令行上提供的第一个参数传递给函数。
答案 3 :(得分:1)
在我看来,你应该选择使用什么 - 批处理文件或PowerShell :) PowerShell功能更强大,但批处理文件更容易创建(特别是使用Dr.Batcher)并且可以在任何地方运行。< / p>