Как мы можем дать более трех наименований сервисов в скрипте Power Shell? - PullRequest
0 голосов
/ 17 апреля 2020

--------- Сценарий Power Shell для получения статуса обслуживания нескольких серверов ------

     Get-Service -Name *HRRA*, "SQL Server Reporting Services","SQL Server Reporting Services (MSSQLSERVER)" -ComputerName $Server | 
        Select-Object @{Name = 'MachineName'; Expression = {$Server}},
                      @{Name = 'ServiceName'; Expression = {$_.Name}},
                      @{Name = 'Status';      Expression = {$_.Status}}
    }
    else {
        Write-Warning "Server '$Server' is unreachable"
    }
}

------------- --------------------------- Сценарий ---------------------- -----------

Когда я даю третье имя службы ie "SQL Службы отчетов сервера

(MSSQLSERVER)", это не так выборка состояния с сервера, говорящего как Не удается найти службу с именем службы 'SQL Службы отчетов сервера (MSSQLSERVER)'

1 Ответ

0 голосов
/ 21 апреля 2020

Вот демонстрация идеи использования соответствия регулярных выражений ваших частичных имен сервисов. В моей системе есть две службы с очень похожими именами - FontCache & FontCache3.0.0.0. мой код получает оба из них, сопоставляя с fontcache.

что делает код ...

  • подделывает чтение в текстовом файле с именами серверов
    , когда готов использовать реальные данные, удаляет весь раздел #region/#endregion и использует Get-Content или каким-либо другим способом получения системных имен.
  • устанавливает значение no-repsonse
  • строит регулярное выражение "ИЛИ" имен частичных сервисов для соответствия
  • итерации по списку серверов
  • тесты для соединение с целевой системой
  • получает полный список услуг
  • фильтрует их для тех, которые соответствуют шаблону регулярного выражения
  • создает PSCO для каждой найденной службы
  • отправляет его в $Results коллекцию
  • , если соединения не было, он создает PSCO с этой информацией и отправляет его в ту же коллекцию
  • отображает коллекцию на экране

в этот момент, отправка его в CSV или использование его позже довольно прямолинейно. [ ухмылка ]

код ...

#region >>> fake reading in a list of servers
#    in real life, use Get-Content
$ServerList = @'
LocalHost
10.0.0.1
127.0.0.1
BetterNotBeThere
'@ -split [System.Environment]::NewLine
#endregion >>> fake reading in a list of servers

$NoResponse = '__NoResponse__'
# the verticle bar "|" is regex for "or"
$Regex_SrvcNameList = @(
    'fontcache'
    'remoteregistry'
    'schedule'
    ) -join '|'

$Results = foreach ($SL_Item in $ServerList)
    {
    if (Test-Connection -ComputerName $SL_Item -Count 1 -Quiet)
        {
        # you may want to change the "ErrorAction" to "Stop"
        #    and then wrap the line in a "try/catch" block
        Get-Service -Name * -ComputerName $SL_Item -ErrorAction 'SilentlyContinue' |
            Where-Object {
                $_ -match $Regex_SrvcNameList
                } |
            ForEach-Object {
                [PSCustomObject]@{
                    ComputerName = $SL_Item
                    ServiceName = $_.Name
                    ServiceStatus = $_.Status
                    }
                }
        }
        else
        {
        [PSCustomObject]@{
            ComputerName = $SL_Item
            ServiceName = $NoResponse
            ServiceStatus = $NoResponse
            }
        } # end >>> if (Test-Connection -ComputerName $SL_Item -Count 1 -Quiet)
    } # end >>> foreach ($SL_Item in $ServerList)

$Results

вывод ...

ComputerName ServiceName       ServiceStatus
------------ -----------       -------------
LocalHost    FontCache               Running
LocalHost    FontCache3.0.0.0        Stopped
LocalHost    RemoteRegistry          Stopped
LocalHost    Schedule                Running
10.0.0.1     __NoResponse__   __NoResponse__
127.0.0.1    FontCache               Running
127.0.0.1    FontCache3.0.0.0        Stopped
127.0.0.1    RemoteRegistry          Stopped
127.0.0.1    Schedule                Running
BetterNot... __NoResponse__   __NoResponse__
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...