Привет.
Прошу правильно понять меня. У Вас плохо написан скрипт. Такая реализация имеет место быть, но чем проще и очевиднее пишете тем лучше. (лично мое мнение). Да и судя по всему вы сами запутались в нем же.
Переменная $all получает данные из AD по фильтру и еще что то импортирует. - Тут ок, Вам виднее что вы хотите найти.
Но вот ошибка в скобках 4 строчки
вероятно в выделенном месте:
$all=Get-ADComputer -LDAPFilter "(&(objectCategory=computer)(!userAccountControl:1.2.840.113556.1.4.803:=8192))" -Properties (name | Sort).name|Import-csv C:\Users\user\Desktop\list.csv
Только обратите внимание, что Вы дальше делаете конвеер
foreach. Зачем тут конвеер если данные находятся в переменной.
В самом
foreach только if содержится.
Так можно делать, но не удивляйтесь что дальше крашится будет еще активнее. Вероятнее всего в ветке
Test-Path -path $dest и далее. У вас нет ловли ошибок и работы с ними. Используйте
try catch.
Как минимум Хост может не ответить Вам на
Test-Path , а еще туча ошибок при копировании (
а есть ли папка назначения на данном хосте куда вы батник копируете? Это тоже стоит проверить) или
Invoke-command .
MaxKozlov не даст соврать, на этих командлетах можно много говна поймать.
Ну и концовка "$all | export-csv C:\Users\user\Desktop\installed.csv" - дело ваше как вы будете отслеживать на каких машинах взлетел скрипт на каких нет, но рекомендую заморочится в логировании.
Итог: Перепишите скрипт с нуля. У Вас сложная фильтрация в которой вы сами видимо запутались. Разбейте ее на 2-3 шага в отдельные переменные. Лучше так чем часами сидеть и не понимать ничего.
Сделайте полноценные хотя бы if else, ведь ошибки неизбежны.