Как выполнить сценарий PowerShell, доступный на удаленном компьютере?

Я пытался выполнить сценарий на удаленном компьютере.

Я сделал "Enable-PSremoting" на удаленной машине.

Я разместил сценарий hello.ps1 на удаленной машине.

[Моя клиентская машина - Windows XP, а удаленный компьютер - Windows 2003]

Затем со своего клиентского компьютера я пытался выполнить сценарий.

invoke-command -computer $MachineName -filepath "C:\hello.ps1"

У меня следующая ошибка.

Invoke-Command: не удается найти путь «C: \ hello.ps1», поскольку он не существует.

Я думаю, он пытается найти сценарий с клиентской машины.

Если я попытаюсь бежать

invoke-command -computer $MachineName -command { C:\hello.ps1 }, Он выполняет скрипт, доступный на удаленной машине, на стороне клиента.

Но я хотел бы выполнить удаленный скрипт на самом удаленном компьютере.

Как заставить его запускать скрипт, доступный на удаленной машине?

Обновлено:

Фактически эта команда «invoke-command -computer $MachineName -command { C:\hello.ps1 }» работает на удаленной стороне и возвращает результат клиентской стороне. Я неправильно понял, увидев возвращаемые значения, которые он выполняет на стороне клиента.


person Samselvaprabu    schedule 04.05.2012    source источник
comment
Я люблю вас. Спустя 5 лет после публикации вашей темы, после дней и дней поиска в Google, переполнения и проверки каждой конфигурации Invoke-yadayada, почти готов сдаться, и я вижу ваш раздел Update: выше и попробуйте именно это. Это дало мне ту же ошибку, но я подключил удаленный сеанс к переменной в вашем коде и, наконец, получил что-то, что работает: ::::::::: $ s = New-PSSession -ComputerName WTxxxxxL32 -Credential $ credential :::: : Invoke-Command -Session $ s -Command {D: \ ServerDLLDev \ RemoteCOMInstall.ps1}   -  person JustJohn    schedule 06.05.2017


Ответы (3)


Когда вы пишете:

invoke-command -computer $MachineName -filepath "C:\hello.ps1"

Сценарий C:\hello.ps1 будет взят с клиентского компьютера и доставлен на сервер для выполнения. Итак, у вас есть ошибка файл не существует, потому что Invoke-Command ищет файл на клиентском компьютере.

person JPBlanc    schedule 04.05.2012
comment
Как насчет задания параметров удаленному скрипту? - person j.a.estevan; 02.12.2015
comment
взгляните на -ArgumentList. - person JPBlanc; 02.12.2015
comment
@JPBlanc Мне трудно понять, как использовать параметр -ArgumentList для выполнения удаленного файла на указанном удаленном компьютере - person Abdul; 07.09.2016
comment
Какие трудности? Ваш скрипт принимает аргументы (используя $ argv), а вы указываете значения в -ArgumentList. - person JPBlanc; 08.09.2016
comment
Как я могу использовать путь к файлу на сервере? -filepath server: C: \ hellp.ps1? Я не хочу монтировать привод. Большое спасибо! - person FelixH; 03.08.2020

У меня та же ошибка, но я подключил удаленный сеанс к переменной в вашем коде и, наконец, получил что-то, что работает:

$s = New-PSSession -ComputerName "WTxxxxxL32" -Credential $credential

Invoke-Command -Session $s -Command {D:\ServerDLLDev\RemoteCOMInstall.ps1}

Есть миллион решений Invoke и т. Д., Но в конце концов у меня сработало самое простое. Благодаря вам.

person JustJohn    schedule 05.05.2017
comment
Это означает, что вы запускаете команду powershell на своей виртуальной машине с локального компьютера ?? - person ChanGan; 09.09.2017
comment
ВМ не задействована. Клиентский компьютер и Сервер. New-PSSession создает сеанс для запуска кода на удаленном сервере. Затем Invoke-Command для сеанса запускает сценарий, который находится на сервере. Раньше у меня был код на клиенте, но это создавало ошибку. - person JustJohn; 12.09.2017
comment
Моя серверная машина находится в другом домене. это решение будет работать ?? - person ChanGan; 13.09.2017
comment
Мой сервер находится в другом домене. Попытайся. Сеанс основан на имени компьютера точно так же, как SSMS подключается (не цитируйте меня). По сути, те же учетные данные, которые вы используете для подключения к RDP от клиента, - это те же учетные данные. Вы заметили, что я ссылаюсь на $ credential, потому что я загрузил в него имя пользователя / pword, потому что использую его несколько раз. Попробуйте это с жестко заданным именем пользователя / паролем. - person JustJohn; 13.09.2017

У меня был точно такой же пробник, и я решил его комбинацией [WMICLASS] 's create() и Start-Process.

Проверьте мой ответ здесь.

person Ocelot    schedule 28.01.2016