Проверить доступность компьютеров можно, например, так:
Get-ADComputer -Filter 'OperatingSystem -notlike "*Server*"' | ForEach-Object -Process {
if (Test-NetConnection -ComputerName $PSItem.DnsHostName -InformationLevel Quiet) {
Write-Host $PSItem.Name 'доступен' -ForegroundColor Green
}
else {
Write-Host $PSItem.Name 'НЕдоступен' -ForegroundColor Yellow
}
}
Перечитал вопрос - там что-то про поиск версии 1С. Видимо, проверяется, стоит 1с нужной версии или нет.
Если речь об этом, можно просто проверить, стоит ли 1С применю так:
# Установка
$InstalledPackage = Get-Package -Name '1*:Предприятие 8*' -RequiredVersion $PlatformVersion -ErrorAction SilentlyContinue
if ($InstalledPackage) {
##TODO Уже установлена
}
else {
##TODO Вывод в лог 'Запускаем установку версии' $PlatformVersion
Start-Process -FilePath 'C:\windows\system32\msiexec.exe' -ArgumentList $ArgumentsArray -Wait
##TODO Вывод в лог 'Установили версию' $PlatformVersion -ForegroundColor Green
##TODO В try/catch завернуть?
}
# Удаляем старые
$InstalledPackages = Get-Package -Name '1*:Предприятие 8*' -ErrorAction SilentlyContinue
foreach ($Package in $InstalledPackages) {
##TODO Вывод в лог 'Проверяем версию' $Package.Version
if ($Package.Version -notin $AllSupportedPlatforms) {
##TODO Вывод в лог 'Удаляем версию' $Package.Version
Uninstall-Package -Name $Package.Name -RequiredVersion $Package.Version -Force
}
}
Необходимо переделать под свои нужды, обернуть в ScriptBock и вставить в пример выше:
Get-ADComputer -Filter 'Фильтр по вкусу' | ForEach-Object -Process {
if (Test-NetConnection -ComputerName $PSItem.DnsHostName -InformationLevel Quiet) {
Write-Host $PSItem.Name 'доступен' -ForegroundColor Green
# В $ScriptBlock будет установка/проверка наличия/удаление старых версий/etc 1С
Invoke-Command -ComputerName $PSItem.DNSHostName -ScriptBlock $ScriptBlock
}
else {
Write-Host $PSItem.Name 'НЕдоступен' -ForegroundColor Yellow
}
}
P.S. - куски кода надерганы из разных скриптов, могут быть ошибки/опечатки.