Надо проверить установленную версию 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:
- Как распространить reg файл на сервера.
- Как искать внутри GPO групповых политик.
- Как разлогинеть (logoff) всех пользователей со статусом disconnect со всех серверов windows в domain.
- Как делегировать права управления терминальных сессий не давая полные права на сервер в windows 2012/16
- Как сбросить терминальные сессии на терминальной ферме RDS windows 2012-2016 без прав администратора