2015-04-18 4 views
0

Я ценю, что вы нашли время, чтобы прочитать это.remote Несколько вызовов с использованием Powershell

Мой вопрос заключается в следующем: Я пытаюсь создать программу, которая использует PowerShell для выполнения следующих действий:

  1. Возьмите таблицу генерируемый вне PowerShell

  2. Loop призывает к PowerShell сценарий с параметрами из таблицы

  3. Сценарий powershell вызывает специальный тип .cmd-файла, а затем запускает команды на нем, которые расположены в другом общем местоположении.

Теперь моя проблема связана с третьим пунктом.

настоящее время я использую следующий вызвать мой сценарий (и заданы параметры просто жёстко, чтобы это заработало, они будут генерироваться звонков из шага 2 позже):

powershell.exe -ExecutionPolicy Bypass -Command {invoke-command -file \\sharedlocation\test5.ps1 -computername server1121 -argumentlist 7058,Jason} 

внутри test5.ps1 в настоящее время:

param(
[Parameter(Mandatory=$true)] 
[string] $Var1, 
[Parameter(Mandatory=$true)] 
[string] $Var2 
) 

$CommandsPath = "\\sharedlocation\testcommands.cmd" 
$path = "C:\"+$Var1+"\TOOLS\"+$Var2+"launchtool.cmd" 
$scriptPath = [scriptblock]::Create($path) 
$out | invoke-command {PARAM($MyArg) $scriptPath } -ArgumentList $CommandsPath 

Я также попытался с помощью

$CommandsPath = "\\sharedlocation\testcommands.cmd" 
$path = "C:\"+$Var1+"\TOOLS\"+$Var2+"\launchtool.cmd & " + $CommandsPath 
$scriptPath = [scriptblock]::Create($path) 
$out | invoke-command {$scriptPath } 

у меня есть lso попытался вызвать с помощью hardcoded testcommands вместо того, чтобы быть в файле.

Теперь моя проблема в обоих случаях, она запускает launchtool.cmd, но не передает файл testcommands.cmd.

Однако, когда на машине я бегу

C:\7058\TOOLS\Jason\launchtool.cmd & \\sharedlocation\testcommands.cmd 

Он отлично работает.

Любые идеи, что я делаю неправильно?

+0

Ты вопрос, кажется, есть больше, чтобы сделать с получением CMD и PowerShell, чтобы сделать то же самое, а не «несколько удаленных вызовов» – mrwaim

+0

Что '$ out' и почему вы конвейер в' Invoke -Command'? – Matt

ответ

0

Try, вызовите-выражение "cmd.exe/с C: \ 7058 \ TOOLS \ Jason \ launchtool.cmd & \ sharedlocation \ testcommands.cmd"

cmd.exe/с это мой лучший способ гарантировать, согласованность между cmd и powershell

+0

Это действительно работает, когда я жестко кодирую его, проблема в том, что я пытаюсь использовать сгенерированные пути. Я буду стараться с cmd.exe/с Я изменил его, чтобы он выглядит следующим образом: '$ CommandsPath = "\\ sharedlocation \ testcommands.cmd" $ PATH =«cmd.exe/c C: \ "+ $ Var1 +" \ TOOLS \ "+ $ Var2 +" launchtool.cmd '&' "+ $ CommandsPath Invoke-Expression $ path' Это действительно отлично работает, когда я запускаю его на самом сервере, но удаленно запущен (используя учетную запись с соответствующими разрешениями), она все еще запускает launchtool.cmd, но дает доступ к отказам для второй части. – Razorx

+0

Возможно, вам понадобится cmd/c «ваша команда здесь» - это означает цитату с командой – mrwaim

0

Доступен ли путь UNC из powershell? Скопируйте testcommands.cmd на локальный путь и попробуйте, если он будет работать!

$CommandsPath = "\\sharedlocation\testcommands.cmd" 
if(Test-Path $CommandsPath) 
{ 
    $path = "C:\"+$Var1+"\TOOLS\"+$Var2+"\launchtool.cmd & " + $CommandsPath 
    $scriptPath = [scriptblock]::Create($path) 
    $out | invoke-command {$scriptPath } 
} 
+0

. Она доступна как из общего пути, так и при локальном копировании. Я попробовал следующее предложение Mrwaim ниже, и теперь я 'm запускает runtool.cmd, но доступ запрещен в разделе testscommands.cmd, даже если все работает, когда я запускаю его из powershell на самом сервере, а используемая вами учетная запись имеет полный доступ ко всем машинам (подтверждена) – Razorx

+0

Возможно, вам нужно будет проверить политику выполнения на удаленном компьютере и настроить ее на дистанционное управление. Set-ExecutionPolicy RemoteSigned -Force –

Смежные вопросы