Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Помогите пожалуйста переустановить службу удаленно (http://forum.oszone.net/showthread.php?t=184106)

Ingolder 28-08-2010 21:19 1483707

Помогите пожалуйста переустановить службу удаленно
 
Добрый день.
Мне требуется удалённо с помощью PowerShell Переустановить службу на удаленном компьютере с XP.
Конкретно:
остановить службу, удалить службу, проинсталлировать новую службу, запустить службу.

На cmd не предлагать, умеем :)


Пробовал остановить\запустить службу таким боком:
Код:

        $b = get-wmiobject win32_service -computername 192.168.1.102 -Filter "Name = 'themes'"
        $b.startservice()

выдаёт непонятное, и служба не запускается:
Код:

PS C:\Users\Admin> $b.startservice()


__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS    :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION    : {}
__SERVER        :
__NAMESPACE      :
__PATH          :
ReturnValue      : 14

пробовал так:
Код:

PS C:\Users\Admin> $serviceController = (new-Object System.ServiceProcess.ServiceController("themes","192.168.1.102"))
PS C:\Users\Admin> $serviceController.Start()
Exception calling "Start" with "0" argument(s): "Cannot start service Themes on computer '192.168.1.102'."
At line:1 char:25
+ $serviceController.Start <<<< ()
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException


deepred 28-08-2010 22:45 1483770

Ingolder,

попробуйте так, хотя результат я не гарантирую - POSH я не знаю...

$Computer = "имя_ПК"
$serviceName = "имя_службы"
$query = "Select * from Win32_Service where name = '$serviceName'"
$rtn = Get-WmiObject -Query $query -ComputerName $computer
$rtn.stopService()
$rtn.Delete()

Ingolder 29-08-2010 00:30 1483848

deepred, , пробовал так и сяк:

Код:

PS C:\Users\Admin> Get-WmiObject -Query "Select * from Win32_Service where name = 'Themes'" -ComputerName 192.168.1.102
Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
At line:1 char:14
+ Get-WmiObject <<<<  -Query "Select * from Win32_Service where name = 'Themes'" -ComputerName 192.168.1.102
    + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], COMException
    + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

PS C:\Users\Admin> $Computer = "192.168.1.102"
PS C:\Users\Admin> $serviceName = "Themes"
PS C:\Users\Admin> $query = "Select * from Win32_Service where name = '$serviceName'"
PS C:\Users\Admin> $rtn = Get-WmiObject -Query $query -ComputerName $computer
Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
At line:1 char:21
+ $rtn = Get-WmiObject <<<<  -Query $query -ComputerName $computer
    + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], COMException
    + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand


deepred 29-08-2010 00:38 1483851

Ingolder,

Цитата:

Цитата Ingolder
The RPC server is unavailable. ?»

Честно говоря - не знаю, в чем ошибка, кроме очевидной недоступности ПК...
Попробуйте посмотреть здесь

amel27 29-08-2010 08:59 1483957

Ingolder, советую для начала решить/отладить задачу локально:

"Stop-Service" - остановить сервис;
"New-Service" - создать сервис;
...по удалению сервиса там же:
Цитата:

To delete a service, use Sc.exe, or use the Get-WmiObject cmdlet to get the Win32_Service object that represents the service and then use the Delete method to delete the service. (The object that Get-Service returns does not have a delete method.) For an example, see the Examples section.
и только потом выбрать/отладить на простых примерах способ удаленного запуска, который зависит от версии PowerShell, наличия его на удаленных компьютерах, используемых учетках (домен/рабочая группа), настройках безопасности и т.п.

7 способов выполнить команду на удалённом компьютере
Запуск процесса на удалённом компьютере – PowerShell Remoting
Windows PowerShell: Краткий обзор удаленного управления в версии 2.0

Ingolder 29-08-2010 13:42 1484107

По первым ссылкам что вы дали, в примерах ничего толкового нет. Как работает psexec.exe и sc.exe я знаю, меня интересует повершелльное решение.

Invoke-command и enter-pssession тоже не помогает:

Код:

PS C:\Users\Admin> $script = {get-wmiobject win32_service -filter "name='Themes'"}
PS C:\Users\Admin> Invoke-Command -ComputerName 192.168.1.102 -ScriptBlock $script
[192.168.1.102] Connecting to remote server failed with the following error message : The WinRM client cannot process t
he request. Default authentication may be used with an IP address under the following conditions: the transport is HTTP
S or the destination is in the TrustedHosts list, and explicit credentials are provided. Use winrm.cmd to configure Tru
stedHosts. Note that computers in the TrustedHosts list might not be authenticated. For more information on how to set
TrustedHosts run the following command: winrm help config. For more information, see the about_Remote_Troubleshooting H
elp topic.
    + CategoryInfo          : OpenError: (:) [], PSRemotingTransportException
    + FullyQualifiedErrorId : PSSessionStateBroken
PS C:\Users\Admin>
PS C:\Users\Admin> Enter-PSSession 192.168.1.102
Enter-PSSession : Connecting to remote server failed with the following error message : The WinRM client cannot process
 the request. Default authentication may be used with an IP address under the following conditions: the transport is HT
TPS or the destination is in the TrustedHosts list, and explicit credentials are provided. Use winrm.cmd to configure T
rustedHosts. Note that computers in the TrustedHosts list might not be authenticated. For more information on how to se
t TrustedHosts run the following command: winrm help config. For more information, see the about_Remote_Troubleshooting
 Help topic.
At line:1 char:16
+ Enter-PSSession <<<<  192.168.1.102
    + CategoryInfo          : InvalidArgument: (192.168.1.102:String) [Enter-PSSession], PSRemotingTransportException
    + FullyQualifiedErrorId : CreateRemoteRunspaceFailed

Компьютер доступен, с отключенным фаерволом.

Остальные статьи пока что читаю.. но cmd, вбскрипт и прочее - не интересует.

amel27 29-08-2010 14:04 1484122

Ingolder, с локальной реализацией проблемы есть?

Цитата:

Цитата Ingolder
в примерах ничего толкового нет »

по ссылкам есть всё необходимое, включая настройки, которые нужно произвести на компе, чтобы на нём можно было удаленно использовать PowerShell (по умолчанию всё отключено), если не понятны сообщения об ошибках - отлаживайте скрипты на локализованной Windows, обращайтесь по имени вместо IP

Ingolder 29-08-2010 15:31 1484200

Локально - всё работает (на семёрке). Проблема в удалёнке.

WinRM не катит, потому что на удалённом компе ХР, WinRM нету на ОС ниже висты.
Powershell Remoting и прочие методы я вам уже показывал что выдаёт. Прочитал все ваши статьи, спасибо, но решения не вижу.

deepred 29-08-2010 15:52 1484212

Ingolder,

Не ждите готового решения - за Вас никто ничего не настроит...

Цитата:

Цитата Ingolder
Default authentication may be used with an IP address under the following conditions: the transport is HTTP
S or the destination is in the TrustedHosts list, and explicit credentials are provided
. Use winrm.cmd to configure Tru
stedHosts
. Note that computers in the TrustedHosts list might not be authenticated. For more information on how to set
TrustedHosts run the following command: winrm help config. For more information, see the about_Remote_Troubleshooting H
elp topic. »

Цитата:

Цитата Ingolder
Connecting to remote server failed with the following error message : The WinRM client cannot process
the request
»

Цитата:

Цитата amel27
и только потом выбрать/отладить на простых примерах способ удаленного запуска, который зависит от версии PowerShell, наличия его на удаленных компьютерах, используемых учетках (домен/рабочая группа), настройках безопасности и т.п. »

Когда Вы выполните все перечисленные требования у Вас все заработает...

amel27 29-08-2010 16:46 1484252

Цитата:

Цитата Ingolder
WinRM не катит, потому что на удалённом компе ХР, WinRM нету на ОС ниже висты »

в PowerShell на русской WIN запустите команду "Help about_Remote_FAQ":

Цитата:

Для удаленной работы на локальном и удаленном компьютерах должны быть установлены следующие компоненты: Windows PowerShell, Microsoft .NET Framework 2.0 и протокол WS-Management. Все файлы и другие ресурсы, необходимые для выполнения конкретной команды, должны находиться на удаленном компьютере.

Пользователю необходимо располагать разрешением на подключение к удаленному компьютеру, разрешением на запуск Windows PowerShell, а также разрешением на доступ к хранилищам данных (таким как файлы и папки) и реестру на удаленном компьютере.

Дополнительные сведения см. в разделе about_Remote_Requirements.
WS-Management версии 1.1
Цитата:

WS-Management (также называется WinRM) OOB - это специальный выпуск для поддержки функции WS-Management на следующих платформах: Windows XP с пакетом обновления 2, Windows Server 2003 с пакетом обновления 1, Windows Server 2003 с пакетом обновления 2, Windows 2003 Server R2.

Ingolder 31-08-2010 13:23 1485558

amel27, правильно, winrm не катит, потому что на уалённом компе нет повершелла.
Поэтому, deepred, ваше решение не подходит. Без этого, как я понимаю, невозможно вообще.

amel27 31-08-2010 17:42 1485814

Ingolder, решение deepred не требует PowerShell на удаленном компе, т.к. использует доступ через WMI, если выдается ошибка RPC, значит вас не пускает на удаленный компьютер по DCOM и этот метод не будет работать и через VBS/CMD пока не разберетесь с безопасностью

Ingolder 02-09-2010 18:14 1487323

но ведь фаервол отключен. В чём может быть косяк?
удаленный вызов RPC включен.

amel27 02-09-2010 18:50 1487352

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

deepred 02-09-2010 19:04 1487357

amel27,

Спасибо за пояснение -
Цитата:

Цитата amel27
Ingolder, решение deepred »

Ingolder,

Для того, чтобы воспользоваться доступом по WMI - следует для него настроить
параметры безопасности, т.е. выполнить рекомендацию amel27 (post #14) и
проверить "WMI security settings" в MMC Я Вам собственно предложил вариант
такого доступа, предполагая отсутствие POSH на удаленном ПК.

И вопрос - почему POSH?

PS: Ingolder, как у Вас обстоят дела в решение вопроса Разное - Автоматический вход пользователя в домен..
Могу Вам еще посоветовать направить поиск в сторону GINA.dll

Ingolder 12-09-2010 16:48 1493772

Цитата:

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

Так и есть

Выяснилось новое обстоятельство. Почему-то всё это работает, но не на всех компьютерах.Я тупо пробовал сделать предложенные вами операции на другом компе с XP, не отличающейся (видимо) от моего компа на котором я тестил, и всё заработало. Остаётся непонятным, почему на некоторых компах в сети всё-таки это не работает (речь идёт о Get-WmiObject).

deepred, Powershell - потому, что я изучаю powershell. Ничего предвзято-принципиального.

Извините что редко отвечаю, не всегда есть возможность с вами общаться :)

amel27 15-09-2010 07:53 1495631

Цитата:

Цитата Ingolder
Остаётся непонятным, почему на некоторых компах в сети всё-таки это не работает »

может быть всё что угодно: "хвосты" кривых политик безопасности, нерабочий WMI и т.п. ИМХО проще переустановить WIN, чем искать концы...

Ingolder 16-09-2010 11:42 1496604

Может и так.. но компов много и ничего переустанавливать никто не собирается. )

Теперь не ясна такая фишка. при проверке наличия службы таким образом:
Код:

$rtn = Get-WmiObject -Query "Select * from Win32_Service where name = 'Themes'" -ComputerName $ip
if ($rtn -ne ""){
$rtn.StopService()
$rtn.Delete()
......
}

$rtn будет выдавать $null не только когда служба отсутствует, но и когда нет доступа к компьютеру, выключен сервер rpc и прочих проблемах. Как проверить сначала, есть ли доступ к компу? или как там реализовать такую проверку ? ...


Время: 12:21.

Время: 12:21.
© OSzone.net 2001-