Как использовать команду invoke для запуска PS-файла из командной строки Windows при передаче параметров в PS-файл? - PullRequest
2 голосов
/ 06 ноября 2019

Как использовать команду invoke для запуска PS-файла из командной строки Windows при передаче параметров в PS-файл? Это мой сценарий:

#TestParams2.ps1

param (
    [string]$Server,
    [string]$FileFolderName,
    [string]$VerValue
)

$Server
$FileFolderName
$VerValue

И вот как я пытаюсь назвать его:

powershell.exe invoke-command -FilePath 'C:\temp\TestParams2.ps1' -ArgumentList 'myserver','\\server1\folder name\file.txt','9999'

И когда я запускаю его, я получаю это:

Invoke-Command : Parameter set cannot be resolved using the specified named parameters.
At line:1 char:1
+ invoke-command -FilePath 'C:\temp\TestParams2.ps1' -ArgumentList 'mys ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Command], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands.InvokeCommandCommand

Как мне назвать скрипт?

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

ответ Здана содержит критический указатель: параметр -FilePath предназначен только для использования в контексте remoting , поэтому вы не можете его использоватьесли только вы не укажете параметр -ComputerName.

Однако использование -ComputerName только для того, чтобы вы могли нацелиться на локальный компьютер, (а) неэффективно и (б), что более важно, требует работает как администратор (с повышенными правами).

Вам вообще не нужен Invoke-Command;вместо этого вызовите ваш сценарий с параметром -File CLI , передав аргументы как обычно, разделенные пробелами:

powershell.exe -File C:\temp\TestParams2.ps1 myserver "\\server1\folder name\file.txt" 9999

Если вам также необходимо обойти эффективную политику исполнения :

Предупреждение : Если эффективная политика выполнения контролируется Групповой политикой , она не может быть переопределена.

powershell.exe -ExecutionPolicy Bypass -File C:\temp\TestParams2.ps1 myserver "\\server1\folder name\file.txt" 9999

Обратите внимание, что-ExecutionPolicy Bypass должен быть помещен перед параметром -File (применяется аналогично использованию параметра -Command) - все, что после -File считается путем к целевому сценарию плюс любые аргументы для его передачи.

0 голосов
/ 06 ноября 2019

Ошибка жалуется на то, что набор параметров, который вы указали для invoke-command, не является полным, так что он не может решить, какой параметр установить на invoke-command для применения.

В этом случае, когда выукажите аргумент -FilePath, также необходимо указать -ComputerName:

powershell.exe invoke-command -FilePath 'C:\temp\TestParams2.ps1' -ArgumentList 'myserver','\\server1\folder name\file.txt','9999' -ComputerName localhost
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...