Como passar um parâmetro de arquivo de lote para uma função dentro de um script PowerShell
-
11-09-2019 - |
Pergunta
Eu tenho um arquivo de lote que irá chamar um script do PowerShell:
Batch File: @ECHO OFF PowerShell .. \ PowerShellScript.ps1
O script powershell por sua vez, tem uma função que espera um parâmetro:
POWERSHELL SCRIPT:
function PSFunction([string]$Parameter1)
{
Write-Host $Parameter1
}
Vamos dizer que eu tenho um valor: VALUE1 que precisa ser passado a partir do arquivo de lote ao chamar o PowerShellScript.ps1, como faço para passá-lo para o PSFunction função para que a minha saída é VALUE1
?Solução
modificar seu script para se parecer com o seguinte
function PSFunction([string]$Parameter1)
{
Write-Host $Parameter1
}
PSFunction $args[0]
e para o arquivo de lote, que seria parecido com
powershell ..\PowerShellScript.ps1 VALUE1
Outras dicas
Use o interruptor -Command para dizer powershell.exe para interpretar uma string como se fosse digitado em um prompt de PowerShell. No seu caso, a corda pode dot-source PowerShellScript.ps1 (importá-lo para o novo ambiente powershell.exe) e depois chamar PSFunction com VALUE1 como um parâmetro:
set VALUE1=Hello World
powershell.exe -command ". ..\PowerShellScript.ps1; PSFunction '%VALUE1%'"
A definição de uma função em um script PowerShell faz não executar a função. Se você quer isso, então seu script pode precisar para se parecer com o seguinte:
function PSFunction([string]$Parameter1)
{
Write-Host $Parameter1
}
PSFunction "some string"
De dentro do script você ainda tem uma variável $args
dinâmica que recebe quaisquer parâmetros passados ??para o script. Então
function PSFunction([string]$Parameter1)
{
Write-Host $Parameter1
}
PSFunction $args[0]
vai passar o primeiro parâmetro que você deu na linha de comando para a função.
Parece-me que você simples deve escolher o que usar - arquivos em lote ou PowerShell :) PowerShell é mais poderoso, mas arquivos de lote são mais fáceis de criar (especialmente com Dr.Batcher ) e pode ser executado em qualquer lugar.