На самом деле я не уверен, что это возможно. Посмотрим:
У меня есть сценарий, который работает на сервере сборки. Назовем этот сервер A.
Он помещает корзины в общую папку на сервере B. И я хочу запустить программу на сервере C.
Таким образом, используя caspol, я могу разрешить запуск исполняемого файла удаленно. это означает, что из B я могу запустить \ C \ shared \ my.exe
Я хочу сделать из A run \ C \ shared \ my.exe на B.
SysInternals\PsExec.exe -u username -p password -accepteula \\ServerC -i 0 -d -w \\ServerB\Nightly\Server \\ServerB\Nightly\Server\server.exe
У пользователя есть все необходимые права.
Но для параметра -w (рабочий каталог) явно нужен путь относительно сервера, на который я указываю. Любая идея?
Не зная, что делает ваше приложение, вам нужно определить рабочий путь? Я могу ошибаться, но я не верю, что пути UNC поддерживаются? Как насчет небольшого трюка и создания карты сетевого диска и объединения ее в сценарий? Что-то вроде:
pushd \\ServerB\Nightly\Server
server.exe
popd
Поместите это в скрипт, затем вызовите с помощью psexec:
psexec -u username -p password \\machine -accepteula -i 0 -d \\serverb\nightly\server\myscript.bat
В толкать команда сопоставляет следующую доступную букву диска с общей папкой, а затем меняет каталог на эту новую карту. popd возвращается к предыдущему пути и отключает диск.
В своем сценарии вы можете скопировать то, что хотите запустить, на диск локального компьютера и после запуска удалить его. Используйте robocopy.exe \ UNC-Path LocalDestionation, чтобы скопировать файл, запустить его и после этого удалить. Помните, что у вас всегда есть переменные окружения, такие как% Temp% для использования.
Для вашего случая, использующего Sysinternals PSExec, вы можете попробовать создать летучую мышь, которая запускает каждую строку летучей мыши, запущенную с PSExec. Вы можете использовать переменные среды в летучей мыши, используя команду SET для таких вещей, как имя пользователя.
Альтернатива Я рекомендую вам протестировать это бесплатное программное обеспечение, которое позволяет очень легко запускать удаленные команды с помощью простого графического интерфейса: Развертывание PQD.
попробуйте также с переключателем -e (не пытается загрузить профиль пользователя), не слишком уверен в переключателе «-accepteula», так как psexec не запрашивает один AFAIK, и это не похоже на действительный переключатель для psexec ...
Два переключателя «-i» и «-d» противоречат друг другу, поскольку -i заставляет его работать в интерактивном режиме, а -d говорит только использовать его с неинтерактивными приложениями. У меня никогда не было необходимости использовать какой-либо переключатель.
Лучший способ приблизиться к сложной операции с удаленными системами, которую я нашел, - это сначала попытаться запустить ее локально, а затем медленно начать перемещать различные компоненты в удаленные устройства и заставлять их работать оттуда. Таким образом, вы точно поймете, в чем проблема в синтаксисе исходной попытки.
Я смог сделать это так:
psexec -s -username domain\username -p MyPassw@rd @c:\temp\computers.txt \\fileserver\SCCMClient\CCMSetup.exe
-s
было необходимо, чтобы не получать ошибки "доступ запрещен" -username
и -p
были необходимы для подключения к файловому серверу с исполняемыми файлами
Я лично считаю, что PSExec - отличный маленький инструмент!