![]() |
Модераторы: bartram, Akella |
![]() ![]() ![]() |
|
NordWolf |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 15.8.2007 Репутация: нет Всего: 1 |
Добрый день! У меня небольшая проблема с написанием скрипта, да и вообще хотелось бы услышать совета от более опытных людей, чем я. Задача, казалось бы, тривиальная, но я бьюсь с ней уже неделю. Суть – нужно собрать список всех рабочих станций в дереве, выбрать из них включенные, вытащить из включенных список установленного ПО и вывести итог в табличке Excel. Всё. В сети есть куча разных скриптов, но везде есть свои ньюансы. Одни скрипты лезут в AD в определённую OU и вытаскивают оттуда список всех компов, пингуют их и выкладывают в файл. Например:
Проблема. Скрипт прекрасно отрабатывает в локальном домене, но если нам нужно чтобы скрипт доставал информацию из других поддоменов леса (Get-ADComputer -filter * -SearchBase " OU=Workstations,DC=subdomain,DC=domain,DC=local"), то возникают проблемы. На большинстве серверов поддоменов стоят Windows 2008 Standard и, как я понял, для них нужно отдельно устанавливать ADWS. На наши сервера почему-то не ставятся, пишет что данное обновление не подходит для текущей версии. Хотя все требования для установки выполнены. ((( Сам скрипт при выполнении ругается:
Файерволл отключал. Всё равно возвращает ссылку. 2 дня бился с этой проблемой, но так и не победил её. Решил пойти другим путём. Нашёл «многопоточный сканер IP адресов в локальной сети». Задал нужный диапазон подсетей и адресов, скрипт отработал нормально. Записал все пингующиеся хосты в файл. Минусы – долго, записывает не только рабочие места, но и принтеры, маршрутизаторы и пр… Начал пробовать доставать список ПО. Скрипт:
Запускаю так:
Проблема осталась та же – он отработал по списку IP той подсети, в которой он запускался, но информацию о ПО рабочих станций других подсетей не собрал. Опыта работы в PSh не много (неделя, как начал с ним разбираться), поэтому прошу помочь в решении данной задачи. Правильной ли дорогой иду? Что упускаю? Куда копать? Заранее Спасибо. |
||||||||
|
|||||||||
NordWolf |
|
||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 15.8.2007 Репутация: нет Всего: 1 |
Немного продвинулся по своему вопросу.
Оказывается ADWS не устанавливался на Windows 2008 Standrad потому, что не было накатано последнее обновление на Microsoft .Net Framework 3.5 SP1 под номером NDP35SP1-KB969166-x64, хотя автоматические обновления стоят. Подробнее проблема описывается здесь: https://blogs.technet.microsoft.com/heyscri...ershell-access/ После этого разобрался, почему не запускался скрипт, который получает список компьютеров из AD сервера,находящегося в поддомене. В итоге, подкорректировал скрипт и теперь он выглядит так:
Скрипт берёт список рабочих станций в нужной OU в нужном поддомене, сохраняет в файл, удаляет лишние символы, пингует хосты по списку, какие откликаются - записывает в файл ON.txt. Далее нужно вытащить из полученного списка рабочих станций, список установленного на них ПО. При попытки выполнить вышеупомянутый в первом сообщении скрипт (Get-InstalledApp.ps1) командой:
Выдаёт ошибку:
Как я понимаю, дело здесь в том что я запускаю данный скрипт под пользователем, у которого нету прав. Пробовал запускать под админом поддомена, используя команду:
При выполнении выдаёт окно ввода логина и пароля, ввожу, выходит ошибка:
куда копать, подскажите? |
||||||||||
|
|||||||||||
01MDM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 10.5.2008 Где: Default City Репутация: 29 Всего: 29 |
На мой взгляд вы запутались в Start-Process. Отработает или нет не знаю, так как не админ.
-------------------- Вопросы в личке останутся без ответов. |
|||
|
||||
NordWolf |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 15.8.2007 Репутация: нет Всего: 1 |
Возможно. Я делаю по примерам из сети. Попробовал сделать проще:
Выходит окошко для ввода логина и пароля, ввожу, он думает секунд 7, а потом выдаёт ошибку и быстро закрывает окно:
|
||||||
|
|||||||
01MDM |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 10.5.2008 Где: Default City Репутация: 29 Всего: 29 |
Что это такое?
Если к скрипту Get-InstalledApp.ps1 идет набор парараметров из содержимого файла on.txt, то и оформите это соответствующим образом:
Но и здесь, без самого on.txt, возникают вопросы. -------------------- Вопросы в личке останутся без ответов. |
||||
|
|||||
NordWolf |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 15.8.2007 Репутация: нет Всего: 1 |
да, я увидел, что скобочки не поставил, собственно эффект тот же. Сам скрипт Get-InstalledApp.ps1 отрабатывает отлично при условии что в файле ON.txt список раб мест, находящихся в основном домене (domain.local). Запускаю так:
Если в файле ON.txt список раб мест, находящихся в в поддомене (subdoamin.pelican.local), то возникает проблема описанная выше. Содержимое ON.txt это записи вида:
|
||||||
|
|||||||
01MDM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 10.5.2008 Где: Default City Репутация: 29 Всего: 29 |
А где остальные параметры? Их нет в файле on.txt:
-------------------- Вопросы в личке останутся без ответов. |
|||
|
||||
NordWolf |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 15.8.2007 Репутация: нет Всего: 1 |
в ON.txt лишь список рабочих компов. По сценарию скрипт Get-InstalledApp вытаскивает информацию об установленном ПО с этих рабочих компов и сортирует их по параметрам указанным выше. Например, если я сделаю так:
То он мне выведет список всего ПО установленного у меня на компе в 4 колонки (ComputerName, AppName, Version, Publisher). Тоже самое произойдёт, если в файле ON.txt будет название компов находящихся в корневом домене(domain.local) - он выведет список с 4-мя колонками и отсортирует по названию компа. Но если в файле будут списки компов из поддомена (subdomain.domain.local), то он выведет ошибку: Отказано в доступе. Пробую запускать от имени админа поддомена, он выдаёт другую ошибку "Сервер RPC недоступен". Суть вопроса проста. Как вытащить список ПО имея список компов(ON.txt), которые находятся в твоём поддомене? |
|||
|
||||
01MDM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 10.5.2008 Где: Default City Репутация: 29 Всего: 29 |
NordWolf,
Понятно, я не внимательно посмотрел скрипт. Значит это проблема доступа, наверное следует смотреть в сторону изучения PowerShell Remoting (есть доходчивые статьи) -- настройки удаленного доступа. Это к сожалению выходит за рамки моей компетенции -- никогда не имел даже рабочего компьютера, не говоря о сети. -------------------- Вопросы в личке останутся без ответов. |
|||
|
||||
NordWolf |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 15.8.2007 Репутация: нет Всего: 1 |
||||
|
||||
NordWolf |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 15.8.2007 Репутация: нет Всего: 1 |
Нашёл отличную статью на хабре по PSh Remoting
https://habrahabr.ru/post/278691/ Итак, добился вывода списка ПО со всех компов леса. Есть несколько вопросов по оптимизации... Что сейчас происходит. 1) Запускаю скрипт ON.ps1 без каких-либо дополнительных параметров. Скрипт пробегает по всем серверам леса, находит там все компы и записывает в файл с именем *_Allcomps.txt. Далее берёт их из списка и пингует. Тех, кто откликается на пинг - закидывает в файл ON.txt на СЕРВЕР филиала, к которому принадлежат эти компы. Пример скрипта:
2) Далее. Я запускаю скрипт, находящийся на моём компе "comp" (S1.ps1), на удалённом серваке под определённым пользователем. По очереди (brn, ekb, krsk,etc). для каждого сервера филиала. Вот пример:
Содержание s1.ps1:
Содержание Get-InstalledApp.ps1 не менял, см. выше. В итоге, скрипт подключается к введённому в параметрах командлета Invoke-Command серваку, берёт оттуда сформированный ранее файл ON.txt, выдёргивает ПО на компах (Get-InstalledApp.ps1) и записывает на мой комп(comp.domain.local). Для каждого сервака я проделываю процедуру с Invoke-Command вручную, т.к. нужно вписывать логины и пароли каждый раз разные. Друзья, как можно оптимизировать данный код с вашей точки зрения? А то получается, что мне для того чтобы вытащить ПО нужно сначала запустить скрипт (ON.ps1) , потом запустить другой скрипт(s1.ps1), вписывая в параметры ручками название сервака и логин\пароль админа того сервака, от имени которого нужно запустить данный скрипт... |
||||||
|
|||||||
NordWolf |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 15.8.2007 Репутация: нет Всего: 1 |
Да, забыл уточнить. Версия PowerShell 3.0
|
|||
|
||||
NordWolf |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 15.8.2007 Репутация: нет Всего: 1 |
Спасение утопающих дело рук самих утопающих)
1) первое, что нужно обязательно сделать - так это внести в групповые политики настройки брандмауэра - разрешить работу с WinRM и WS-Management (WMI). На эту тему есть куча статей, например, на хабре. 2) Немного перегруппировал куски кода, чтобы можно было запускать 1 файл, а не несколько как раньше. Добавил маркеры (write host) для удобства мониторинга, немного переделал логику. А так же добавил возможность сохранения пароля после разового ввода и последующего его использования в коде. В итоге получилось, что при запуске скрипта ON.ps1, запрашиваются сразу авторизационные данные (Credentials) для всех дочерних доменов(7 шт), для последующего их использования. 3) На некоторых хостах появлялась ошибка "Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)". Чаще всего это устранялось - добавлением исключений в брандмауэр (см. пункт 1), либо исправлением ошибок в DNS. Либо надо смотреть на конкретном примере) Ну а теперь собственно сам скрипт... приведу лишь часть, т.к. он повторяется.
Get-InstalledApp.ps1 - остался неизменным (см. выше). Я уверен, код можно оптимизировать, загнав его допустим в цикл с перебором значений, но я этого пока не умею делать (осваивать PSh стал недавно). А время поджимает, начальство постоянно подкидывает всё новые задания. Поэтому буду рад вашей помощи в этом вопросе. Ну а так, спасибо 01MDM за советы и помощь. Надеюсь мой труд и опыт кому-нибудь ещё пригодится. Это сообщение отредактировал(а) NordWolf - 24.5.2016, 07:13 |
|||
|
||||
Lizukcha |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 15.5.2016 Репутация: нет Всего: нет |
Хорошо статья! ![]() |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "Windows" | |
|
Запрещается! 1. Обсуждать взлом и делиться кряками 2. Способствовать созданию и распространению вирусов
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, December, bartram, Akella. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS Windows | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |