Скрипт Powershell для поиска служб WebSphere на Windows-серверах

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

Этот скрипт Powershell получает список серверов из домена, и ищет на них службы с названиями, характерными для служб серверов WebSphere Application Server и WebSphere MQ. Скрипт подключается к серверам с логином и паролем, которые запрашиваются в начале работы. Результаты работы скрипта пишутся в xls-файл.

# Запрашиваем имя и пароль для доступа к серверам
$credentials = $host.ui.PromptForCredential("Запрос учетных данных", "Введите имя пользователя и пароль", "", "NetBiosUserName")

# Запускаем Excel
$Excel = New-Object -Com Excel.Application
$Excel.Visible = $True
#Создаем новый файл
$WorkBook = $Excel.WorkBooks.Add()
$WorkSheet = $WorkBook.WorkSheets.Item(1)
$WorkSheet.Cells.Item(1,1) = "Computer Name"
$WorkSheet.Cells.Item(1,2) = "Name"
$WorkSheet.Cells.Item(1,3) = "State"
$WorkSheet.Cells.Item(1,4) = "startname"
# Выделяем заголовок
$CellRange = $WorkSheet.UsedRange
$CellRange.Interior.ColorIndex = 19
$CellRange.Font.ColorIndex = 11
$intRow = 2

# Загружеам список серверов из домена

$searchOU = [ADSI]"LDAP://ou=servers,dc=domain,dc=local"
$SearchFilter="(&(&(sAMAccountType=805306369)))"
$SearchComputers = (New-Object System.DirectoryServices.DirectorySearcher($searchOU,$searchFilter)).FindAll()

ForEach ($objComputer in $SearchComputers)
    {
    $computer=$objComputer.GetDirectoryEntry()
    $ComputerName = $computer.samAccountName -replace "\$","" # убираем знак $ из samAccountName компьютера
    # пингуем сервер
    $pingoutput = ping -n 1 $ComputerName
    if($LASTEXITCODE -eq "0")
        {
        Write-Host $ComputerName
        $ComputerObject = Get-WMIObject Win32_service -Computername $ComputerName -Credential $credentials
        #Заполняем таблицу
        ForEach($objItem in $computerObject)
            {
            if (($objItem.Name -like "IBMWAS*") -or ($objItem.Name -like "MQ*"))
                {
                $Worksheet.Cells.Item($intRow, 1) = $ComputerName
                $Worksheet.Cells.Item($intRow, 2) = $objItem.Name
                $Worksheet.Cells.Item($intRow, 3) = $objItem.State
                $Worksheet.Cells.Item($intRow, 4) = $objItem.startname
                $intRow = $intRow + 1
                }
            }
        }
    else
        {
        Write-Host $ComputerName, "Не пингуется"
        }
    }
# Форматируем Excel-таблицу
$Cellrange.Font.Bold = $True
$Cellrange.EntireColumn.AutoFit()

Добавить комментарий