@Digsecman

Как скомбинировать параметры powershell скрипта?

Здравствуйте!
Есть скрипт который выводит список всех пк домена кроме самого домена
Get-ADComputer -LDAPFilter "(&(objectCategory=computer)(!userAccountControl:1.2.840.113556.1.4.803:=8192))" -Properties name).name;

1.Нужно еще добавить в строчку фильтр по ОС Windows 10 чтобы отображались ТОЛЬКО пк с windows 10. В какую часть кода вставить фрагмент чтобы сработало?

(&(objectCategory=computer)(operatingSystem=Windows 10*))

2.проверить включен ли пк и начать установку если выключен то в конце установки на онлайн компы ожидать пока не включится следующий пк и продолжить установку на них:

$computername = (Get-ADComputer -LDAPFilter "(&(objectCategory=computer)(!userAccountControl:1.2.840.113556.1.4.803:=8192))" -Properties name | Sort).name;
Test-Connection -ComputerName $computername;
While ( (Test-Connection -Quiet -Count 1) -eq $False) {
Start-Sleep -Seconds 120
}
If ( (Test-WSMan -ComputerName $computername).wsmid -match "wsmanidentity\.xsd" ) {
# Remoting is enabled
Invoke-Command -Computername $computername -ScriptBlock {powershell "& 'C:\po.exe'" }
}
Else {
Write-Output "Remote PC is off now, waiting...";
}

3. скрипт не выполнять повторно на тех машинах на которых он выполнялся

Invoke-Command -Session $Session -ScriptBlock {
if ((Test-Path "c:\fusion") -eq "True")
{
Write-Output $name "folder present"
}
else {
Invoke-Command -Computername $computername -ScriptBlock {powershell "& 'C:\po.exe'" }

Как все совместить в 1 кучу чтобы работало?

Благодарю!!!
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
Вам по-хорошему надо один раз получить список компов и в csv его сохранить, добавив поле-флаг "установлено"
И потом пробегаться по файлу в поисках "не установлено" + "доступно"
Для реультата ставить
Типа
1 скрипт - get-adcomputer ... | select name, installed | export-csv -path xxx
2 скрипт
#читаем список всех компов
$all=Import-csv xxx
#проходим по списку в поисках живых где неустановлено
foreach ($comp in $all) {
  # проверяем всякие условия
  if (-not $comp.installed -and
     (test-connection $comp.name) -and
     (-not (test-path ....)) { #можно еще условий добавить
     #install
     Invoke-command -computername $comp.name { 
          #тут команды установки
          # никаких повторных invoke-command и powershell НЕ надо
     }
     .....
     #ставим флаг что установлено
     $comp.installed=$true
  }
}
#экспортируем обратно в csv с установленными флагами
$all | export-csv xxx

И запускать периодически пока не будет установлено на всех
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы