Управление службами на другом компьютере

Управление службами на другом компьютере

В настоящее время я пишу службу для Windows и часто ее настраиваю и обновляю на своем тестовом компьютере. Я хотел бы написать скрипт, который автоматически останавливает службу, обновляет exe-файл и перезапускает службу. Однако именно с этой частью остановки и запуска у меня проблемы.

Компьютер, к которому я подключаюсь, не находится в домене, и мы не разделяем имя пользователя и пароль. Я думаю, что лучше всего сделать это, sc.exe \\testsvr stop "myService"однако, поскольку у меня нет домена или общих имен пользователей и паролей, это дает мне сообщение «Доступ запрещен».

Я могу очень легко просто добавить пользователя, но мне это было нужно в качестве обучающего опыта на случай, если я не смогу изменить пользователей.

решение1

Я бы посмотрел наPsServiceиз Sysinternals компании Microsoft (это часть превосходного набора инструментов, написанного Марком Руссиновичем).

Прямо с сайта:

Usage: psservice [\\computer [-u username] [-p password]] <command> <options>

Для <command>, вы можете использовать start, stop, или restartкак наиболее распространенные варианты. Что хорошо в этом скрипте, так это то, что он не зависит от того, являются ли две машины членами одного домена или имеют ли они какие-либо другие доверительные отношения.

решение2

Для полноты картины, если вы хотите сделать это только с помощью стандартных инструментов Windows, вы можете сначала установить IPC-соединение с удаленной машиной (чтобы установить токен безопасности на этой машине), а затем использовать команду «SC»:

net use \\remote\IPC$ /user:local-username-on-remote-machine passowrd
sc \\remote stop service-name
net use \\remote\IPC$ /delete

Это позволит вам управлять службами на удаленной машине, независимо от комбинации членства в рабочей группе/домене обеих машин.

решение3

Лично я никогда не пробовал это в конфигурации, отличной от домена, но, возможно, стоит запустить SC.exe с помощью «RunAs» и использовать учетные данные целевого компьютера?

Runas /user:TargetComputerName\TargetAccountName "sc.exe \\testsvr stop ""myService"""

решение4

В среде DOMAIN вы можете использовать команды NET USE, предполагая, что вашему вошедшему в систему пользователю, который запускает скрипт, предоставлены соответствующие права пользователя. PowerShell, вероятно, является самым мощным вариантом, но если вы используете старые операционные системы Microsoft, у вас могут возникнуть некоторые проблемы с запуском некоторых команд PowerShell. Если все работает на Windows 2008 или новее, я бы определенно выбрал PowerShell.

Если это не вариант, я имел большой успех с пакетом PSTools. Если вы ВЫБИРАЕТЕ этот вариант, как Эван упомянул ранее, вам, вероятно, следует ознакомиться с утилитой pskill в том же пакете. Некоторые службы не умирают изящно, когда вы возитесь с ними удаленно, и эта маленькая утилита ОТЛИЧНО подходит для их уничтожения.

Из любопытства, на каком языке скриптов вы это кодируете? VBScript? BATch? Perl?

Связанный контент