2016-01-31 3 views
0

Я создаю скрипт, который я хочу разрешить для ввода пользователем, чтобы принять меры.Пользовательский ввод для выполнения действия

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

Write-Host "Checking for Stopped Services..." 

$stoppedServices = Invoke-Command $Servers { 
    Get-CimInstance Win32_Service -ComputerName $Servers -Filter "startmode = 'auto' AND state != 'running'" | 
     Sort state | select name, state 
} -Credential $Credential 

if ($stoppedServices -ne $null) { 
    Clear-host 
    $stoppedServices   
} else { 
    Clear-Host 
    Write-Host ("No stopped services found!") 
} 

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

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

+0

Можете ли вы быть более конкретным, чем «но не может этого достичь».? Получаете ли вы какие-либо ошибки? Наблюдаемое поведение v. Ожидаемое поведение? –

+0

Извините, он просто плоский не работает. Я в конечном итоге с FulBox1, Box2.domain.host. Это похоже на работу в математической проблеме. Я полностью начинаю с powershell и, похоже, не могу найти то, что мне нужно. – JonnyBoy

+0

Это действительно звучит как два отдельных вопроса. Сначала вы попросите «подтвердить» -пробуждение перед запуском всех остановленных служб в автоматическом режиме. И тогда у вас есть совершенно другой сценарий для STOP. Пожалуйста, будьте более конкретными и один вопрос на SO-сообщение. –

ответ

0

Вы можете использовать Get-WmiObject вместо Get-CimInstance, собрать соответствующие услуги в хэш-таблице, и передать список в Out-GridView с опцией -PassThru. Сетка будет возвращать только объекты, выбранные пользователем, которые вы можете использовать для вызова метода StartService() объекта службы в хеш-таблице.

$svc = @{} 
Get-WmiObject Win32_Service -Computer $Servers -Credential $Credential -Filter "startmode = 'auto' AND state != 'running'" | 
    ForEach-Object { $svc[$_.DisplayName] = $_ } 

$svc.Values | Select-Object SystemName, DisplayName, State | 
    Sort-Object State, SystemName, DisplayName | 
    Out-GridView -PassThru | 
    ForEach-Object { $svc[$_.DisplayName].StartService() } 
+0

Хотя это, кажется, именно то, что мне нужно, как только оно доходит до начала каждого объекта для запуска массива, является нулевым. Ошибка операции индекса; индекс массива оценивается как null. – JonnyBoy

+0

@JonnyBoy Он отлично работал, когда я тестировал его. Просьба представить доказательства. Что такое значение '$ svc' и что возвращается' Out-GridView -PassThru'? –

+0

PassThru показывает остановленные службы. как только это пройдет, хотя я получаю это. Ошибка операции индекса; индекс массива оценивается как null. #################################### + ForEach-Object {$ svc [$ _. DisplayName ]} + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: NullArrayIndex ####### ##################### Я вынул StartService(), поскольку я не хочу запускать в настоящее время. – JonnyBoy

Смежные вопросы