Найдём компьютеры в домене у которых установлен Radmin. Заодно выведем список рабочих станций у которых он не установлен. Всё это, разумеется, с помощью PowerShell.
Часто возникает задача, узнать запущена ли какая нибудь служба на компьютерах пользователей.
Первое же решение кажется очень простым:
Решение очевидное, но не очень эффективное.
Не эффективное оно по нескольким причинам:
Итогом будет вечность выполнения скрипта.
Поэтому скрипт будем писать с оглядкой на эти проблемы, а именно:
Скрипт и результат:
Windows PowerShell ISE
- ##############################################################################
- #
- # Скрипт выводит список компьютеров на которых запущена указанная служба
- # На примере службы Radmin - rserver3
- #
- ###############################################################################
- # Получаем список компьютеров в сети, без серверов и сетевого оборудования
- $workstations = Get-ADComputer -Filter "operatingsystem -notlike '*server*'" -Properties operatingsystem `
- | where {$_.operatingsystem -notmatch "unknown" }
- # $workstations = Get-ADComputer -filter * -SearchBase "OU=Тест,DC=domain,DC=local"
- # Что бы при каждом добавлении не пересоздавался весь массив
- # создадим System.Collections.ArrayList
- $Ena = New-Object System.Collections.ArrayList
- $Dis = New-Object System.Collections.ArrayList
- # Начинаем проверять компьютеры из АД
- foreach ($RadminHost in $workstations.dnshostname)
- {
- # Сначало, включены ли они, тупо пингуем
- $TurnOn = Get-WmiObject Win32_PingStatus -filter "Address='$RadminHost'"
- if ($TurnOn.StatusCode -eq 0)
- {
- # Если пинг идёт - то смотрим запущена ли служба
- $rsenable = Get-Service 'rserver3' -ComputerName $RadminHost
- # Если запущена, добавляем в массив запущенных
- if ($rsenable.Status -eq 'running')
- {
- $Ena.Add($RadminHost)
- }
- # Если нет - где службу нужно установить
- else
- {
- $Dis.Add($RadminHost)
- }
- }
- }
- # Выводим на экран
- Write-Host "*****************************"
- Write-Host "Radmin включен на:" -ForegroundColor Green
- $Ena
- Write-Host "Всего:" ($Ena).Count -ForegroundColor Green
- Write-Host "*****************************"
- Write-Host "Radmin выключен на:" -ForegroundColor Red
- $Dis
- Write-Host "Всего:" ($Dis).Count -ForegroundColor Red
- Write-Host "*****************************"
- *****************************
- Radmin включен на:
- Comp02.domain.loc
- Comp03.domain.loc
- Comp07.domain.loc
- Comp11.domain.loc
- Comp16.domain.loc
- Всего: 5
- *****************************
- Radmin выключен на:
- Comp01.domain.loc
- Comp05.domain.loc
- Всего: 2
- *****************************
- PS C:\>