Powershell запускает exe на удаленном компьютере, используя путь UNC - PullRequest
0 голосов
/ 17 ноября 2018

С ПК А я пытаюсь запустить этот скрипт.Он должен на ПК B запустить Exe.Exe, который он будет запускать, находится на ПК C. Это ПК с ОС Windows 7, на которых ПК C является сервером 2008 \ 2012

 $text ='Start-process -FilePath "\\<serverpath>\App.exe" "`-f switch`.switch"'
 Invoke-Command -ComputerName $PCname -Scriptblock { param ($text)
 $text | Invoke-Expression
 } 

Команда в $ text запускается с консоли powershell на удаленном ПК просто правильно.Выполнение всего сценария дает: Эта команда не может быть выполнена из-за ошибки: Доступ запрещен.

Проводя некоторые исследования, я считаю, что я сталкиваюсь с " проблема двойного прыжка "

Краткое описание.

У вас есть компьютеры A, B и C. Вы хотите запустить скрипт из A, у которого B запускает скрипт \ process на C. Ваши учетные данные не будут передаваться из B в C.

В связи с требованиями, я думаю, используя метод

$cred = Get-Credential Contoso\Administrator
Invoke-Command -ComputerName ServerB -Credential $cred -ScriptBlock {
    hostname
    Invoke-Command -ComputerName ServerC -Credential $Using:cred -ScriptBlock {hostname}
}

Как объяснено в ссылке.Одна проблема, с которой я столкнулся, это то, что я хочу, чтобы процесс запускался на ПК B, а это единственный исполняемый файл, который находится на ПК C.

1 Ответ

0 голосов
/ 17 ноября 2018

Для удаленного вызова с ПК-A на PB-B и ПК-B необходимо запустить .exe на ПК-C.

Команда Invoke-Command требует, чтобы вы были администратором любой цели, на которую вы пытаетесь попасть, иэто только для этой цели.

Вы говорите, что пробовали последний блок кода и он не прошел?

Потому что, если все удаленное взаимодействие настроено правильно, оно должно работать таким образом.

$PC_A = 'ws01'
$PC_B = 'iis01'
$cred = Get-Credential "$env:USERDOMAIN\$env:USERNAME"

"Running from $env:COMPUTERNAME"
"Targetng $PC_A"
Invoke-Command -ComputerName $PC_A -Credential $cred -ScriptBlock {
    "Targeting $Using:PC_B from $Using:PC_A via remote source"
    Invoke-Command -ComputerName $Using:PC_B -Credential $Using:cred -ScriptBlock {"PC_B name is $env:COMPUTERNAME"
        notepad.exe
        Get-Process -Name notepad
    }
}

# Results

Running from DC01
Targetng ws01
Targeting iis01 from ws01 via remote source
PC_B name is IIS01

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName  PSComputerName
-------  ------    -----      ----- -----   ------     -- -----------  --------------
    172      10     2184       9424 ...29     0.02   3520 notepad      ws01

Вам также следует рассмотреть возможность использования PSDrive для .exe на втором прыжке вместо дополнительных удаленных действий и запуска .exe, как если бы он был на первом прыжке.

...