Как я могу удаленно установить или удалить службу в Windows Server 2008 R2?

2

Кто знает простое решение, как удаленно установить или удалить службу Windows на сервере Win2k8R2?

Этот сервер размещен в Интернете, поэтому он не принадлежит домену или тому подобное. Таким образом, я хочу избежать использования файлообменников Windows или служб администрирования.

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

Вы можете назвать любые инструменты или решения для кода .NET, если знаете, как этого добиться.

Изменить: Извините, я должен уточнить, это не так просто, как использование PowerShell или сценариев с InstallUtil в моем случае. Я попробую это с пунктами пули:

  • Я хочу установить службу автоматически, запустив установку службы на сервере, работающем в Интернете, с клиента.
  • У меня нет графического интерфейса с сервера при вызове службы установки. Например, я запускаю файл setup.exe, который сам устанавливает сервисы через SSH (самоустанавливающийся сервис для использования имен пользовательских сервисов). Отсутствие графического интерфейса кажется проблемой (?).

Я даже отчаянно пытался вызвать программу установки службы через веб-службу php (shell_exec), но результат всегда один и тот же: установка выполняется, но никакие службы не установлены.

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

derFunk
источник
Это звучит как вопрос программирования, возможно, он должен быть в стеке, а не в суперпользователе?
Гарри Джонстон
Является ли программа установки (setup.exe) вашим собственным кодом?
Гарри Джонстон
Это наш собственный установщик, да, и здесь, в суперпользователе, я на самом деле ищу не-программный ответ (хотя я мог бы справиться и с этим;)). Я совершенно уверен, что возможно удаленно установить службу Windows на хосте без присмотра. Или докажите, что я не прав;)
derFunk
Однако из того, что вы сказали, проблема в том, что ваш setup.exe не работает должным образом при удаленном вызове. Исправление этой проблемы было бы вопросом программирования. Если вы ищете существующее решение, я не понимаю, что вы хотите от этого решения, кроме запуска setup.exe, который вы уже попробовали.
Гарри Джонстон
Установщик не делает ничего, кроме того, что можно сделать из командной строки. Так что забудьте про setup.exe. Мой самый неотложный вопрос: есть ли способ удаленной установки службы Windows на компьютере с Win2k8 Server, работающем в Интернете?
derFunk

Ответы:

2

Я сделал это недавно, используя PowerShell и WMI. Полная информация здесь, но в двух словах работает что-то вроде ниже, а также PowerShell Remoting или SC.exe

function Install-Service(
[string]$serviceName = $(throw "serviceName is required"),
[string]$targetServer = $(throw "targetServer is required"),
[string]$displayName = $(throw "displayName is required"),
[string]$physicalPath = $(throw "physicalPath is required"),
[string]$userName = $(throw "userName is required"),
[string]$password = "",
[string]$startMode = "Automatic",
[string]$description = "",
[bool]$interactWithDesktop = $false
)
{        
# todo: cleanup this section
$serviceType = 16          # OwnProcess
$serviceErrorControl = 1   # UserNotified
$loadOrderGroup = $null
$loadOrderGroupDepend = $null
$dependencies = $null

# description?
$params = `
    $serviceName, `
    $displayName, `
    $physicalPath, `
    $serviceType, `
    $serviceErrorControl, `
    $startMode, `
    $interactWithDesktop, `
    $userName, `
    $password, `
    $loadOrderGroup, `
    $loadOrderGroupDepend, `
    $dependencies `

$scope = new-object System.Management.ManagementScope("\\$targetServer\root\cimv2", `
    (new-object System.Management.ConnectionOptions))
"Connecting to $targetServer"
$scope.Connect()
$mgt = new-object System.Management.ManagementClass($scope, `
    (new-object System.Management.ManagementPath("Win32_Service")), `
    (new-object System.Management.ObjectGetOptions))

$op = "service $serviceName ($physicalPath) on $targetServer"   
"Installing $op"
$result = $mgt.InvokeMethod("Create", $params)   
Test-ServiceResult -operation "Install $op" -result $result
"Installed $op"

"Setting $serviceName description to '$description'"
Set-Service -ComputerName $targetServer -Name $serviceName -Description $description
"Service install complete"
}
Джеффри Худик
источник
2

Powershell кажется вероятным вариантом. Посмотрите на ссылки командлетов и Add-WindowsFeature Командлет

uSlackr
источник
Powershell - это путь будущего. Даже Microsoft начала создавать все свои диагностические инструменты поверх Powershell.
Surfasb
Это серверная машина, работающая в Интернете, я бы не стал открывать здесь сервисы общего доступа к файлам Windows. PowerShell еще вариант? Кто-нибудь уже пытался удаленно установить службу на интернет-сервере? (возможен каждый туннель мыслимый).
derFunk
Служба удаленного взаимодействия Powershell v2 работает по ssh-подобному соединению.
uSlackr