Como passar um parâmetro de arquivo de lote para uma função dentro de um script PowerShell

StackOverflow https://stackoverflow.com/questions/1100190

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

?
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top