В больших организациях часто даже сами системные администраторы не обладают полным списком серверов, которые они администрируют, поэтому периодически приходится проводить инвентаризацию серверного хозяйства.
Этот скрипт 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()
$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()