Как передать параметр из пакетного файла в функцию внутри скрипта Powershell - PullRequest
4 голосов
/ 08 июля 2009

У меня есть пакетный файл, который будет вызывать скрипт Powershell:

ФАЙЛ: @ECHO OFF powershell .. \ PowerShellScript.ps1

Сценарий powershell, в свою очередь, имеет функцию, которая ожидает параметр:

СКРИПТ ПОЛОЖЕНИЯ:

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

Допустим, у меня есть значение: VALUE1, которое необходимо передать из пакетного файла при вызове PowerShellScript.ps1, как передать его функции PSFunction, чтобы мой вывод был VALUE1?

Ответы [ 4 ]

6 голосов
/ 09 июля 2009

измените ваш скрипт так, чтобы он выглядел следующим образом

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

PSFunction $args[0]

и из командного файла это будет выглядеть как

powershell ..\PowerShellScript.ps1 VALUE1
4 голосов
/ 09 июля 2009

Используйте ключ -Command, чтобы сказать powershell.exe для интерпретации строки, как если бы она была набрана в приглашении PowerShell. В вашем случае строка может иметь точечный источник PowerShellScript.ps1 (чтобы импортировать его в новую среду powershell.exe), а затем вызвать PSFunction с VALUE1 в качестве параметра:

set VALUE1=Hello World
powershell.exe -command ". ..\PowerShellScript.ps1; PSFunction '%VALUE1%'"
3 голосов
/ 09 июля 2009

Определение функции в скрипте Powershell не выполняет функцию. Если вы хотите этого, то ваш скрипт может выглядеть так:

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

Внутри скрипта у вас все еще есть динамическая переменная $args, которая получает любые параметры, которые вы передали скрипту. Так

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

передаст первый параметр, который вы указали в командной строке, функции.

1 голос
/ 17 апреля 2011

Мне кажется, что вы просто должны выбрать, что использовать - командные файлы или PowerShell :) PowerShell более мощный, но пакетные файлы легче создавать (особенно с Dr.Batcher ) и могут быть беги куда угодно.

...