Ввести компьютер в домен powershell

PowerShell: Получение информации о компьютерах в домене и TimeZone

В ночь с 29 на 30 октября 2011 в России должен был быть переход на зимнее время, однако волевым решение президента переходы на летнее и зимнее время были отменены, и Россия остается на летнем времени. Значит многие IT специалисты столкнулись с задачей обновления всех систем и в частности, необходимо обновить все клиентские и все серверные операционные системы. Компания Microsoft выпустила очередное обновление для исправления временных зон, учитывающее последние изменения KB2570791. Это обновление необходимо установить на все Windows машины, «для гладкого» прохождения ночи с 29 на 30 октября, без возможных последствий из-за внесенных изменений.

В случае если в текущей инфраструктуре большое количество серверов и машин, то бегать ногами к каждой машине и устанавливать обновление KB2570791 займет массу времени и сил. Поэтому, те кто привык работать головой, а не ногами (руками), давно уже имеют равернутый Microsoft Windows Server Update Services (WSUS), а то и не один.

Однако, что делать с компьютерами, которые в силы каких либо причин, находятся в домене, но не зарегистрировались на WSUS, либо из-за все возможных причин давно к нему не обращались. Один из вариантов, опросить все доступные в сети компьютеры и проверить корректность установки данного обновления. В этом нам может помочь Powershell, Vbs, AutoIT и другие подобные инструменты.

Далее предлагается один из вариантов решения задачи поиска машин в доменной сети с неустановленным обновлением KB2570791.

В качестве исходных данных, требуется только список машин в домене, его легко получить из оснастки Active Directory Users and Computers (dsa.msc), используя Saved Query. В итоге полученный список серверов и компьютеров в домене экспортируется в csv-файл, и этот файл является источником информации о компьютерах в сети. Основная информация, которая нам необходима в этом файле, это имя машины (поле Name).

Далее этот файл обрабатывается следующим образом:

  1. Проверяется, пингуется и ли машина
  2. Если машина пингуется, то проверяется:
    1. Текущая настройка TimeZone
    2. IP адрес
    3. Версию ОС
    4. Текущий пользователь
    5. Установлено ли обновление KB2570791

    На выходе, получим следующую информацию:

    1. Список машин, которые не пингуются
    2. Список не обновленных машин
    3. Список обновленных машин
    4. Список машин, с настройками других временных зон

    Чтобы реализовать выше описанное, потребуется:

    1. функция проверки отвечает ли хост на ping
    2. функция сбора информации о хосте
    1. Чтобы проверить пингуется ли удаленная машина, используется следующий набор команд:

    Где $CompName – это имя машины

    Полностью функция будет выглядеть следующим образом:

    1. Чтобы собрать необходимую информацию для данной задачи о удаленной машине, понадобится несколько командлетов.
      2.1 Для получения информации о удаленной машине будет использоваться функция Get-WmiObject, и классы WMI, так как это не накладывает дополнительных требований на удаленные машины.

    Командлет Get-WmiObject отображает экземпляры классов WMI или сведения о доступных классах WMI. Параметр ComputerName всегда можно использовать для указания удаленного компьютера. При задании параметра List этот командлет извлекает сведения о классах WMI, доступных в заданном пространстве имен. При указании параметра Query командлет запускает инструкцию языка запросов WMI (WQL).

    Командлет Get-WmiObject не использует инфраструктуру удаленного взаимодействия Windows PowerShell для выполнения удаленных операций. Параметр ComputerName командлета Get-WmiObject можно использовать, даже если компьютер не соответствует требованиям для удаленного взаимодействия Windows PowerShell и не настроен на удаленное взаимодействие в Windows PowerShell.

    Для сбора информации о машине, будут использоваться следующие WMI-классы:

    • Win32_TimeZone – для определения временной зоны
    • Win32_NetworkAdapterConfiguration – для определения настроенных IP адресов
    • Win32_OperatingSystem — для определения версии операционной системы и Service Pack
    • Win32_ComputerSystem – для определения пользователя компьютера

    Для получение полного списка доступных WMI-классов, можно использовать команду:

    При определении TimeZone, одно из самых наглядных параметров класса Win32_TimeZone, является свойство Caption. Его значение на обновленной машине выглядит следующим образом:

    (UTC+04:00) Moscow, St. Petersburg, Volgograd

    Однако как удалось заметить параметр Caption, на некоторых машинах имеет пустое значение, поэтому вместо него будет использоваться свойство BIAS. BIAS всегда имеет значение равное разнице между локальным временем и UTC.

    2.2 Для получения информации о том, есть ли на удаленной машине обновление KB2570791, будет использоваться командлет Get-Hotfix.

    Командлет Get-Hotfix возвращает исправления, примененные на локальном компьютере или на удаленных компьютерах с помощью компонентной модели CBS.

    Но так как, получать полный список установленных обновлений, для решения данной задачи, нет необходимости, то полученные результаты отфильтруем по обновлению KB2570791:

    Также в эту функцию будут включены операции, распределения полученной информации в соответствующие файлы. В итоге функция получения информации о компьютере будет выглядеть следующим образом:

    Начало основное скрипта Powershell, в котором сначала подготавливаются файлы для результатов, затем считывается файл, со списком машин, а затем данные из этого файла запускаются в обработку.

    После окончания работы скрипта и анализа полученных данных, файлы NotUpdated.txt и NotAvailable.txt можно обработать повторно. На основе файла NotUpdated.txt удобно проводить анализ причин отсутствия установленных обновлений.


    Приемы работы с удаленными системами через PowerShell

    Я часто работаю с командами на удаленных системах через PowerShell как во время пентестов, так и при решении повседневных задач. Запуска удаленных команд происходит через протокол WinRM (Windows Remote Management), который, насколько мне известно, поддерживается в Windows Vista SP 1, Windows 7, Windows Server 2008 и Windows Server 2012.

    image

    Автор: Scott Sutherland

    Я часто работаю с командами на удаленных системах через PowerShell как во время пентестов, так и при решении повседневных задач. Запуска удаленных команд происходит через протокол WinRM (Windows Remote Management), который, насколько мне известно, поддерживается в Windows Vista SP 1, Windows 7, Windows Server 2008 и Windows Server 2012.

    Первоначальные настройки

    Перед тем как начать работу с удаленной системой, необходимо выполнить настройку.

    1. Запустите консоль PowerShell от имени администратора и выполните следующую команду:

    Команда выше разрешает запуск команд на удаленных системах. Если у вас возникли проблемы, используйте команды ниже:

    2. Убедитесь в том, что служба WinRM запускается автоматически.

    # Устанавливаем нужный режим

    Set-Service WinRM -StartMode Automatic

    # Проверяем, что служба запущена

    Get-WmiObject -Class win32_service | Where-Object

    3. Устанавливаем у всех хостов статус «достоверный» (можно сделать позже).

    # Доверяем всем хостам

    Set-Item WSMan:localhostclienttrustedhosts -value *

    # Проверяем настройку достоверных хостов

    Примеры работы с удаленными системами

    Перед ознакомлением с примерами рекомендую вам прочитать прекрасную статью, посвященную работе с удаленными командами в PowerShell.

    Запуск одиночной команды на удаленной системе

    Команда «Invoke-Command» предназначена для запуска команд на удаленных системах. Можно работать от имени текущего пользователя, либо использовать стороннюю учетную запись, если вы работаете в системе, которая не является частью домена:

    Invoke-Command –ComputerName MyServer1 -ScriptBlock
    Invoke-Command –ComputerName MyServer1 -Credentials demoserveradmin -ScriptBlock

    Если установлен модуль для работы с ActiveDirectory, становится возможным запуск команд на множестве систем при помощи каналов (pipeline):

    Get-ADComputer -Filter * -properties name | select @> |
    Invoke-Command -ScriptBlock

    Иногда на удаленной системе требуется запустить скрипт, хранящийся локально:

    Invoke-Command -ComputerName MyServer1 -FilePath C:pentestInvoke-Mimikatz.ps1
    Invoke-Command -ComputerName MyServer1 -FilePath C:pentestInvoke-Mimikatz.ps1 -Credentials demoserveradmin

    Если вы генерируете команды или функции динамически, которые затем передаются на удаленную систему можно использовать связку команд invoke-expression и invoke-command:

    $MyCommand = «hostname»
    $MyFunction = «function evil ;evil»
    invoke-command -ComputerName MyServer1 -Credentials demoserveradmin -ScriptBlock
    -ArgumentList $MyFunction

    Организация интерактивной консоли на удаленной системе

    Организовать интерактивную консоль в PowerShell на удаленной системе можно при помощи команды «Enter-PsSession» (немного похожа на SSH). Команда «Enter-PsSession» также запускается либо от имени текущего пользователя, либо при помощи альтернативной учетной записи:

    Enter-PsSession –ComputerName server1.domain.com
    Enter-PsSession –ComputerName server1.domain.com –Credentials domainserveradmin

    Закрытие сессии выполняется при помощи команды «Exit-PsSession»:

    Создание фоновых сессий

    Еще одна полезная возможность позволяет создавать фоновые сессии (команда «New-PsSession»). Фоновые сессии могут оказаться полезны при запуске множества команд во множестве систем. Как и предыдущие команды, команда «New-PsSession» запускается от имени текущего пользователя, либо при помощи альтернативной учетной записи:

    New-PSSession -ComputerName server1.domain.com
    New-PSSession –ComputerName server1.domain.com –Credentials domainserveradmin

    Если установлен модуль для работы с ActiveDirectory, становится возможным единовременное создание фоновых сессий для множества систем (этот трюк можно выполнить различными способами). Ниже показан пример создания фоновых сессий для всех систем, входящих в домен. В примере создание сессий происходит в системе, не входящей в домен, при помощи альтернативной учетной записи домена.

    New-PSDrive -PSProvider ActiveDirectory -Name RemoteADS -Root »
    » -Server a.b.c.d -credential domainuser
    cd RemoteADS:
    Get-ADComputer -Filter * -Properties name | select @>
    | New-PSSession

    Вывод перечня фоновых сессий

    Как только создано несколько фоновых сессий, можно просмотреть их перечень при помощи команды «Get-PsSession».

    Взаимодействие с фоновыми сессиями

    Первое время у меня было ощущение схожее с тем, как я работал с сессиями в MetaSploit. Однако фоновые сессии в PowerShell чуть более стабильны. Ниже показан пример взаимодействия при помощи идентификатора сессии:

    Enter-PsSession –id 3

    Для выхода из сессии используйте команду «Exit-PsSession». Сессия перейдет обратно в фоновый режим.

    Запуск команд через фоновые сессии

    Если вы хотите выполнить команду во всех активных сессиях, используйте связку команд «Invoke-Command» и «Get-PsSession».

    Invoke-Command -Session (Get-PSSession) -ScriptBlock

    Удаление фоновых сессий

    Для удаления всех активных сессий используйте команду «Disconnect-PsSession»

    Удаленные команды в PowerShell открывают огромные возможности, как для администраторов, так и для пентестеров. Вне зависимости от ситуации, как вы будете работать с удаленными системами, все сводится к следующему:

    • Для запуска одиночной команды на удаленной системе используйте «Invoke-Command».
    • Для взаимодействия с одиночной системой используйте «Enter-PSSession».
    • Если вы хотите запускать множество команд во множестве систем, используйте фоновые сессии.

    Надеюсь, эта статья оказалась для вас полезной.

    Один хакер может причинить столько же вреда, сколько 10 000 солдат! Подпишись на наш Телеграм канал, чтобы узнать первым, как выжить в цифровом кошмаре!

    VMware ESX, vSphere, MS Hyper-V. Блог о виртуализиции.

    Тут я буду собирать ссылки, статьи и заметки о виртуализации и не только.

    Не каждый знает что в домен ввести компьютер можно из cmdlets — это быстрее чем лазать по менюшкам 🙂

    C:PS>add-computer -domainname Domain01 -cred Domain01Admin01
    C:PS>restart-computer

    Функции, которые я использую

    Это Функции PowerShell, которые я создал для каждого шага.

    Rename Computer

    Согласно моим исследованиям в Интернете, PowerShell 2.0 в какой-то момент перед выпуском имел встроенный командлет под названием Rename-Computer , но он была удалена по причинам, неизвестным в CTP 3. В моей версии используется WMI.

    Присоединить компьютер к домену

    Как видите, эта функция на самом деле всего лишь оболочка для встроенного командлета Add-Computer , который собирает доменное имя и создает некоторые учетные данные для использования.

    Запуск удаленного сеанса

    Если у вас несколько командлетов, которые вы хотите запустить на удаленном ПК, вместо многократного ввода командлета Invoke-Command и удаленного IP-адреса, вы можете запустить удаленный сеанс. Просто введите следующий командлет и нажмите «Ввод»:

    Enter-PSSession -ComputerName COMPUTER -Credential USER

    Снова замените «КОМПЬЮТЕР» на имя или IP-адрес удаленного ПК и замените «USER» на имя учетной записи пользователя, которую вы хотите вызвать.

    Ваше приглашение изменится, указывая на удаленный компьютер, к которому вы подключены, и вы можете выполнить любое количество командлетов PowerShell непосредственно в удаленной системе.

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector