Надо проверить установленную версию fslogix на серверах rds
<#
.SYNOPSIS
Скрипт для проверки версий указанных программ на серверах AD с фильтрацией по имени
.DESCRIPTION
Ищет указанную программу в реестре удаленных серверов и возвращает информацию о версии
.PARAMETER NameFilter
Фильтр имен серверов (например, "*hwrdsh*")
.PARAMETER SoftwareName
Название программы для поиска (например, "Microsoft FSLogix Apps")
.EXAMPLE
.\Get-SoftwareVersionOnServers.ps1 -NameFilter "*hwrdsh*" -SoftwareName "Microsoft FSLogix Apps"
#>
param (
[string]$NameFilter = "*hwrdsh*",
[string]$SoftwareName = "Microsoft FSLogix Apps"
)
# Импорт модуля ActiveDirectory
try {
Import-Module ActiveDirectory -ErrorAction Stop
}
catch {
Write-Host "Ошибка при импорте модуля ActiveDirectory: $_" -ForegroundColor Red
exit 1
}
# Функция для получения информации о серверах
function Get-ServersFromAD {
param (
[string]$Filter
)
try {
Write-Host "Поиск серверов с именем, содержащим: $Filter" -ForegroundColor Cyan
$servers = Get-ADComputer -Filter {
OperatingSystem -like "*Server*" -and
Name -like $Filter -and
Enabled -eq $true
} | Select-Object -ExpandProperty Name
if ($servers.Count -eq 0) {
Write-Host "Серверы не найдены по указанному фильтру." -ForegroundColor Yellow
return $null
}
Write-Host "Найдено серверов: $($servers.Count)" -ForegroundColor Green
return $servers
}
catch {
Write-Host "Ошибка при поиске серверов в AD: $_" -ForegroundColor Red
return $null
}
}
# Функция для проверки версии программы
function Get-SoftwareVersion {
param (
[string]$ComputerName,
[string]$SoftwareName
)
$result = [PSCustomObject]@{
ComputerName = $ComputerName
SoftwareName = $SoftwareName
Version = "Не проверено"
Status = "Не проверено"
LastChecked = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
}
try {
# Проверка доступности сервера
if (-not (Test-Connection -ComputerName $ComputerName -Count 1 -Quiet -ErrorAction Stop)) {
$result.Version = "N/A"
$result.Status = "Недоступен"
Write-Host "$ComputerName : Сервер недоступен" -ForegroundColor Yellow
return $result
}
# Пути в реестре для проверки
$regPaths = @(
"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",
"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
)
$softwareFound = $false
$softwareVersion = "Не установлен"
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $ComputerName)
foreach ($regPath in $regPaths) {
try {
$regKey = $reg.OpenSubKey($regPath)
if ($regKey) {
$subKeys = $regKey.GetSubKeyNames()
foreach ($key in $subKeys) {
$subKey = $regKey.OpenSubKey($key)
$displayName = $subKey.GetValue("DisplayName")
if ($displayName -and $displayName -like "*$SoftwareName*") {
$softwareVersion = $subKey.GetValue("DisplayVersion")
$softwareFound = $true
break
}
}
}
if ($softwareFound) { break }
}
catch {
Write-Host "$ComputerName : Ошибка при доступе к реестру ($regPath): $_" -ForegroundColor Yellow
}
}
$result.Version = $softwareVersion
$result.Status = if ($softwareFound) { "Найдено" } else { "Не найдено" }
Write-Host "$ComputerName : $SoftwareName - $softwareVersion" -ForegroundColor $(if ($softwareFound) { "Green" } else { "Yellow" })
return $result
}
catch {
$result.Version = "Ошибка"
$result.Status = "Ошибка: $_"
Write-Host "$ComputerName : Ошибка при проверке - $_" -ForegroundColor Red
return $result
}
}
# Основной процесс выполнения
$servers = Get-ServersFromAD -Filter $NameFilter
if (-not $servers) {
exit
}
Write-Host "`nПоиск программы: $SoftwareName" -ForegroundColor Cyan
$results = @()
foreach ($server in $servers) {
$results += Get-SoftwareVersion -ComputerName $server -SoftwareName $SoftwareName
}
# Вывод результатов
$results | Format-Table -AutoSize -Property ComputerName, SoftwareName, Version, Status, LastChecked
# Экспорт в CSV
$csvFileName = "SoftwareVersions_$($SoftwareName.Replace(' ','_'))_$($NameFilter.Replace('*','')).csv"
$results | Export-Csv -Path $csvFileName -NoTypeInformation -Encoding UTF8 -Delimiter ';'
Write-Host "`nРезультаты сохранены в файл: $csvFileName" -ForegroundColor Green
Similar Posts:
- Как найти на серверах rds rdp ферме профили которые в статусе fslogix WaitingForWriteQueueFlush
- Как вывести список пользователей у которых не при монтировался диск fslogix и переименовать FriendlyName
- Как распространить reg файл на сервера.
- Как искать внутри GPO групповых политик.
- Как скопировать файл на компьютеры из группы
