2013-09-08 2 views
0

Я пытаюсь импортировать текстовый файл с именами служб, запускать службы, находящиеся в состоянии «Остановить», а затем выводить результат в текстовый файл. Импорт и запуск служб не был проблемой. Однако в финальном текстовом файле я хочу различать службы, для которых было начато состояние Started.Дифференцировать состояние службы

В конце концов, я хочу, текстовый файл со списком услуг с:

  • службы 1 Started скриптом
  • службы 2 Started
  • услуги 3 И так далее ...

Моя идея состояла в том, чтобы импортировать текстовый файл, проверить состояние и вывести его в новый текстовый файл. Затем я бы изменил Stopped to Started by script. Однако я не всегда могу гарантировать, что сервис начнется, так что это будет быстрый и грязный метод.

Есть ли способ различать эти два?

+1

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

+0

Подробнее о сделке с доказательством концепции, я думаю ... –

ответ

1

Я хотел бы использовать Get-Service для получения услуг из списка и добавить пользовательское свойство, чтобы указать, была ли начата услуга по сценарию:

$f = 'C:\services.txt' 
$svc = Get-Content $f | Get-Service | % { 
    $_ | Add-Member 'StartedByScript' $false 
    $_ 
} 

Добавить -ErrorAction SilentlyContinue в Get-Service, если вы хотите, чтобы пропустить не - существующие службы без сообщения об ошибке.

С этим списком услуг вы можете начать услуги в состоянии Stopped так:

$svc | ? { $_.Status -eq 'Stopped' } | % { 
    $_.Start 
    $_.StartedByScript = $true 
} 

Обычай свойство StartedByScript указывает, какой сервис был запущен с помощью сценария:

$svc | select DisplayName, Status, StartedByScript