Powershell: script запустить программу с параметрами?

Когда я запускаю Powershell script ниже, я получаю приведенную ниже ошибку. Как запускать программы через powershell с параметрами? script будет входить в групповую политику.

Invoke-Expression: не может быть найден позиционный параметр, который принимает аргумент '\ TBHSERVER\NETLOGON\BGInfo\BGIFILE.bgi/timer: 0/s ilent/nolicprompt '. В X:\Systems\scripts\PowerShell\UpdateDesktopWithBGInfo.ps1: 6 char: 18 + Invoke-Expression < < $logonpath $ArguList     + CategoryInfo: InvalidArgument: (:) [Invoke-Expression], ParameterBindingException     + FullyQualifiedErrorId: PositionalParameterNotFound, Microsoft.PowerShell.Commands.InvokeExpressionCommand

$LogonPath = $env:LOGONSERVER + "\NETLOGON\BGInfo\Bginfo.exe" 
$ArguList = $env:LOGONSERVER + '\NETLOGON\BGInfo\BGIFILE.bgi /timer:0 /silent /nolicprompt '
invoke-command $LogonPath
Invoke-Expression $logonpath $ArguList

Ответ 1

Попробуйте следующее:

& "\\$env:LOGONSERVER\NETLOGON\BGInfo\Bginfo.exe" "\\$env:LOGONSERVER\NETLOGON\BGInfo\BGIFILE.bgi" /timer:0 /silent /nolicprompt

Если BGIFILE.bgi находится в том же месте, что и Bginfo.exe, вы можете указать только имя файла:

& "\\$env:LOGONSERVER\NETLOGON\BGInfo\Bginfo.exe" BGIFILE.bgi /timer:0 /silent /nolicprompt

Ответ 2

Invoke-Command лучше всего подходит для запуска команд удаленно. Как указывает Шай, вы можете использовать амперсанд &, чтобы сказать PowerShell выполнить что-то локально так же, как оболочку cmd.exe.

Чтобы сделать работу Invoke-Command, вам нужно будет сделать что-то вроде этого:

$program = "C:\windows\system32\ping.exe"
$programArgs = "localhost", "-n", 1
Invoke-Command -ScriptBlock { & $program $programArgs }

Обратите внимание на использование амперсанда в блоке script. Поэтому, если вы используете команду local, просто используйте амперсанд, как показывает пример Shay.