Sysprep (generalize) a windows installation

Смена SID при клонировании или развёртывании

Однако исходя из вышесказанного, ничего страшного в развёртывании (или клонировании) машины без изменения Machine SID вовсе нет, в случае если это развёртывание происходит до добавления машины в домен. В противном случае — возникнут проблемы.

Из этого правила есть одно исключение: нельзя клонировать машину, если в дальнейшем роль этого клона планируется повышать (promote) до уровня домена контроллера. В этом случае Machine SID домен контроллера будет совпадать с computer SID в созданном домене, что вызовет проблемы при попытке добавления оригинальной машины (из которой производилось клонирование) в этот домен. Это, очевидно, относится только к серверному семейству Windows.

Настройка синхронизации обновлений

На странице Параметры находится Центральная точка доступа в консоли администрирования WSUS для настройки синхронизации обновлений сервером WSUS. Можно указать, какие обновления синхронизируются автоматически, где сервер получает обновления, параметры подключения и расписание синхронизации. Мастер настройки можно также использовать на странице Параметры для настройки или повторной настройки сервера WSUS в любое время.

Синхронизация обновлений по продукту и классификации

WSUS-сервер скачивает обновления на основе продуктов или семейств продуктов (например, Windows или Windows server 2008, datacenter edition) и классификаций (например, важных обновлений или обновлений безопасности), указанных вами. при первой синхронизации сервер WSUS скачивает все обновления, доступные в указанных категориях. При последующих синхронизациях сервер WSUS загружает только самые новые обновления (или изменения, внесенные в обновления, уже доступные на сервере WSUS) для указанных категорий.

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

Если сервер WSUS работает в режиме реплики, вы не сможете выполнить эту задачу. Дополнительные сведения о режиме реплики см. в статьях Запуск режима реплики WSUSи Шаг 1. Подготовка к развертыванию WSUS.

Указание продуктов и классификаций обновлений для синхронизации
  1. В консоли администрирования WSUS щелкните узел Параметры .

  2. Щелкните продукты и классификации, а затем перейдите на вкладку продукты .

  3. Установите флажки для продуктов или семейств продуктов, которые требуется обновить с помощью WSUS, а затем нажмите кнопку ОК.

  4. На вкладке классификации установите флажки для классификаций обновлений, которые необходимо синхронизировать с сервером WSUS, а затем нажмите кнопку ОК.

Примечание

Таким же образом можно удалить продукты или классификации. Сервер WSUS перестанет синхронизировать новые обновления для уже сброшенных продуктов. Однако обновления, которые были синхронизированы для этих продуктов до их очистки, останутся на сервере WSUS и будут перечислены как доступные.

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

Синхронизация обновлений по языку

Сервер WSUS скачивает обновления на основе указанных языков. Можно синхронизировать обновления на всех языках, где они доступны, или можно указать подмножество языков. При наличии иерархии серверов WSUS и необходимости загрузки обновлений на разных языках убедитесь, что на вышестоящем сервере указаны все необходимые языки. На подчиненном сервере можно указать подмножество языков, указанных на вышестоящем сервере.

Дополнительные сведения о синхронизации обновлений на сайте Центр обновления Майкрософт каталога см. в статье службы WSUS и сайт каталога.

Практическое применение

Sysprep помогает решать бизнес-задачи, например:

  • Помогает управлять несколькими компьютерами путем создания универсального образа, который можно использовать в различных аппаратных конструкциях.

  • Развертывание компьютеров путем записи и развертывания образов с уникальными идентификаторами безопасности.

  • Тонкая настройка отдельных компьютеров путем добавления приложений, языков или драйверов в режиме аудита. Дополнительные сведения см. в разделе Общие сведения о режиме аудита.

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

Использование Sysprep

  • Удаляется имя машины
  • Машина выводится из домена: это нужно для последующего успешного добавления в домен с новым именем
  • Удаляются plug-and-play драйвера, что уменьшает риск возникновения проблем с совместимостью на новом «железе»
  • Опционально удаляются Windows Event Logs (параметр ‘reseal’)
  • Удаляются точки восстановления
  • Удаляется профиль локального администратора и этот аккаунт отключается
  • Сбрасывается период активации Windows (сброс возможен до 3 раз)

Таким образом, клонирование/развертывание без использования Sysprep может повлиять (читай «скорее всего, сломает») на функционал Windows Update, Network Load Balancing, MSDTC, Vista и выше Key Manager Activation (KMS), который завязан на CMID (не путать с Machine SID), также изменяемый Sysprep’ом, и т.д.

Сколько у компьютера SID-ов?

О том, что такое SID у пользователя, я уже рассказывал. SID — это уникальное имя (буквенно-цифровая символьная строка), которое используется для идентификации объекта, такого как пользователь или компьютер в сети систем NT. Windows предоставляет или запрещает доступ и права доступа к ресурсам на основе ACL, которые используют SID для уникальной идентификации компьютеров и их членства в группах. Когда компьютер запрашивает доступ к ресурсу, его ACL проверяет SID компьютера, чтобы определить, разрешено ли этому компьютеру выполнять это действие или нет. Схематично выглядит вот так.

Существует два типа SID у компьютера:

  • Первый тип, это когда рабочая станция или сервер не являются членом домена Active Directory
  • Второй тип, это когда компьютер входит в домен Active Directory

Первым делом я выведу имя компьютера, через команду hostname. В моем примере, это W10-CL01.

Далее я выведу локальный SID компьютера, через утилиту PsGetSid:

PsGetSid W10-CL01

В итоге я получил SID for W10-CL01\w10-cl01:S-1-5-21-7706586-876249769-275126362

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

PsGetsid.exe w10-cl01$

И команда указанная выше, показывает вам доменный SID рабочей станции. SID for ROOT\w10-cl01$:S-1-5-21-233550040-578987154-4094747311-1602

Обратите внимание, что перед идентификаторам идет имя домена ROOT\

Насколько популярна Windows 7

Windows 7 перестала получать основную поддержку 13 января 2015 г. и сейчас находится на расширенной поддержке. При этом ОС все еще сравнительно популярна, несмотря на то, что число ее пользователей продолжает медленно, но верно сокращаться.

Так, согласно данным сервиса Statcounter по состоянию на май 2021 г., «семеркой» продолжает пользоваться 15,52% владельцев ПК под управлением ОС семейства Windows. Безусловным лидером является Windows 10, ее доля на рыке Windows-систем немного не дотягивает 79%. На долю Windows 8 и 8.1 суммарно приходится 4,71%, а легендарная XP и Visa могут похвастаться показателями в 0,6% и 0,25% соответственно.

Обходной путь

В качестве временного обходного пути вручную отредактировать GPTMPL. Файл INF, добавив префикс службы NT \ перед именем учетной записи wdiservicehost для пользователя Производительность системы профилей прямо в политике контроллеров домена по умолчанию. Это необходимо делать каждый раз, когда все параметры безопасности в политике контроллеров доменов по умолчанию вводятся с помощью GPMC.

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

  1. Откройте GPTTMPL. InF-файл для политики контроллеров домена по умолчанию контроллера домена, в журнале event ID 1202. Путь к GPTTMPL. Файл INF, когда SYSVOL расположен ниже %SystemRoot%, является:

  2. Найдите запись в GPTTMPL. INF и измените его следующим образом:

    Перед: = *S-1-5-32-544,WdiServiceHost

    После: = *S-1-5-32-544,nt service\WdiServiceHost

    Примечание

    Служба NT \ должны появиться после «,» delimiter. Не префиксить службу \ NT с помощью символа «*».

  3. Сохраните изменения в GPTTMPL.INF.

  4. Из командной подсказки на консоли контроллера домена, GPTTMPL которого. Файл INF был изменен в шаге 1, тип Gpupdate/force.

  5. Просмотреть журнал приложения, чтобы узнать, был ли зарегистрирован код события 1202 с кодом 0x534 состояния. Если это так, просмотрите WINLOGON. ЖУРНАЛ, чтобы узнать, вызвано ли событие главными службами безопасности WdiServiceHost.

Автоматизация оповещения по событиям 11707

Теперь когда вы знаете, как находить события по установке программ в системах семейства Windows, вам нужно автоматизировать данный процесс. Например, получать по почте, кто установил, где и что. В этом нам поможет конечно же PowerSell. Смысл автоматизации состоит в том, что вы на нужном сервере создаете задание в планировщике Windows, где будет запускаться скрипт PowerShell. Я вам приведу два скрипта, первый тот, что гуляет на просторах интернета.

Тут главное заполнить:

  • Адрес вашего SMTP сервера
  • От кого будет письмо
  • Кому отправлять письмо
  • Пароль от ящика отправителя

$Subject = «Установлено новое ПО» # Тема сообщения $Server = «smtp.pyatilistnik.org» # Тут пишем ваш SMTP Server $From = “[email protected]” # От кого будет отослано письмо $To = «[email protected]» # Кому отправляется письмо $Pwd = ConvertTo-SecureString «123456» -AsPlainText -Force #Пароль учетной записи отправителя # (Внимание! Используйте очень ограниченную учетную запись для отправителя, поскольку пароль, сохраненный в скрипте, не будет зашифрован) $Cred = New-Object System.Management.Automation.PSCredential(«[email protected]» , $Pwd) #Sender account credentials $encoding = ::UTF8 #Установка кодировки в UTF8 для корректного отображения сообщения #Команда Powershell для фильтрации журнала безопасности об установленном программном событии $Body=Get-WinEvent -FilterHashtable @{LogName=»Application»;ID=11707;ProviderName=’MsiInstaller’} | Select TimeCreated, Message, UserID | select-object -first 1 #Отправка электронной почты. Send-MailMessage -From $From -To $To -SmtpServer $Server -Body “$Body” -Subject $Subject -Credential $Cred -Encoding $encoding. В результате вы получите письмо вот такого содержания:

В результате вы получите письмо вот такого содержания:

@{TimeCreated=04/10/2020 15:40:11; Message=Product: Log Parser 2.2 — Installation completed successfully.; UserId=S-1-5-21-4284852150-1823218374-53464103-500}

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

Так же вам никто не запрещает просто открыть PowerShell и ввести не сложный код:

Get-WinEvent -FilterHashtable @{LogName=»Application»;ID=11707;ProviderName=’MsiInstaller’} | Select TimeCreated, Message, UserID | select-object -first 1

Напоминаю, что select-object -first 1 выводит первое событие, можете увеличить на нужное вам.

Запуск Sysprep

Программу необходимо запускать от имени Администратора и желательно из под учётной записи Администратора. Для запуска программы перейдём в каталог программы, выполнив WIN + R команду:

Sysprep

После запуска программы мы увидим следующее диалоговое окно:

Переход в окно приветствия системы (OOBE) означает что после завершения сброса при следующем запуске появится настройка первого запуска, где мы будем указывать имя пользователя, давать имя своему компьютеру и т.д,
а галочка напротив параметра Подготовка к использованию поможет нам сбросить активацию Windows.

Параметры завершения работы дают нам выбор:

  • Завершение установки — выбираем в том случае, когда мы собираемся заменить материнскую плату или процессор. А сам сброс мы выподняем ДО (!) замены оборудования
  • Перезагрузка — данный пункт нам нужен в случае сброса лицензии или устранения каких-то ошибок на текущей конфигурации компьютера (без замены комплектующих) для чистой установки всех необходимых драйверов.
  • Выход — соответственно завершает сеанс пользователя по завершению.

После выбора всех параметров запускаем очистку sysprep OK

Новые и измененные функции

начиная с Windows 10 версии 1607, Sysprep можно использовать для подготовки обновленного образа. Пример:

  • можно начать с компьютера, на котором выполняется Windows 10, версии 1511 или Windows 10 версии 1507.
  • обновите компьютер для запуска Windows 10 версии 1607.
  • Запустите sysprep generalize на обновленном образе, повторно запишите обновленный образ и разверните образ на новых устройствах.

этот процесс позволяет предприятиям эффективно и непрерывно развертывать Windows 10 образы развертывания.

начиная с Windows 8.1 пользовательский интерфейс Sysprep является устаревшим. Пользовательский интерфейс Sysprep будет по-прежнему поддерживаться в этом выпуске, однако он может быть удален в будущем выпуске. Обновите рабочий процесс развертывания, чтобы использовать Sysprep из командной строки. Дополнительные сведения смотрите в статье Параметры командной строки Sysprep.

Обновление не применимо к компьютеру

Наиболее распространенные причины этой ошибки описаны в следующей таблице:

Причина Объяснение Разрешение
Обновление заменено По мере выпуска обновлений для компонента обновленный компонент заменит более старый компонент, который уже находится в системе. В этом случае предыдущее обновление помечается как замененное. Если обновление, которое вы пытаетесь установить, уже содержит более новую версию полезных данных в системе, может появиться сообщение об ошибке. Убедитесь, что устанавливаемый пакет содержит более новые версии двоичных файлов. Или убедитесь, что пакет был заменен другим новым пакетом.
Обновление уже установлено Если обновление, которое вы пытаетесь установить, было установлено ранее, например, другим обновлением с теми же полезными данными, может появиться сообщение об ошибке. Убедитесь, что пакет, который вы пытаетесь установить, не был установлен ранее.
Неправильное обновление архитектуры Обновления публикуются по архитектуре процессора. Если обновление, которое вы пытаетесь установить, не соответствует архитектуре процессора, может появиться сообщение об ошибке. Убедитесь, что пакет, который вы пытаетесь установить, соответствует используемой версии Windows. Сведения о версии Windows можно найти в разделе «Применимо к» статьи для каждого обновления. Например, на компьютерах под управлением Windows Server 2012 R2 невозможно установить обновления только для Windows Server 2012. Кроме того, убедитесь, что устанавливаемый пакет соответствует архитектуре процессора используемой версии Windows. Например, обновление на основе x86 невозможно установить в установках Windows на основе x64.
Необходимый компонент обновления отсутствует Для некоторых обновлений требуется наличие необходимых компонентов, прежде чем их можно будет применить к системе. При отсутствии необходимых компонентов, может возникнуть это сообщение об ошибке. Например, KB 2919355 должен быть установлен на компьютерах с Windows 8.1 и Windows Server 2012 R2 перед установкой многих обновлений, выпущенных выпущенные после апреля 2014 года. Проверьте соответствующие статьи о пакете в базе знаний Майкрософт, чтобы убедиться, что установлены необходимые обновления. Например, если вы столкнулись с сообщением об ошибке на Windows 8.1 или Windows Server 2012 R2, может потребоваться установить обновление 2919355 за апрель 2014 г. как необходимые обновления, а также одно или несколько необходимых обслуживающих обновлений (KB 2919442 и KB 3173424). Чтобы определить, установлены ли эти необходимые обновления, запустите следующую команду PowerShell: . Если обновления установлены, команда возвращает дату установки в разделе выходных данных .

IRP-система штатными средствами Windows

Как мы увидели, встроенный функционал подсистемы журналирования Windows позволяет весьма гибко осуществлять поиск по зафиксированным событиям аудита ИБ, комбинируя различные условия поиска. Однако, у Windows есть еще одна интересная «фишка», которая позволяет использовать сформированные описанным выше образом правила поиска событий — мы говорим про создание задач с определенным триггером в «Планировщике заданий» Windows, что также является штатным функционалом ОС.

Как мы знаем, задачи в ОС Windows могут выполнять совершенно разные функции, от запуска диагностических и системных утилит до обновления компонент прикладного ПО. В задаче можно не только указать исполняемый файл, который будет запущен при наступлении определенных условий и триггеров, но и задать пользовательский PowerShell/VBS/Batch-скрипт, который также будет передан на обработку. В контексте применения подсистемы журналирования интерес для нас представляет функционал гибкой настройки триггеров выполнения задач. Открыв  «Планировщик заданий» (taskschd.msc), мы можем создать новую задачу, в свойствах которой на вкладке  «Триггеры» мы увидим возможность создать свой триггер. При нажатии на кнопку  «Создать» откроется новое окно, в котором в drop-down списке следует выбрать вариант  «При событии», а в открывшейся форме отображения установить radio-button  «Настраиваемое». После этих действий появится кнопка  «Создать фильтр события», нажав на которую, мы увидим знакомое меню фильтрации событий, на вкладке XML в котором мы сможем задать произвольное поисковое условие в синтаксисе XPath-запроса.

Например, если мы хотим выполнять некоторую команду или скрипт при каждом интерактивном входе в систему пользователя Username, мы можем задать в качестве триггера задачи следующее поисковое выражение, уже знакомое нам по примеру выше:

 Другой пример: оповещение администратора при подозрительном обращении к системному процессу lsass.exe, который хранит в своей памяти NTLM-хэши и Керберос-билеты пользователей Windows, что может говорить об использовании утилиты Mimikatz или аналогичных ей:

Проверка файловой системы на повреждения

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

sfcscannow после Dism /online /cleanup-image /restorehealth и затем ChkDsk /r 

Как видите в моем случае, утилиты смогли найти повреждения и восстановить их.

Еще одной из причин была ситуация в Windows Server 2008 R2 или Windows 7: Эта проблема возникает из-за состязания между службой профилей пользователей (Profsvc.dll) и службой поиска Windows (SearchIndexer.exe). Служба профилей пользователей размещается в экземпляре Svchost.exe. Когда применяется параметр групповой политики, служба профилей пользователей выполняет поиск в папке профиля пользователя, чтобы рекурсивно удалить содержимое. Однако служба поиска Windows может попытаться проверить содержимое папки одновременно. Таким образом возникает ситуация взаимоблокировки, и вы сталкиваетесь с проблемами, описанными в разделе «Проблема». Компания Microsoft выпускала обновление, которое создает две записи реестра в следующем разделе реестра:

DeleteRetryWait 1000 Интервал (измеряется в миллисекундах) между попытками удаления папки профиля пользователя в случае неудачного удаления DeleteRetryAttempts 15 Максимальное количество попыток удаления

На форуме Microsoft я наткнулся на одно обсуждение, где для ремонта профиля предлагалось использовать утилиту Reprofier.

Скачать Reprofier

Вот так выглядит интерфейс Reprofier, очень удобно для локальных профилей, которые подвергнулись повреждению.

Параметры Command-Line Sysprep

Для Sysprep доступны следующие параметры командной строки:

Sysprep.exe [ /oobe | /Audit]

[/reboot | /Shutdown | /Куит]

В следующей таблице перечислены параметры командной строки Sysprep.

Вариант
Описание
/Audit

Перезапускает компьютер в режиме аудита. Режим аудита позволяет добавлять в Windows дополнительные драйверы или приложения. можно также проверить установку Windows перед отправкой установки конечному пользователю. Пример:

при указании файла ответов режим аудита программа установки Windows выполняет этапы настройки auditSystem и auditUser .

/generalize

подготавливает установку Windows для создания образа. Sysprep удаляет все уникальные сведения о системе из Windows установки. Sysprep сбрасывает идентификатор безопасности (SID), очищает все точки восстановления системы и удаляет журналы событий. Пример:

При следующем запуске компьютера запускается этап настройки specialize . Этап настройки создает новый идентификатор безопасности (SID).

/Oobe

Перезапускает компьютер в режиме OOBE. Пример:

OOBE позволяет конечным пользователям настраивать операционные системы Windows, создавать учетные записи пользователей, указывать имя компьютера и выполнять другие задачи. Перед запуском программы Sysprep в файле ответов обрабатываются все параметры этапа настройки oobeSystem .

/mode: виртуальная машина

Обобщает виртуальный жесткий диск (VHD), чтобы можно было развернуть VHD в качестве виртуального жесткого диска на виртуальной машине или гипервизоре. После перезапуска ВИРТУАЛЬНОЙ машины виртуальная машина может загружаться в OOBE. Пример:

Единственными дополнительными параметрами, применяемыми к режиму ВМ, являются /reboot, /Shutdownи /Куит. Виртуальный жесткий диск необходимо развернуть на виртуальной машине или гипервизоре с тем же профилем оборудования. например, если вы создали виртуальный жесткий диск в Microsoft Hyper-V, вы можете развернуть его только на Microsoft Hyper-V виртуальных машинах с соответствующим профилем оборудования

Развертывание виртуального жесткого диска на другой виртуальной машине с другим профилем оборудования может привести к непредвиденным проблемам.

ВажноРежим ВМ можно запустить только из виртуальной машины.

/reboot
Перезапускает компьютер. Этот параметр можно использовать для аудита компьютера и проверки правильности работы первого запуска.
/Shutdown
Завершает работу компьютера после завершения выполнения команды Sysprep .
/quiet
Запускает средство Sysprep без отображения сообщений подтверждения на экране

Этот параметр можно использовать при автоматизации средства Sysprep.
/куит
Закрывает средство Sysprep без перезагрузки или выключения компьютера после запуска программой Sysprep указанных команд.
/unattend:

применяет параметры в файле ответов для Windows во время автоматической установки, где параметр указывает путь и имя файла ответов для использования. Пример:

где F — буква портативного устройства хранения, на котором расположен файл ответов (Unattend.xml).

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

Методы определения сида компьютера

  • Первый метод я вам уже показал. он заключается в использовании утилиты PsGetSid
  • Второй метод, это использование командной строки, с помощью утилиты dsquery. Получать мы таким методом будем доменный SID у сервера или рабочей станции:

dsquery * -Filter «(name=Имя компьютера)» -attr objectSID

или

dsquery computer -name «Имя компьютер» | dsget computer -SID

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

В противном случае вы получите ошибку «dsquery» не является внутренней или внешней

Через скриптик VBS. Вы копируете код представленный ниже или скачиваете уже готовый файл у меня, только лишь потом отредактировав его и изменив имя на свое. После чего у вас будет запрошен локальный SID компьютера. Напоминаю, что у всех встроенных групп или учетных записей, начало их идентификатора безопасности состоит из полного SID компьютера с добавлением своего дополнительного номера.

Скачать VBS скрипт по запросу SID компьютера

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

function get-sid { Param ( $DSIdentity ) $ID = new-object System.Security.Principal.NTAccount($DSIdentity) return $ID.Translate( ).toString() } $admin = get-sid «Администратор» $admin.SubString(0, $admin.Length — 4)

тут так же будет запрошен SID учетной записи «Администратор». Если компьютер доменный, то нам поможет командлет Get-ADComputer. Запускаем оснастку PowerShell и вводим команду:

Get-ADComputer -identity «W10-CL01» -Properties «SID» | FL SID

или

Get-ADComputer W10-CL01 -prop sid

Как видите методов очень много. Видел я метод и получения сида из реестра Windows, в ветке

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

На этом у меня все, с вами был Иван Семин, автор и создатель IT блога Pyatilistnik.org.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: