2012-09-08 1 views
2

У меня есть несколько разных сервисов, установленных на одном компьютере. Я пишу сценарий PowerShell 2, чтобы начать и остановить их.Разница между sc start ... и Start-Service ... в PowerShell 2

Для некоторых услуг я могу использовать Start-Service -displayname "the service", чтобы успешно запустить его. В других случаях использование командлета Start-Service вызывает ошибки и ошибки в строке «Не удается запустить службу ... на компьютере». ».

В случаях, когда я получаю сообщение об ошибке с помощью командлета Start-Service, всегда удается выполнить sc start "the service".

наоборот тоже верно (хотя sc start не возвращает никаких ошибок. - это просто не запустить службу на всех)

Есть ли разница между этими командами? Есть ли альтернативная команда, которую я должен использовать? Наконец, могу ли я «поймать» любые ошибки из командлета и просто включить обе команды для покрытия всех баз?

Эта проблема повторяема для меня, даже если я удалю и переустановить службу.

Спасибо!

ответ

3

Я не уверен, что разница между sc start и start-service, но вы можете использовать wmi, чтобы делать то, что вы хотите.

Чтобы запустить службу:

(get-wmiobject win32_service -filter "name='the service'").startService() 

Чтобы остановить службу:

(get-wmiobject win32_service -filter "name='the service'").stopService() 

Чтобы проверить состояние службы, вы можете использовать:

get-wmiobject win32_service -filter "name='the service'" 

Он покажет вы состояние, а также режим запуска. Если вы хотите автоматизировать это, вы можете использовать следующее.

Чтобы остановить службу:

if ((get-wmiobject win32_service -filter "name='the service'").state -eq "Running") { 
    (get-wmiobject win32_service -filter "name='the service'").stopService() 
} # Stops the service if it is running 

Чтобы запустить службу:

if ((get-wmiobject win32_service -filter "name='the service'").state -eq "Stopped") { 
    (get-wmiobject win32_service -filter "name='the service'").startService() 
} # starts the service if it is stopped 

Я уверен, что вы можете изменить те, чтобы удовлетворить ваши потребности.

Причина, по которой я хочу использовать wmi, - это возможность указать -computername и -credentials. Это делает так, что вы можете получить доступ к удаленной системе и пройти аутентификацию, если у вас есть системы, не относящиеся к домену. Надеюсь, что это помогло. Хорошего дня!

0

Это может быть связано с той причине, почему sc start не работал в некоторых случаях: http://www.windowsitpro.com/article/powershell-faqs/q-do-normal-windows-commands-run-in-powershell

Возможно, мне нужно было назвать так: & "sc start 'the service'"

+0

'PS> CMD -%/с подкожно запрос wsearch' -% = байпасный анализатор и просто добавить его к тому, что CMD решает, cmd/c - команда Run и выход – evilSnobu

1

В PowerShell sc является Set-Content. см. с help sc, его не он такой же, как при запуске sc в cmd.exe.

Возможно, вы хотите посмотреть на Start-Service, Restart-Service, Stop-Service. Используйте Get-Command, чтобы помочь вам найти commandlet вам нужно:

PS C:\> Get-Command | findstr Service 
Cmdlet Get-Service   Microsoft.PowerShell.Management 
Cmdlet New-Service   Microsoft.PowerShell.Management 
Cmdlet New-WebServiceProxy Microsoft.PowerShell.Management 
Cmdlet Restart-Service  Microsoft.PowerShell.Management 
Cmdlet Resume-Service  Microsoft.PowerShell.Management 
Cmdlet Set-Service   Microsoft.PowerShell.Management 
Cmdlet Start-Service   Microsoft.PowerShell.Management 
Cmdlet Stop-Service   Microsoft.PowerShell.Management 
Cmdlet Suspend-Service  Microsoft.PowerShell.Management