<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1397716098892955610</id><updated>2025-11-23T18:27:23.104-08:00</updated><category term="Linux"/><category term="Terminal"/><category term="Linux Soft"/><category term="Программирование"/><category term="Bash скрипты"/><category term="Linux настройка"/><category term="Windows"/><category term="Active Directory"/><category term="GSM"/><category term="Python"/><category term="Raid массивы"/><category term="Telnet"/><category term="VBscript"/><category term="Безопасность сервера"/><category term="Бэкапы"/><title type='text'>Day &amp;gt; /dev/null</title><subtitle type='html'>Записки системного администратора</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://daydevnull.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://daydevnull.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Scorp</name><uri>http://www.blogger.com/profile/05623486012631508720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1397716098892955610.post-3213174172156043444</id><published>2017-11-17T06:06:00.000-08:00</published><updated>2017-11-17T06:06:07.646-08:00</updated><title type='text'>Открываем окно &quot;параметры значков рабочего стола&quot;  через командную строку (консоль)</title><content type='html'>
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
В Windows 8, Windows 10 под учетной записью доменного администратора не дает открыть окно &quot;параметры значков рабочего стола&quot; - выскакивает ошибка rundll32.exe &quot;Windows не удается получить доступ к указанному устройству, пути или файлу.&amp;nbsp;Возможно, у вас нет нужных разрешений для доступа к этому объекту.&quot;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://1.bp.blogspot.com/-cpPVoQ4BO9Q/Wg7muWqJdLI/AAAAAAAAHPU/Yvm7orGRURo8NiUemdIwJWOKtB_4bMkKgCLcBGAs/s1600/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;150&quot; data-original-width=&quot;576&quot; height=&quot;83&quot; src=&quot;https://1.bp.blogspot.com/-cpPVoQ4BO9Q/Wg7muWqJdLI/AAAAAAAAHPU/Yvm7orGRURo8NiUemdIwJWOKtB_4bMkKgCLcBGAs/s320/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;Нажимаем сочетание клавиш Win&amp;nbsp;+ R и в строке запуска команды вводим:&lt;br/&gt;
&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
Rundll32 shell32.dll,Control_RunDLL desk.cpl,,5&lt;/div&gt;
И жмем кнопку &quot;OK&quot;. В результате откроется окно &quot;параметры значков рабочего стола&quot;.
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-UxrW8y7eHXE/Wg7seteGhzI/AAAAAAAAHPk/Pc5v68bdhEw2z-JaHgX3MgDxG05u8SKIQCLcBGAs/s1600/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA1.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://2.bp.blogspot.com/-UxrW8y7eHXE/Wg7seteGhzI/AAAAAAAAHPk/Pc5v68bdhEw2z-JaHgX3MgDxG05u8SKIQCLcBGAs/s320/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA1.PNG&quot; width=&quot;279&quot; height=&quot;320&quot; data-original-width=&quot;407&quot; data-original-height=&quot;466&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://daydevnull.blogspot.com/feeds/3213174172156043444/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://daydevnull.blogspot.com/2017/11/blog-post.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/3213174172156043444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/3213174172156043444'/><link rel='alternate' type='text/html' href='http://daydevnull.blogspot.com/2017/11/blog-post.html' title='Открываем окно &quot;параметры значков рабочего стола&quot;  через командную строку (консоль)'/><author><name>Scorp</name><uri>http://www.blogger.com/profile/05623486012631508720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-cpPVoQ4BO9Q/Wg7muWqJdLI/AAAAAAAAHPU/Yvm7orGRURo8NiUemdIwJWOKtB_4bMkKgCLcBGAs/s72-c/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA.PNG" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1397716098892955610.post-7846123829028409504</id><published>2017-06-19T06:24:00.000-07:00</published><updated>2017-11-17T06:05:57.875-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Исправляем ошибку доступа SystemSettingsAdminFlows.exe</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; В Windows 10 и Windows Server 2016 может появиться ошибка: c:\windows\system32\SystemSettingsAdminFlows.exe Windows не удается получить доступ к указанному устройству, пути или файлу. &amp;nbsp;Возможно, у вас нет нужных разрешений для доступа к этому объекту.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://1.bp.blogspot.com/-b95vEbSFcAo/WUfMHH1rSwI/AAAAAAAAHKg/rUfVETFCKoMO5pHl4eaEC3nJ6CN7hEb9QCLcBGAs/s1600/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA2.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;163&quot; data-original-width=&quot;579&quot; height=&quot;90&quot; src=&quot;https://1.bp.blogspot.com/-b95vEbSFcAo/WUfMHH1rSwI/AAAAAAAAHKg/rUfVETFCKoMO5pHl4eaEC3nJ6CN7hEb9QCLcBGAs/s320/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA2.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
или&lt;br /&gt;
c:\windows\system32\SystemSettingsAdminFlows.exe You cannot access this device, path or file. You don&#39;t have sufficient priviliges to access this element.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Исправляем в русской версии Windows:&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
1) &amp;nbsp;Нажимаем &lt;span style=&quot;color: lime;&quot;&gt;Win&amp;nbsp;+ R&lt;/span&gt; &amp;nbsp;или кликаем правой кнопкой мыши по иконке меню &quot;&lt;span style=&quot;color: lime;&quot;&gt;Пуск&lt;/span&gt;&quot; и выбираем пункт &quot;&lt;span style=&quot;color: lime;&quot;&gt;Выполнить&lt;/span&gt;&quot;, в строке набираем&amp;nbsp;&lt;span style=&quot;color: lime;&quot;&gt;secpol.msc&lt;/span&gt; и жмем кнопку &quot;&lt;span style=&quot;color: lime;&quot;&gt;OK&lt;/span&gt;&quot;&lt;br /&gt;
2) &amp;nbsp;В окне &quot;Локальная политика безопасности&quot; переходим в &quot;&lt;span style=&quot;color: lime;&quot;&gt;Локальные политики&lt;/span&gt;&quot; - &quot;&lt;span style=&quot;color: lime;&quot;&gt;Параметры безопасности&lt;/span&gt;&quot;&lt;br /&gt;
3) &amp;nbsp;Ищем политику &quot;&lt;span style=&quot;color: lime;&quot;&gt;Контроль учетных записей: режим одобрения администратором для встроенной учетной записи администратора&lt;/span&gt;&quot;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://2.bp.blogspot.com/-_-20AfTYnpU/WUfL9DARDsI/AAAAAAAAHKc/colK97c5T3s4TtJnUBu4KvxjN0v5Vm50wCLcBGAs/s1600/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;131&quot; data-original-width=&quot;901&quot; height=&quot;46&quot; src=&quot;https://2.bp.blogspot.com/-_-20AfTYnpU/WUfL9DARDsI/AAAAAAAAHKc/colK97c5T3s4TtJnUBu4KvxjN0v5Vm50wCLcBGAs/s320/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
4) &amp;nbsp;Жмем правой кнопкой мыши на политике и выбираем &quot;&lt;span style=&quot;color: lime;&quot;&gt;свойства&lt;/span&gt;&quot;, &amp;nbsp;меняем состояние политики с &quot;&lt;span style=&quot;color: lime;&quot;&gt;Отключен&lt;/span&gt;&quot; на &quot;&lt;span style=&quot;color: lime;&quot;&gt;Включен&lt;/span&gt;&quot;&lt;br /&gt;
5) &lt;span style=&quot;color: red;&quot;&gt;Перелогиниваемся или перезагружаемся&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;

&lt;b&gt;&lt;u&gt;В англ. версии Windows :&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
1) &amp;nbsp;Нажимаем &lt;span style=&quot;color: lime;&quot;&gt;Win&amp;nbsp;+ R&lt;/span&gt; &amp;nbsp;или кликаем правой кнопкой мыши по иконке меню и выбираем пункт &quot;&lt;span style=&quot;color: lime;&quot;&gt;Run&lt;/span&gt;&quot;, в строке набираем&amp;nbsp;&lt;span style=&quot;color: lime;&quot;&gt;secpol.msc&lt;/span&gt; и жмем кнопку &quot;&lt;span style=&quot;color: lime;&quot;&gt;OK&lt;/span&gt;&quot;&lt;br /&gt;
2) &amp;nbsp;В открывшемся окне переходим &quot;&lt;span style=&quot;color: lime;&quot;&gt;Local Policies&lt;/span&gt;&quot; - &quot;&lt;span style=&quot;color: lime;&quot;&gt;Security Options&lt;/span&gt;&quot;&lt;br /&gt;
3) &amp;nbsp;Ищем &quot;&lt;span style=&quot;color: lime;&quot;&gt;User Account Control: Admin Approval Mode for the Built-in Administrator account&lt;/span&gt;&quot;&lt;br /&gt;
4) &amp;nbsp;Переключаем в &quot;&lt;span style=&quot;color: lime;&quot;&gt;Enable&lt;/span&gt;&quot;&lt;br /&gt;
5) &amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;Перелогиниваемся или перезагружаемся.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://daydevnull.blogspot.com/feeds/7846123829028409504/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://daydevnull.blogspot.com/2017/06/systemsettingsadminflowsexe.html#comment-form' title='Комментарии: 7'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/7846123829028409504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/7846123829028409504'/><link rel='alternate' type='text/html' href='http://daydevnull.blogspot.com/2017/06/systemsettingsadminflowsexe.html' title='Исправляем ошибку доступа SystemSettingsAdminFlows.exe'/><author><name>Scorp</name><uri>http://www.blogger.com/profile/05623486012631508720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-b95vEbSFcAo/WUfMHH1rSwI/AAAAAAAAHKg/rUfVETFCKoMO5pHl4eaEC3nJ6CN7hEb9QCLcBGAs/s72-c/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA2.PNG" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1397716098892955610.post-6139939420266942793</id><published>2014-09-12T06:28:00.000-07:00</published><updated>2014-09-12T10:45:26.782-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GSM"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><category scheme="http://www.blogger.com/atom/ns#" term="Telnet"/><category scheme="http://www.blogger.com/atom/ns#" term="Terminal"/><category scheme="http://www.blogger.com/atom/ns#" term="Программирование"/><title type='text'>Скрипт на PYTHON для отправки СМС  через GSM шлюз  ADDPACK AP-GS1002B</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-3Lm_YgAoeI8/VBLn-tlb81I/AAAAAAAAEV4/t2uh2dnxPNs/s1600/allvoipap-gs1002b-3.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;1&quot; src=&quot;http://3.bp.blogspot.com/-3Lm_YgAoeI8/VBLn-tlb81I/AAAAAAAAEV4/t2uh2dnxPNs/s1600/allvoipap-gs1002b-3.png&quot; height=&quot;93&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;Сегодня поделюсь своим скриптом на PYTHON для отправки СМС сообщений через двухканальный GSM шлюз&amp;nbsp;ADDPACK AP-GS1002B. Данный шлюз имеет порт LAN RJ-45 и позволяет подключаться к нему TELNET -ом и отправлять СМС -ки через любой канал GSM. &amp;nbsp;Скрипт писался мной для отправки СМС -ок серверами при возникновении определенных событий.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;В скрипт должны передаваться 3 обязательных параметра:&lt;br /&gt;
1) Номер канала, через который отправлять СМС ( В данном устройстве это значение может быть 0 или 1)&lt;br /&gt;
2) Номер телефона, на который отправлять СМС ( сплошной строкой без пробелов и дефисов)&lt;br /&gt;
3) Сам текст СМС -ки (параметр необходимо заключать в кавычки для отправки СМС-ок из нескольких слов, иначе будет отправляться только первое слово. Текст не должен превышать максимальную длину сообщения ).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;warning&quot;&gt;
Параметры, передаваемые в скрипт не проверяются на валидность, поэтому сами следите за тем, что передаете в этот скрипт.&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Для использования скрипта, необходимо отредактировать в нем переменные:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;HOST&lt;/span&gt;&lt;/b&gt; - IP адрес нашего GSM шлюза в сети ( в моем случае 192.168.10.1 )&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;USER&lt;/span&gt;&lt;/b&gt; - пользователь, по умолчанию &#39;root&#39;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;PASSWORD&lt;/span&gt;&lt;/b&gt; - пароль (дефолтный пароль для AP-GS1002B &amp;nbsp;&#39;router&#39; )&lt;br /&gt;
&lt;br /&gt;
Пример использования скрипта:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
python send_sms_apgs1002b.py 1 &quot;0917777777&quot; &quot;Test test&quot;&lt;br /&gt;
python send_sms_apgs1002b.py 0 &quot;+380917777777&quot; &quot;Test test&quot;&lt;/div&gt;
&lt;br /&gt;
Сам скрипт &lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;send_sms_apgs1002b.py&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Telnet Client for GSM gate ADDPACK AP-GS1002B&lt;br /&gt;
# Script for sending SMS&lt;br /&gt;
# Written by Scorp 2013&lt;br /&gt;
#-------------------------------------------------&lt;br /&gt;
# usage: send_sms_apgs1002b.py &quot;GSM_CHANNEL&quot; &quot;PHONE_NUMBER&quot; &quot;SMS_TEXT&quot;&lt;br /&gt;
&lt;br /&gt;
import getpass&lt;br /&gt;
import sys&lt;br /&gt;
import telnetlib&lt;br /&gt;
import os&lt;br /&gt;
import string&lt;br /&gt;
import argparse&lt;br /&gt;
#-----------------------------------------------------&lt;br /&gt;
HOST = &quot;192.168.10.1&quot;&lt;br /&gt;
PORT = &quot;23&quot;&lt;br /&gt;
USER = &quot;root&quot;&lt;br /&gt;
PASSWORD = &quot;router&quot;&lt;br /&gt;
# ----------------------------------------------------&lt;br /&gt;
parser = argparse.ArgumentParser()&lt;br /&gt;
&lt;br /&gt;
parser.add_argument(&quot;GSM_CHANNEL&quot;, help=&quot;GSM channel in this device must be 0 or 1&quot;)&lt;br /&gt;
parser.add_argument(&quot;PHONE_NUMBER&quot;, help=&quot;Telephone number for sending SMS&quot;)&lt;br /&gt;
parser.add_argument(&quot;SMS_TEXT&quot;, help=&quot;Text that you want to send in SMS &quot;)&lt;br /&gt;
args = parser.parse_args()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print &quot;==========================================&quot;&lt;br /&gt;
print &quot; Phone Number&quot;, args.PHONE_NUMBER&lt;br /&gt;
print &quot; SMS Text &amp;nbsp; &amp;nbsp;&quot;, args.SMS_TEXT&lt;br /&gt;
print &quot;==========================================&quot;&lt;br /&gt;
print &quot; Telnet to host&quot;, HOST, PORT&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
TNT = telnetlib.Telnet(HOST, PORT, 10)&lt;br /&gt;
&lt;br /&gt;
PROMPT = &quot;Login: &quot;&lt;br /&gt;
RESPONSE = TNT.read_until(PROMPT, 5)&lt;br /&gt;
if string.count(RESPONSE, PROMPT):&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot; Connected&quot;&lt;br /&gt;
else:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;==================&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot; ERROR LOGIN STRING&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print RESPONSE&lt;br /&gt;
&lt;br /&gt;
print &quot;==========================================&quot;&lt;br /&gt;
print &quot; Entering User Name &quot;, USER&lt;br /&gt;
TNT.write(USER + &quot;\r&quot;)&lt;br /&gt;
&lt;br /&gt;
PROMPT = &quot;Password:&quot;&lt;br /&gt;
RESPONSE = TNT.read_until(PROMPT, 5)&lt;br /&gt;
if string.count(RESPONSE, PROMPT):&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot; OK&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;==========================================&quot;&lt;br /&gt;
else:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;==================&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;ERROR PASSWORD STRING&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print RESPONSE&lt;br /&gt;
&lt;br /&gt;
print &quot; Entering Password &quot;&lt;br /&gt;
TNT.write(PASSWORD + &quot;\r&quot;)&lt;br /&gt;
&lt;br /&gt;
PROMPT = &quot;GS1002&amp;gt;&quot;&lt;br /&gt;
RESPONSE = TNT.read_until(PROMPT, 5)&lt;br /&gt;
if string.count(RESPONSE, PROMPT):&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot; OK&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;==========================================&quot;&lt;br /&gt;
else:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;==================&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;ERROR ENTERING&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print RESPONSE&lt;br /&gt;
print &quot; Entering to EN&quot;&lt;br /&gt;
TNT.write(&quot;en\r&quot;)&lt;br /&gt;
PROMPT = &quot;GS1002#&quot;&lt;br /&gt;
RESPONSE = TNT.read_until(PROMPT, 5)&lt;br /&gt;
if string.count(RESPONSE, PROMPT):&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot; OK&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;==========================================&quot;&lt;br /&gt;
else:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;==================&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;ERROR ENTERING EN&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print RESPONSE&lt;br /&gt;
&lt;br /&gt;
print &quot; Entering to CONFIG&quot;&lt;br /&gt;
TNT.write(&quot;conf term\r&quot;)&lt;br /&gt;
&lt;br /&gt;
PROMPT = &quot;GS1002(config)#&quot;&lt;br /&gt;
RESPONSE = TNT.read_until(PROMPT, 5)&lt;br /&gt;
if string.count(RESPONSE, PROMPT):&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot; OK&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;==========================================&quot;&lt;br /&gt;
else:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;==================&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &quot;ERROR ENTERING CONFIG&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print RESPONSE&lt;br /&gt;
&lt;br /&gt;
print &quot; Cleaning memory of device...&quot;&lt;br /&gt;
print &quot; On port 0 1&quot;&lt;br /&gt;
TNT.write(&quot;mobile 0 1 sms message del all\r&quot;) &amp;nbsp; # deleting all sms on sim 0 1&lt;br /&gt;
TNT.read_until(PROMPT, 15)&lt;br /&gt;
print &quot; On port 0 0&quot;&lt;br /&gt;
TNT.write(&quot;mobile 0 0 sms message del all\r&quot;) &amp;nbsp; # deleting all sms on sim 0 0&lt;br /&gt;
TNT.read_until(PROMPT, 15)&lt;br /&gt;
print &quot; OK&quot;&lt;br /&gt;
print &quot;==========================================&quot;&lt;br /&gt;
&lt;br /&gt;
print &quot; Sending SMS ...&quot;&lt;br /&gt;
LINETOSEND = &quot;mobile 0 &quot; + args.GSM_CHANNEL + &quot; sms message send &quot; + args.PHONE_NUMBER + &quot; &quot; + args.SMS_TEXT&lt;br /&gt;
print &quot; String: &quot;, LINETOSEND&lt;br /&gt;
TNT.write(LINETOSEND + &quot;\r&quot;)&lt;br /&gt;
&lt;br /&gt;
PROMPT = &quot;GS1002(config)#&quot;&lt;br /&gt;
RESPONSE = TNT.read_until(PROMPT, 15)&lt;br /&gt;
print&lt;br /&gt;
print &quot;==========================================&quot;&lt;br /&gt;
print RESPONSE&lt;br /&gt;
print &quot;==========================================&quot;&lt;br /&gt;
&lt;br /&gt;
TNT.write(&quot;exit\r&quot;)&lt;br /&gt;
TNT.write(&quot;exit\r&quot;)&lt;br /&gt;
TNT.write(&quot;exit\r&quot;)&lt;br /&gt;
TNT.close()&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://daydevnull.blogspot.com/feeds/6139939420266942793/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://daydevnull.blogspot.com/2014/09/python-gsm-addpack-ap-gs1002b.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/6139939420266942793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/6139939420266942793'/><link rel='alternate' type='text/html' href='http://daydevnull.blogspot.com/2014/09/python-gsm-addpack-ap-gs1002b.html' title='Скрипт на PYTHON для отправки СМС  через GSM шлюз  ADDPACK AP-GS1002B'/><author><name>Scorp</name><uri>http://www.blogger.com/profile/05623486012631508720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-3Lm_YgAoeI8/VBLn-tlb81I/AAAAAAAAEV4/t2uh2dnxPNs/s72-c/allvoipap-gs1002b-3.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1397716098892955610.post-5273776186536892981</id><published>2013-02-04T07:04:00.001-08:00</published><updated>2014-09-12T06:40:17.522-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bash скрипты"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Terminal"/><category scheme="http://www.blogger.com/atom/ns#" term="Программирование"/><title type='text'>Цветные выводы скриптов в BASH </title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-Dz9NQRTHfqM/UEq1NHHwLrI/AAAAAAAAAN4/cYOU0xbu0Og/s1600/TerminalApp-Icon.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-Dz9NQRTHfqM/UEq1NHHwLrI/AAAAAAAAAN4/cYOU0xbu0Og/s200/TerminalApp-Icon.png&quot; height=&quot;93&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;При написании сложных скриптов часто появляется необходимость выделить более важную информацию из потока служебной информации запущенного скрипта. &amp;nbsp;Сегодня научимся раскрашивать вывод скрипта в BASH.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Начнем с небольшой таблицы соответствия esc-кодов:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;Regular&lt;/span&gt;&lt;br /&gt;
\e[0;30m # Black&lt;br /&gt;
\e[0;31m # Red&lt;br /&gt;
\e[0;32m # Green&lt;br /&gt;
\e[0;33m # Yellow&lt;br /&gt;
\e[0;34m # Blue&lt;br /&gt;
\e[0;35m # Purple&lt;br /&gt;
\e[0;36m # Cyan&lt;br /&gt;
\e[0;37m # White&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;&lt;b&gt;Bold&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
\e[1;30m # Black&lt;br /&gt;
\e[1;31m # Red&lt;br /&gt;
\e[1;32m # Green&lt;br /&gt;
\e[1;33m # Yellow&lt;br /&gt;
\e[1;34m # Blue&lt;br /&gt;
\e[1;35m # Purple&lt;br /&gt;
\e[1;36m # Cyan&lt;br /&gt;
\e[1;37m # White&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;&lt;u&gt;Underline&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
\e[4;30m # Black&lt;br /&gt;
\e[4;31m # Red&lt;br /&gt;
\e[4;32m # Green&lt;br /&gt;
\e[4;33m # Yellow&lt;br /&gt;
\e[4;34m # Blue&lt;br /&gt;
\e[4;35m # Purple&lt;br /&gt;
\e[4;36m # Cyan&lt;br /&gt;
\e[4;37m # White&lt;br /&gt;
&lt;span style=&quot;background-color: yellow;&quot;&gt;&lt;span style=&quot;color: #444444;&quot;&gt;Background&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
\e[40m &amp;nbsp; # Black&lt;br /&gt;
\e[41m &amp;nbsp; # Red&lt;br /&gt;
\e[42m &amp;nbsp; # Green&lt;br /&gt;
\e[43m &amp;nbsp; # Yellow&lt;br /&gt;
\e[44m &amp;nbsp; # Blue&lt;br /&gt;
\e[45m &amp;nbsp; # Purple&lt;br /&gt;
\e[46m &amp;nbsp; # Cyan&lt;br /&gt;
\e[47m &amp;nbsp; # White&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;Text Reset&lt;/span&gt;&lt;br /&gt;
\e[0m &amp;nbsp; &amp;nbsp;&lt;/div&gt;
Использовать цвета вывода очень просто - необходимо использовать команду &quot;echo&quot; с параметром &quot;-e&quot; перед текстом, который хотим раскрасить, вставить esc-код нужного цвета, а за этим текстом вставить esc-код &quot;Text Reset&quot;.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;user@server:&lt;/span&gt; echo -e &quot;\e[1;31m Цветные выводы скриптов в BASH\e[0m&quot;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;Цветные выводы скриптов в BASH
&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;user@server:&lt;/span&gt; echo -e &quot;\e[1;31m Цветные \e[4;37mвыводы&amp;nbsp;\e[42mскриптов в BASH\e[0m&quot;&lt;br /&gt;
&lt;b style=&quot;color: red;&quot;&gt;&amp;nbsp;Цветные &lt;/b&gt;&lt;span style=&quot;color: white;&quot;&gt;&lt;u&gt;выводы&lt;b&gt; &lt;span style=&quot;background-color: lime;&quot;&gt;скриптов в BASH
&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://daydevnull.blogspot.com/feeds/5273776186536892981/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://daydevnull.blogspot.com/2013/02/bash.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/5273776186536892981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/5273776186536892981'/><link rel='alternate' type='text/html' href='http://daydevnull.blogspot.com/2013/02/bash.html' title='Цветные выводы скриптов в BASH '/><author><name>Scorp</name><uri>http://www.blogger.com/profile/05623486012631508720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-Dz9NQRTHfqM/UEq1NHHwLrI/AAAAAAAAAN4/cYOU0xbu0Og/s72-c/TerminalApp-Icon.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1397716098892955610.post-4081058282508759383</id><published>2012-09-14T13:58:00.003-07:00</published><updated>2014-09-12T06:35:44.530-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux Soft"/><category scheme="http://www.blogger.com/atom/ns#" term="Terminal"/><title type='text'>W3M - терминальный текстовый браузер в Linux </title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-Dz9NQRTHfqM/UEq1NHHwLrI/AAAAAAAAAN4/cYOU0xbu0Og/s1600/TerminalApp-Icon.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-Dz9NQRTHfqM/UEq1NHHwLrI/AAAAAAAAAN4/cYOU0xbu0Og/s200/TerminalApp-Icon.png&quot; height=&quot;93&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;Главный аспект применения консольных текстовых браузеров в том, что их можно использовать в системах, где нет графической оболочки. W3M &amp;nbsp;- инструмент для быстрого просмотра HTML страниц, который может отрисовывать таблицы и фреймы или отображать документ, переданный через поток STDIN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В Ubuntu Server 12.04 W3M ставится вместе с системой, но если в системе нет браузера W3M, то его можно установить при помощи команды:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
root@server: apt-get install w3m&lt;/div&gt;
W3M имеет множество параметров запуска, но для того, чтоб начать веб серфинг, необходимо указать веб-адрес страницы в качестве параметра, например :&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
user@server: w3m www.google.ru&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-7MC5vipJcbg/UFOG1YPJLuI/AAAAAAAAAOw/613HkpvA5gQ/s1600/w3m.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-7MC5vipJcbg/UFOG1YPJLuI/AAAAAAAAAOw/613HkpvA5gQ/s320/w3m.jpg&quot; height=&quot;186&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Клавишами со стелками можно перемещать курсор по странице.&lt;br /&gt;
Основные клавиши управления W3M (регистр нажатых клавиш имеет значение):&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;ENTER&lt;/span&gt;&lt;/b&gt; - Активация элемента или переход по ссылке, на которой находится курсор&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;H&lt;/span&gt;&lt;/b&gt; - Вывод справки по командам&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;U&lt;/span&gt;&lt;/b&gt; - Ввести адрес веб страницы&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;o&lt;/span&gt;&lt;/b&gt; - Отобразить страницу настроек W3M, где можно ввести настройки экрана, настройки цветов, сетевые настройки, настройки прокси и т.д.&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;SPACE&lt;/span&gt;,&lt;span style=&quot;color: lime;&quot;&gt; Ctrl+v&lt;/span&gt;&lt;/b&gt;&amp;nbsp;- Прокрутка страницы вниз&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;b&lt;/span&gt;,&lt;span style=&quot;color: lime;&quot;&gt; ESC v&lt;/span&gt;&lt;/b&gt; - Прокрутка страницы вверх&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;l&lt;/span&gt;,&lt;span style=&quot;color: lime;&quot;&gt; Ctrl+f&lt;/span&gt;&lt;/b&gt; - Переместить курсор вправо&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;h&lt;/span&gt;,&lt;span style=&quot;color: lime;&quot;&gt; Ctrl+b&lt;/span&gt;&lt;/b&gt; - Переместить курсор влево&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;j&lt;/span&gt;,&lt;span style=&quot;color: lime;&quot;&gt; Ctrl+n&lt;/span&gt;&lt;/b&gt; - Переместить курсор вниз&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;k&lt;/span&gt;,&lt;span style=&quot;color: lime;&quot;&gt; Ctrl+p&lt;/span&gt;&lt;/b&gt; - Переместить курсор вверх&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;R&lt;/span&gt;&lt;/b&gt; - Обновить страницу&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;B&lt;/span&gt;&lt;/b&gt; - Переход на страницу назад&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;v&lt;/span&gt;&lt;/b&gt; - Просмотр исходного кода страницы&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;Ctrl+h&lt;/span&gt;&lt;/b&gt; - Показать историю&lt;br /&gt;
&lt;span style=&quot;color: lime;&quot;&gt;&lt;b&gt;T&lt;/b&gt;&lt;/span&gt; - Новая вкладка&lt;br /&gt;
&lt;span style=&quot;color: lime;&quot;&gt;&lt;b&gt;Ctrl+t&lt;/b&gt;&lt;/span&gt; - Открыть ссылку в новой вкладке&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;Ctrl+q&lt;/span&gt;&lt;/b&gt; - Закрыть вкладку&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;{&lt;/span&gt;&lt;/b&gt; , &lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;}&lt;/span&gt;&lt;/b&gt; - Переключение между вкладками&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;Esc t&lt;/span&gt;&lt;/b&gt; - Меню с открытыми вкладками&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;c&lt;/span&gt;&lt;/b&gt; - Показать в статусной строке URL текущей страницы&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;u&lt;/span&gt;&lt;/b&gt; - Показать в статусной строке URL на который показывает курсор&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;a&lt;/span&gt;&lt;/b&gt; - Сохранить в файл&amp;nbsp;объект, на который показывает курсор&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;ESC m&lt;/span&gt;&lt;/b&gt; - Отобразить меню с ссылками текущей страницы, на которые можно перейти&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;=&lt;/span&gt;&lt;/b&gt; - Отобразить информацию о текущей странице.&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;q&lt;/span&gt;&lt;/b&gt; - Выход из W3C&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://daydevnull.blogspot.com/feeds/4081058282508759383/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://daydevnull.blogspot.com/2012/09/w3m-linux.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/4081058282508759383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/4081058282508759383'/><link rel='alternate' type='text/html' href='http://daydevnull.blogspot.com/2012/09/w3m-linux.html' title='W3M - терминальный текстовый браузер в Linux '/><author><name>Scorp</name><uri>http://www.blogger.com/profile/05623486012631508720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-Dz9NQRTHfqM/UEq1NHHwLrI/AAAAAAAAAN4/cYOU0xbu0Og/s72-c/TerminalApp-Icon.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1397716098892955610.post-4244784762398235003</id><published>2012-09-13T00:56:00.002-07:00</published><updated>2014-09-12T06:40:33.721-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux Soft"/><category scheme="http://www.blogger.com/atom/ns#" term="Terminal"/><title type='text'>Установка Java 7 (JDK) в Ubuntu 12.04 </title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-3Ls0T0CWUKo/UE52R8oPGSI/AAAAAAAAAOI/DFjmNX5qCcA/s1600/java_ubuntu21.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-3Ls0T0CWUKo/UE52R8oPGSI/AAAAAAAAAOI/DFjmNX5qCcA/s200/java_ubuntu21.jpg&quot; height=&quot;93&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;Сегодня будем&amp;nbsp;устанавливать последнюю версию Java JDK (Version 7 Update 7)&amp;nbsp;на момент написания статьи.&amp;nbsp;С момента отзыва лицензии&amp;nbsp;«Operating System Distributor License for Java» компанией Oracle, в репозитории Linux стало невозможно включать перепакованные бинарники Java и задача установки Java на Linux стала несколько нетривиальной.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Так как на сайте нет прямой ссылки на архив и скачать скриптом не получится, придется качать вручную, браузером - заходим по ссылке:&lt;br /&gt;
&lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/jdk7u7-downloads-1836413.html&quot; target=&quot;_blank&quot;&gt;http://www.oracle.com/technetwork/java/javase/downloads/jdk7u7-downloads-1836413.html&lt;/a&gt;&lt;br /&gt;
и скачиваем архив для Linux x86 &amp;nbsp;&lt;span style=&quot;color: #6fa8dc;&quot;&gt;jdk-7u7-linux-i586.tar.gz&lt;/span&gt;&lt;br /&gt;
копируем путь к архиву (напр /home/user/Downloads/jdk-7u7-linux-i586.tar.gz)&lt;br /&gt;
открываем терминал, заходим под rootом (sudo su -) и выполняем:&lt;br /&gt;
1) Распаковываем архив&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@desktop:&lt;/span&gt; tar -xvf&amp;nbsp;/home/user/Downloads/jdk-7u7-linux-i586.tar.gz&lt;br /&gt;
&lt;br /&gt;
......&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;jdk1.7.0_07&lt;/span&gt;/include/linux/jawt_md.h&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;jdk1.7.0_07&lt;/span&gt;/include/linux/jni_md.h&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;jdk1.7.0_07&lt;/span&gt;/include/jdwpTransport.h&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;jdk1.7.0_07&lt;/span&gt;/include/jvmti.h&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;jdk1.7.0_07&lt;/span&gt;/include/jvmticmlr.h&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;jdk1.7.0_07&lt;/span&gt;/include/jni.h&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;jdk1.7.0_07&lt;/span&gt;/include/jawt.h&lt;/div&gt;
&lt;br /&gt;
2)&amp;nbsp;Запоминаем название папки из вывода консоли предыдущей команды, (для данного архива &amp;nbsp;папка называется&amp;nbsp;jdk1.7.0_07).&amp;nbsp;Для более универсального способа установки запомним название папки, которую перемещали, в переменную и далее будем использовать эту переменную:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@desktop:&lt;/span&gt;&amp;nbsp;javadir=jdk1.7.0_07&lt;/div&gt;
3) Перемещаем распакованную папку в&amp;nbsp;/usr/lib/jvm/ :&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@desktop:&lt;/span&gt;&amp;nbsp;mv -v $javadir&amp;nbsp;/usr/lib/jvm/&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;«jdk1.7.0_07» -&amp;gt; «/usr/lib/jvm/jdk1.7.0_07»&lt;/span&gt;&lt;/div&gt;
4) Создаем симлинки на новую версию Java:&lt;br /&gt;
Симлинк для компилятора Java&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@desktop:&lt;/span&gt;&amp;nbsp;update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/$javadir/bin/javac 1&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;update-alternatives: используется `/usr/lib/jvm/jdk1.7.0_07/bin/javac&#39; для предоставления `/usr/bin/javac&#39; (javac) в автоматический режим.&lt;/span&gt;&lt;/div&gt;
Симлинк для Java&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@desktop:&lt;/span&gt;&amp;nbsp;update-alternatives --install /usr/bin/java java /usr/lib/jvm/$javadir/bin/java 1&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;update-alternatives: используется `/usr/lib/jvm/jdk1.7.0_07/bin/java&#39; для предоставления `/usr/bin/java&#39; (java) в автоматический режим.&lt;/span&gt;&lt;/div&gt;
Симлинк для Java Web Start&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@desktop:&lt;/span&gt;&amp;nbsp;update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/$javadir/bin/javaws 1&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;update-alternatives: используется `/usr/lib/jvm/jdk1.7.0_07/bin/javaws&#39; для предоставления `/usr/bin/javaws&#39; (javaws) в автоматический режим.&lt;/span&gt;&lt;/div&gt;
Симлинк на плагин Java для браузера Mozilla&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@desktop:&lt;/span&gt;&amp;nbsp;update-alternatives --install /usr/lib/mozilla/plugins/mozilla-javaplugin.so mozilla-javaplugin.so /usr/lib/jvm/$javadir/jre/lib/i386/libnpjp2.so 1&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;update-alternatives: используется `/usr/lib/jvm/jdk1.7.0_07/jre/lib/i386/libnpjp2.so&#39; для предоставления `/usr/lib/mozilla/plugins/mozilla-javaplugin.so&#39; (mozilla-javaplugin.so) в автоматический режим.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
5) Следующий шаг - настройка ссылок, этот шаг необходим для того, чтоб каждый из компонентов ссылался на папку с новой версией Java. В случае, если в системе до этого стояли другие версии Java, появится список ссылок, из которого нам надо будет выбрать ссылку, которая указывает на нашу новую версию. Так как у меня &quot;чистая&quot; система, и в ней не стояло ни одной версии Java, то список с выбором ссылок не появляется.&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@desktop:&lt;/span&gt;&amp;nbsp;update-alternatives --config javac&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;Есть только одна альтернатива в группе ссылок javac: /usr/lib/jvm/jdk1.7.0_07/bin/javac&lt;br /&gt;
Настраивать нечего.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@desktop:&lt;/span&gt;&amp;nbsp;update-alternatives --config java&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;Есть только одна альтернатива в группе ссылок java: /usr/lib/jvm/jdk1.7.0_07/bin/java&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;Настраивать нечего.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@desktop:&lt;/span&gt;&amp;nbsp;update-alternatives --config javaws&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;Есть только одна альтернатива в группе ссылок javaws: /usr/lib/jvm/jdk1.7.0_07/bin/javaws&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;Настраивать нечего.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@desktop:&lt;/span&gt;&amp;nbsp;update-alternatives &amp;nbsp;--config mozilla-javaplugin.so&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;Есть только одна альтернатива в группе ссылок mozilla-javaplugin.so: /usr/lib/jvm/jdk1.7.0_07/jre/lib/i386/libnpjp2.so&lt;br /&gt;
Настраивать нечего.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
6) Проверяем правильность наших симлинков:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@desktop:&lt;/span&gt;&amp;nbsp;ls -la /etc/alternatives/{java,javac,javaws,mozilla-javaplugin.so}&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;lrwxrwxrwx 1 root root 33 2012-09-10 22:55 /etc/alternatives/java -&amp;gt; /usr/lib/jvm/jdk1.7.0_07/bin/java&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;lrwxrwxrwx 1 root root 34 2012-09-11 00:47 /etc/alternatives/javac -&amp;gt; /usr/lib/jvm/jdk1.7.0_07/bin/javac&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;lrwxrwxrwx 1 root root 35 2012-09-11 00:51 /etc/alternatives/javaws -&amp;gt; /usr/lib/jvm/jdk1.7.0_07/bin/javaws&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;lrwxrwxrwx 1 root root 49 2012-09-10 23:58 /etc/alternatives/mozilla-javaplugin.so -&amp;gt; /usr/lib/jvm/jdk1.7.0_07/jre/lib/i386/libnpjp2.so&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
7) Проверяем версию Java&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@desktop:&lt;/span&gt;&amp;nbsp;java -version&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;java version &quot;1.7.0_07&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;Java(TM) SE Runtime Environment (build 1.7.0_07-b10)&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;Java HotSpot(TM) Server VM (build 23.3-b01, mixed mode)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
8) Перезапускаем браузер и идем по ссылке:&lt;br /&gt;
&lt;a href=&quot;http://java.com/ru/download/installed.jsp&quot; target=&quot;_blank&quot;&gt;http://java.com/ru/download/installed.jsp&lt;/a&gt;&lt;br /&gt;
Нажимаем кнопку &quot;Проверить версию Java&quot; и если все правильно сделали, видим надпись об успешной проверке версии Java:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-7TF2XbJXMDM/UE56IQrq9VI/AAAAAAAAAOg/-oVyl4mG0Qc/s1600/Java.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-7TF2XbJXMDM/UE56IQrq9VI/AAAAAAAAAOg/-oVyl4mG0Qc/s320/Java.jpg&quot; height=&quot;73&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://daydevnull.blogspot.com/feeds/4244784762398235003/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://daydevnull.blogspot.com/2012/09/ubuntu-1204-java-7-jdk.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/4244784762398235003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/4244784762398235003'/><link rel='alternate' type='text/html' href='http://daydevnull.blogspot.com/2012/09/ubuntu-1204-java-7-jdk.html' title='Установка Java 7 (JDK) в Ubuntu 12.04 '/><author><name>Scorp</name><uri>http://www.blogger.com/profile/05623486012631508720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-3Ls0T0CWUKo/UE52R8oPGSI/AAAAAAAAAOI/DFjmNX5qCcA/s72-c/java_ubuntu21.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1397716098892955610.post-8812489420772354443</id><published>2012-09-07T20:03:00.003-07:00</published><updated>2014-09-12T06:39:08.716-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux настройка"/><category scheme="http://www.blogger.com/atom/ns#" term="Terminal"/><title type='text'>Linux Ubuntu Server 12.04 Русификация консоли. Неправильное отображение русских символов в консоли.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-Dz9NQRTHfqM/UEq1NHHwLrI/AAAAAAAAAN4/cYOU0xbu0Og/s1600/TerminalApp-Icon.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-Dz9NQRTHfqM/UEq1NHHwLrI/AAAAAAAAAN4/cYOU0xbu0Og/s200/TerminalApp-Icon.png&quot; height=&quot;93&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;После установки Ubuntu Server 12.04 в консоли вместо русских букв отображаются белые квадратики. Проблема появляется из-за того, что разработчиками была отключена поддержка фреймбуфера на этапе инициализации ядра. &amp;nbsp;Скрипты initramfs проверяют включен ли фреймбуфер (т.е. присутствует ли параметр&amp;nbsp;FRAMEBUFFER=y)&amp;nbsp; и если включен, то &amp;nbsp;подгружают шрифты, иначе мы видим белые квадратики вместо русских букв. Будем исправлять ситуацию.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ели не вдаваться в подробности, то все что нам надо сделать - добавить параметр FRAMEBUFFER=y в файл&amp;nbsp;/etc/initramfs-tools/initramfs.conf и после этого ОБЯЗАТЕЛЬНО! обновить образ initramfs.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; echo &quot;FRAMEBUFFER=y&quot; &amp;gt;&amp;gt;&amp;nbsp;&amp;nbsp;/etc/initramfs-tools/initramfs.conf&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; update-initramfs -u&lt;/div&gt;
После этого перезагружаемся и радуемся&amp;nbsp;корректному&amp;nbsp;отображению русских символов в консоли.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://daydevnull.blogspot.com/feeds/8812489420772354443/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://daydevnull.blogspot.com/2012/09/linux-ubuntu-server-1204.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/8812489420772354443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/8812489420772354443'/><link rel='alternate' type='text/html' href='http://daydevnull.blogspot.com/2012/09/linux-ubuntu-server-1204.html' title='Linux Ubuntu Server 12.04 Русификация консоли. Неправильное отображение русских символов в консоли.'/><author><name>Scorp</name><uri>http://www.blogger.com/profile/05623486012631508720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-Dz9NQRTHfqM/UEq1NHHwLrI/AAAAAAAAAN4/cYOU0xbu0Og/s72-c/TerminalApp-Icon.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1397716098892955610.post-5863102141123095502</id><published>2012-09-06T04:16:00.000-07:00</published><updated>2016-05-15T23:44:12.696-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux настройка"/><category scheme="http://www.blogger.com/atom/ns#" term="Raid массивы"/><category scheme="http://www.blogger.com/atom/ns#" term="Terminal"/><title type='text'>Восстанавливаем загрузку с Soft Raid Linux. Ubuntu Server и MDADM - загружается в BusyBox</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-zRQgcnvh4WI/UEnZH0uX4AI/AAAAAAAAANo/W9YU494SMTI/s1600/RAID1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;93&quot; src=&quot;https://1.bp.blogspot.com/-zRQgcnvh4WI/UEnZH0uX4AI/AAAAAAAAANo/W9YU494SMTI/s200/RAID1.jpg&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;После смены сбойного HDD на сервере с программным RAID 1 был добавлен новый HDD взамен вышедшего из строя, но при очередной перезагрузке сервера выскочила ошибка:&lt;br /&gt;
&lt;br /&gt;
Check root=bootarg cat /proc/cmdline&lt;br /&gt;
or missing modules, devices: cat /proc/modules ls /dev&lt;br /&gt;
ALERT! /dev/disk/by-uuid/[UUID] does not exist. Dropping to a shell!&lt;br /&gt;
и сервер вывалился в BusyBox.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;Итак, имеем нерабочий сервер и будем исправлять ситуацию. Первое, что мы должны сделать - разобрать RAID (если он частично собран) и собрать его заново. В моем случае, на сервере существовало 3 RAID 1 массива: md0, md1, md2. Останавливаем RAID массивы:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;$(initramfs)&lt;/span&gt; mdadm --stop /dev/md0&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;$(initramfs)&lt;/span&gt; mdadm --stop /dev/md1&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;$(initramfs)&lt;/span&gt; mdadm --stop /dev/md2&lt;/div&gt;
&lt;br /&gt;
Собираем массивы автоматически:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;$(initramfs)&lt;/span&gt;&amp;nbsp;mdadm --assemble --scan &lt;/div&gt;
&lt;br /&gt;
или вручную:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;$(initramfs)&lt;/span&gt; mdadm --assemble --force /dev/md0 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;$(initramfs)&lt;/span&gt; mdadm --assemble --force /dev/md1 /dev/sda2 /dev/sdb2&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;$(initramfs)&lt;/span&gt; mdadm --assemble --force /dev/md2 /dev/sda3 /dev/sdb3&lt;/div&gt;
после того, как собрали RAID массив:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;$(initramfs)&lt;/span&gt; exit&lt;/div&gt;
Система загрузится, но необходимо произвести некоторые действия, чтоб ситуация не повторилась при следующей перезагрузке сервера. Смотрим состояние RAID массива:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt;&amp;nbsp;cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;md2_2&lt;/span&gt; : &lt;span style=&quot;color: red;&quot;&gt;inactive&lt;/span&gt; raid1 sdb3[S]&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;br /&gt;
md0 : active raid1 sdb1[0] sda1[1]&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; 979840 blocks [2/2] [UU]&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
md1 : active raid1 sdb2[0] sda2[1]&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; 136721088 blocks [2/2] [UU]&lt;/div&gt;
если название RAID массива поменялось или состояние массива перешло в &quot;&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;inactive&lt;/b&gt;&lt;/span&gt;&quot; , как в случае выше, то пересобираем этот массив:
&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; mdadm --stop /dev/md2_2&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; mdadm --assemble /dev/md2 /dev/sda3 /dev/sdb3
&lt;/div&gt;
&lt;b&gt;Теперь &lt;span style=&quot;color: red;&quot;&gt;обязательно&lt;/span&gt; необходимо перезаписать новый конфиг mdadm и обновить initramfs:&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt;&amp;nbsp;/usr/share/mdadm/mkconf &amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt;&amp;nbsp;update-initramfs -u&lt;/div&gt;
Теперь можем спокойно перезагружаться.
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://daydevnull.blogspot.com/feeds/5863102141123095502/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://daydevnull.blogspot.com/2012/09/soft-raid-linux-ubuntu-server-mdadm.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/5863102141123095502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/5863102141123095502'/><link rel='alternate' type='text/html' href='http://daydevnull.blogspot.com/2012/09/soft-raid-linux-ubuntu-server-mdadm.html' title='Восстанавливаем загрузку с Soft Raid Linux. Ubuntu Server и MDADM - загружается в BusyBox'/><author><name>Scorp</name><uri>http://www.blogger.com/profile/05623486012631508720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-zRQgcnvh4WI/UEnZH0uX4AI/AAAAAAAAANo/W9YU494SMTI/s72-c/RAID1.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1397716098892955610.post-2081490323011731698</id><published>2012-06-18T16:31:00.000-07:00</published><updated>2014-09-12T06:40:59.733-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bash скрипты"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux настройка"/><category scheme="http://www.blogger.com/atom/ns#" term="Terminal"/><category scheme="http://www.blogger.com/atom/ns#" term="Бэкапы"/><title type='text'>Ubuntu Server 10.04 - делаем бэкапы при помощи BASH скрипта.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-cQEIM--89Cg/T6F8GNLHD_I/AAAAAAAAAJ8/FrgGTc4pq80/s1600/backup6.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-cQEIM--89Cg/T6F8GNLHD_I/AAAAAAAAAJ8/FrgGTc4pq80/s200/backup6.jpg&quot; height=&quot;93&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Самое главное в администрировании - иметь свежий бэкап критически важных данных. Даже если у вас RAID массив с кучей HDD и сервер с информацией находится в подземном бункере с защитой от прямого попадания ядерной бомбы - даже это не защитит файлы от банального удаления их самим пользователем.&amp;nbsp; Сегодня будем писать скрипт на BASH&amp;nbsp; для резервного копирования файлового сервера.&lt;/div&gt;
&lt;div style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Логика работы скрипта:&lt;br /&gt;
1) При запуске скрипта проверяется существование папки, которую необходимо бэкапить и если эта папка отсутствует, то скрипт завершает свою работу с указанием ошибки.&lt;br /&gt;
2) Проверяется существование папки, в которую следует складывать бэкапы, если не существует, то создаются все папки для существования пути, указанного в переменной &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;SAVE_DIR_BACKUP.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;3) Определяются переменные и выводится информация.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;4) Проверяется существование файла- метки последнего бэкапа, если не существует - создается с текущей датой запуска скрипта.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;nbsp;5) Файлы бэкапа каждого месяца скрипт складывает в отдельную папку. Проверяется наличие папки текущего месяца, если не&amp;nbsp; существует - создается.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;nbsp;6) Каждый первый запуск в новом месяце скрипт создает полный бэкап папки &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;DIRTOBACKUP1.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Если файл полного бэкапа месяца существует&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt; :&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; а)&amp;nbsp; Если файл-метка не содержит запись &quot;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;FULL_ERROR&quot;, то создается список изменившихся файлов с даты последнего изменения файла-метки и создается бэкап изменившихся файлов.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&amp;nbsp;&amp;nbsp; б)&amp;nbsp; Если файл-метка содержит запись &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;FULL_ERROR&quot;, значит по каким-то причинам файл полного бэкапа не смог полностью создаться (выключили сервер в момент создания бэкапа?) . В файл-метку пишется статус &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;FULL_ERROR на случай, если процесс создания файла полного бэкапа не сможет завершиться успешно и создается полный бэкап. После создания бэкапа в файл-метку пишется текущая дата создания бэкапа (т.е. полный бэкап создался успешно). &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&amp;nbsp; Если файл полного бэкапа месяца не существует:&lt;br /&gt;
&amp;nbsp; а) В файл-метку записывается статус&amp;nbsp; &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;FULL_ERROR&quot; для ситуации, если процесс создания полного бэкапа будет прерван. Создается файл полного бэкапа. В файл-метку записывается текущая дата создания бэкапа.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;7) Завершение работы скрипта.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo -e &quot;\e[01;31m------------------------------------------------------\e[00m&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo -e &quot;\e[01;31m &amp;nbsp; &amp;nbsp; &amp;nbsp;*** &amp;nbsp; FILE BACKUP SCRIPT STARTED ***\e[00m&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo -e &quot;\e[01;31m------------------------------------------------------\e[00m&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#----------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Что будем бэкапить (Путь к папке)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;DIRTOBACKUP1=/home/PROJECTS&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Куда складывать бэкапы&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;SAVE_DIR_BACKUP=/home/BACKUP/PROJECTS&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Проверяем входящие переменные&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;if [ -d $DIRTOBACKUP1 ];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; then&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo -e &quot;\e[01;32m Папка, которую необходимо бэкапить: &amp;nbsp;существует.\e[00m&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo -e &quot;\e[01;31m Папка, которую необходимо бэкапить: &amp;nbsp;не существует.\e[00m&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo -e &quot;\e[01;31m Продолжение выполнения скрипта невозможно.\e[00m&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; exit 1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;if [ -d $SAVE_DIR_BACKUP ];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; then&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo -e &quot;\e[01;32m Папка, для хранения бэкапов: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; существует.\e[00m&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo -e &quot;\e[01;31m Папка, для хранения бэкапов: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; не существует.\e[00m&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo -e &quot;\e[01;31m Создаем...\e[00m&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mkdir -p --verbose $SAVE_DIR_BACKUP&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#-----------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Общие переменные для папки бэкапов&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#-----------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Текущий год и месяц в формате YYYY-MM&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;YEAR_MONTH=`date &#39;+%Y-%m&#39;`&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Полный путь к папке бэкапов текущего месяца&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;FULL_BACKUP_FOLDER_NAME=&quot;${SAVE_DIR_BACKUP}/${YEAR_MONTH}/&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#----------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# ПОЛНЫЙ БЭКАП&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#----------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Имя файла полного бэкапа&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;FULL_BACKUP_FILE=&quot;full_backup_$YEAR_MONTH&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Полный путь файла полного бэкапа&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;FULL_BACKUP_FOLDER_FILE=&quot;${FULL_BACKUP_FOLDER_NAME}${FULL_BACKUP_FILE}.tar.gz&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#---------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# ИНКРЕМЕНТНЫЙ БЭКАП&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#---------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Метка последнего выполнения бэкапа&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# для записи в файл lasttimebackup.log&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#LAST_LABEL=`date &#39;+%Y-%m-%d %H:%M:%S&#39;`&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Файл с меткой последнего бэкапа&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;LAST=&quot;${SAVE_DIR_BACKUP}/lasttimebackup.log&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Файл, в который будем записывать списог изменившихся файлов&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;LAST_FILE_MODIFED=&quot;${SAVE_DIR_BACKUP}/files_chaneged.log&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Заготовка для имени файла инкрементного бэкапа (формат YYYY-MM-DD)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;YEAR_MONTH_DAY=`date &#39;+%Y-%m-%d&#39;`&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Полный путь файла инкрементного бэкапа&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;INCREMENT_FOLDER_FILE=&quot;${FULL_BACKUP_FOLDER_NAME}${YEAR_MONTH_DAY}.tar.gz&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Определяем свободное место на диске&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;freehd=`df -m | grep &quot;/dev/md1&quot; | awk &#39;{print $4}&#39;`&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;freehdmb=`expr $freehd / 1024`&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo &quot; Свободное место на диске: $freehdmb GB&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo &quot;-------------------------------------------------&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo &quot; Текущая дата: $YEAR_MONTH_DAY&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo &quot; Имя папки, которую будем бэкапить: $DIRTOBACKUP1&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo &quot; Сохраняем бэкапы в: $SAVE_DIR_BACKUP&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#echo &quot; Имя папки для бэкапа: $YEAR_MONTH&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo &quot; Полный путь к папке бэкапа текущего месяца: $FULL_BACKUP_FOLDER_NAME&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#echo &quot; Полный путь файла полного бэкапа: $FULL_BACKUP_FOLDER_FILE&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#echo &quot; Полный путь файла инкрементного бэкапа: $INCREMENT_FOLDER_FILE&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo &quot;-------------------------------------------------&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#-------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Проверяем существование файла метки последнего бэкапа, если нет - создаем&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#--------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;if [ -f $LAST ];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;then&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot; Файл метки последнего бэкапа существует&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot; Файл метки последнего бэкапа не существует - создаем c текущей датой&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo $YEAR_MONTH_DAY &amp;gt; $LAST&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Проверяем существование папки для текущего месяца&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;if [ -d $FULL_BACKUP_FOLDER_NAME ];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;then&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot; Папака текущего месяца для бэкапа существует&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot; Папка текущего месяца для бэкапа не существует - создаем...&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mkdir $FULL_BACKUP_FOLDER_NAME&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Считываем в переменную содержимое файла&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;ERR_CHK=$(cat $LAST)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo &quot;Последний бэкап завершился со статусом: $ERR_CHK&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#----------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Если файл полного бэкапа существует&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;#----------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;if [ -f $FULL_BACKUP_FOLDER_FILE ];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;then&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if [ $ERR_CHK != &quot;FULL_ERROR&quot; ];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; then&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Файл полного бэкапа существует и не было ошибок при его создании&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Будем делать инкрементный бэкап&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot; Ошибки создания файла полного бэкапа не было&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot; Файл полного бэкапа существует - делаем инкрементный бэкап&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Ищем файлы старше даты модификации файла $LAST&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; find $DIRTOBACKUP1 -newer $LAST -type f -print &amp;gt; $LAST_FILE_MODIFED&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TAR_PARAM=&quot;-T $LAST_FILE_MODIFED&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SAVENAME=&quot;$INCREMENT_FOLDER_FILE&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # &amp;nbsp;Записываем статус ошибки в файл&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo FULL_ERROR&amp;gt;$LAST&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot; Последнее создание полного бэкапа произошло с ошибкой&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot; Повторно делаем полный бэкап&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TAR_PARAM=&quot;$DIRTOBACKUP1&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SAVENAME=&quot;$FULL_BACKUP_FOLDER_FILE&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Записываем статус ошибки в файл&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo FULL_ERROR&amp;gt;$LAST&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &quot; Файл полного бэкапа не существует - делаем полный бэкап&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TAR_PARAM=&quot;$DIRTOBACKUP1&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SAVENAME=&quot;$FULL_BACKUP_FOLDER_FILE&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo -e &quot; Команда запуска: \e[01;32m tar cpzfv ${SAVENAME} ${TAR_PARAM}\e[00m&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;tar cpzfv ${SAVENAME} ${TAR_PARAM}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;# Если все прошло нормально, сбрасываем статус ошибки&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;echo $YEAR_MONTH_DAY &amp;gt; $LAST&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;exit 0&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://daydevnull.blogspot.com/feeds/2081490323011731698/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://daydevnull.blogspot.com/2012/06/ubuntu-server-1004.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/2081490323011731698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/2081490323011731698'/><link rel='alternate' type='text/html' href='http://daydevnull.blogspot.com/2012/06/ubuntu-server-1004.html' title='Ubuntu Server 10.04 - делаем бэкапы при помощи BASH скрипта.'/><author><name>Scorp</name><uri>http://www.blogger.com/profile/05623486012631508720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-cQEIM--89Cg/T6F8GNLHD_I/AAAAAAAAAJ8/FrgGTc4pq80/s72-c/backup6.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1397716098892955610.post-9158097741494122277</id><published>2012-05-09T17:00:00.000-07:00</published><updated>2014-11-10T07:33:51.692-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux Soft"/><category scheme="http://www.blogger.com/atom/ns#" term="Безопасность сервера"/><title type='text'>Часть 1. Fail2ban - активная защита сервера Linux Ubuntu Server 10.04 на основе информации из логов.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-3EZJQoQ3Thw/T6igoc2bG_I/AAAAAAAAAK8/a3x4rZ79HAQ/s1600/fail2ban_logo.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-3EZJQoQ3Thw/T6igoc2bG_I/AAAAAAAAAK8/a3x4rZ79HAQ/s200/fail2ban_logo.png&quot; height=&quot;93&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Fail2ban - утилита, которая парсит log-файлы на предмет определенных событий и выполняет&amp;nbsp; действия, когда такие события появляются в log-файлах. Эта утилита позволит предотвратить перебор паролей (brute force) и различные подозрительные действия от удаленных компьютеров. Единственное условие - запись события в log- файле.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Базовая установка содержит готовые фильтры для&amp;nbsp; ssh, exim, postfix,cyrus-imap, apache, lighttpd, named и т.д. Можно их создавать и самим, для этого понадобится некоторое знание 
регулярных выраженией (regexp) в python. Сама настройка Fail2ban очень проста и логична. Рассмотрим базовую установку на сервере Linux Ubuntu Server 10.04&amp;nbsp; и простую настройку защиты ssh сервера.&lt;br /&gt;
&lt;br /&gt;
Предположим, что наш ssh сервер слушает порт tcp:30500 &lt;br /&gt;
&lt;br /&gt;
1) Устанавливаем fail2ban&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; apt-get update&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; apt-get install fail2ban&lt;/div&gt;
&lt;br /&gt;
2) Основной файл конфигурации: /etc/fail2ban/jail.conf&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; nano /etc/fail2ban/jail.conf&lt;/div&gt;
&lt;br /&gt;
Рассмотрим его подробней:&lt;br /&gt;
Секция&amp;nbsp; &quot;DEFAULT&quot; описывает настройки для всех фильтров по умолчанию, и используются в случае, если в фильтре не заданы свои настройки.&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
[DEFAULT]&lt;br /&gt;
# &quot;ignoreip&quot; can be an IP address, a CIDR mask or a DNS host&lt;br /&gt;
ignoreip = 127.0.0.1&lt;br /&gt;
bantime  = 600&lt;br /&gt;
maxretry = 3
&lt;/div&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;b&gt;ignoreip&lt;/b&gt;&lt;/span&gt; - это разделенный пробелами список ip-адресов, которые не могут быть блокированы fail2ban. 
        Сюда можно занести свою локальную машину или компьютер, с которого будут проводится эксперименты над системой.&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;b&gt;bantime&lt;/b&gt;&lt;/span&gt; - время в секундах, на которое будет блокироваться хост.&lt;br /&gt;
&lt;b&gt;maxretry&lt;/b&gt; - максимальное число ошибочных попыток доступа к сервису, прежде чем хост будет заблокирован fail2ban.&lt;br /&gt;
&amp;nbsp;Секция&amp;nbsp; &quot;ssh&quot; описывает настройки фильтра для ssh сервера.&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
[ssh]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = ssh&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath  = /var/log/auth.log&lt;br /&gt;
maxretry = 6&lt;/div&gt;
&lt;b&gt;enabled&lt;/b&gt; - может принимать значение true или false. Включен,выключен фильтр.&lt;br /&gt;
&lt;b&gt;port&lt;/b&gt; - может принимать значение в соответствии с описанием в файле /etc/services или цифровое значение (номер порта).&lt;br /&gt;
&lt;b&gt;filter&lt;/b&gt; - имя соответствующего файла-фильтра в /etc/fail2ban/filter.d, без конечного .conf &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;logpath&lt;/b&gt; - файл логов, мониторинг которого осуществляет fail2ban, для  проверки подозрительных действий.&lt;br /&gt;
&lt;b&gt;maxretry&lt;/b&gt; - максимальное число ошибочных попыток доступа к сервису (только для данного фильтра), прежде чем хост будет заблокирован fail2ban. &lt;br /&gt;
&lt;br /&gt;
В нашем случае,&amp;nbsp; установим значение port  =30500 и maxretry = 2 (2 попытки ввода пароля перед блокировкой) и добавим bantime&amp;nbsp; = 3600&amp;nbsp; - время блокировки на 1 час. Получаем:&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
[ssh]&lt;br /&gt;
enabled = true&lt;br /&gt;
port    = 30500&lt;br /&gt;
filter  = sshd&lt;br /&gt;
logpath  = /var/log/auth.log&lt;br /&gt;
maxretry = 2&lt;br /&gt;
bantime  = 3600&lt;/div&gt;
3)&amp;nbsp; Включим фильтр ssh-ddos, который будет защищать ssh сервер от попыток ddos-a.&lt;br /&gt;
Ищем секцию&quot;ssh-ddos&quot;&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
[ssh-ddos]&lt;br /&gt;
enabled = false&lt;br /&gt;
port    = ssh&lt;br /&gt;
filter  = sshd-ddos&lt;br /&gt;
logpath  = /var/log/auth.log&lt;br /&gt;
maxretry = 6&lt;/div&gt;
Включаем работу данного фильтра, изменяем порт сервера ssh на 30500 и изменяем значение maxretry и добавляем bantime.&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
[ssh-ddos]&lt;br /&gt;
enabled = true&lt;br /&gt;
port = 30500&lt;br /&gt;
filter = sshd-ddos&lt;br /&gt;
logpath = /var/log/auth.log&lt;br /&gt;
maxretry = 2&lt;br /&gt;
bantime = 3600&lt;/div&gt;
Сохраняем файл конфигурации (Ctrl+O)&lt;br /&gt;
&lt;br /&gt;
4) Не забываем перезапустить fail2ban после редактирования конфигурационного файла:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; service fail2ban restart&lt;/div&gt;
5) Пробуем подключиться с удаленного компьютера по ssh и вводить неправильные пароли/логины. При правильной настройке файлов конфигурации , после 2-х попыток&amp;nbsp; ввода неправильного пароля, удаленный компьютер сможет повторить попытку подключения к ssh серверу только через 1 час.&lt;br /&gt;
6) Лог работы fail2ban находится здесь: /var/log/fail2ban.log &lt;br /&gt;
&lt;br /&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Снятие бана&amp;nbsp;Fail2ban&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;
Для того, чтоб посмотреть список забаненных IP необходимо ввести в консоли:&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server&amp;nbsp;&lt;/span&gt;iptables -L fail2ban-ssh&lt;br /&gt;
После этого удаляем правило, где НОМЕР - номер из предыдущего вывода&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server&amp;nbsp;&lt;/span&gt;iptables -D fail2ban-ssh НОМЕР&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://daydevnull.blogspot.com/feeds/9158097741494122277/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://daydevnull.blogspot.com/2012/05/fail2ban-linux-ubuntu-server-1004.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/9158097741494122277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/9158097741494122277'/><link rel='alternate' type='text/html' href='http://daydevnull.blogspot.com/2012/05/fail2ban-linux-ubuntu-server-1004.html' title='Часть 1. Fail2ban - активная защита сервера Linux Ubuntu Server 10.04 на основе информации из логов.'/><author><name>Scorp</name><uri>http://www.blogger.com/profile/05623486012631508720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-3EZJQoQ3Thw/T6igoc2bG_I/AAAAAAAAAK8/a3x4rZ79HAQ/s72-c/fail2ban_logo.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1397716098892955610.post-8345392172795039830</id><published>2012-05-03T13:26:00.001-07:00</published><updated>2012-09-13T10:34:29.169-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Active Directory"/><category scheme="http://www.blogger.com/atom/ns#" term="VBscript"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><category scheme="http://www.blogger.com/atom/ns#" term="Программирование"/><title type='text'>Vbscript + Active Directory + Excel. Генерируем документ в Excel при помощи скрипта на vbscript.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-8o0V4s7N60I/T6F48VAEfgI/AAAAAAAAAJw/naR3xCxDmqc/s1600/3a64045e.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;93&quot; src=&quot;http://3.bp.blogspot.com/-8o0V4s7N60I/T6F48VAEfgI/AAAAAAAAAJw/naR3xCxDmqc/s200/3a64045e.jpg&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Возникла необходимость вытянуть данные по пользователям из Active Directory (AD) в таблицу Excel в формате, понятном не только системному администратору :) .  Т.к. пользователи приходят/увольняются, то вручную каждый раз переделывать таблицу размером в 2 листа формата А3 мелким шрифтом как-то не по админски, поэтому, будем автоматизировать процесс создания таблицы при помощи VBScript - предоставим серверу выполнение этой задачи, пока мы будем заниматься более полезными вещами.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
Исходные данные:&lt;br /&gt;
1) Имя домена: domen.local&lt;br /&gt;
2) Существует несколько филиалов территориально расположенных вдали друг от друга, каждый филиал сидит в своем OU и имеет свой набор групп пользователей. Все группы пользователей филиалов являются членами одной общей группы филиала. В свою очередь каждая общая группа филиала является членом общей группы предприятия.&lt;br /&gt;
&lt;br /&gt;
Условная схема групп домена:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-z0_AOzr6ytk/T6LpTKDcFdI/AAAAAAAAAKc/ROjrvQu99U8/s1600/shema.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-z0_AOzr6ytk/T6LpTKDcFdI/AAAAAAAAAKc/ROjrvQu99U8/s640/shema.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Задача: &lt;br /&gt;
Отобразить в определенной таблице Excel всех сотрудников (пользователей) предприятия с  данными о принадлежности к определенным группам безопасности.Соответственно по каждому пользователю отобразить дополнительные данные (почтовый ящик и т.д.). В пределах групп будем сортировать пользователей в алфавитном порядке. Уволившихся сотрудников отмечаем красным цветом.&lt;br /&gt;
&lt;br /&gt;
Содержимое скрипта надо сохранить в виде обычного текстового файла (NOTEPAD) и изменить расширение на .vbs&lt;br /&gt;
Например:&lt;br /&gt;
examle.vbs&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Const ADS_SCOPE_SUBTREE = 2&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Const E_ADS_PROPERTY_NOT_FOUND&amp;nbsp; = &amp;amp;h8000500D&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;On Error Resume Next &#39; Не спотыкаться на ошибках&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Обьявляем массивы&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Dim XLAp &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Dim XLWb&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Dim XLWs&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Dim objADObject, strGroup, objGroupList&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Запускаем EXCEL&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Set XLAp = CreateObject(&quot;Excel.Application&quot;) &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Visible = True&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;lst = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Set XLWb = XLAp.Workbooks.Add&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Set XLWs = XLWb.Worksheets(lst)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLWs.Activate&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Настройки листа EXCEL&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveSheet.PageSetup.Zoom = 60&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveSheet.PageSetup.PaperSize = 8&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveSheet.PageSetup.CenterHorizontally = True&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveSheet.PageSetup.LeftMargin = XLAp.Application.InchesToPoints(0.25)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveSheet.PageSetup.RightMargin = XLAp.Application.InchesToPoints(0.25)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveSheet.PageSetup.TopMargin = XLAp.Application.InchesToPoints(0.75)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveSheet.PageSetup.BottomMargin = XLAp.Application.InchesToPoints(0.75)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveSheet.PageSetup.HeaderMargin = XLAp.Application.InchesToPoints(0.3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveSheet.PageSetup.FooterMargin = XLAp.Application.InchesToPoints(0.3)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Выставляем длинну колонок&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Columns(&quot;A:A&quot;).ColumnWidth = 0.58&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Columns(&quot;B:C&quot;).ColumnWidth = 2.71&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Columns(&quot;D:D&quot;).ColumnWidth = 21.86&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Columns(&quot;E:E&quot;).ColumnWidth = 29.43&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Columns(&quot;F:F&quot;).ColumnWidth = 4.43&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Columns(&quot;G:G&quot;).ColumnWidth = 36.86&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Columns(&quot;H:T&quot;).ColumnWidth = 5.00&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Columns(&quot;U:U&quot;).ColumnWidth = 42.14&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Columns(&quot;V:V&quot;).ColumnWidth = 2.43&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Выставляем параметры столбцов&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;D:D&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.HorizontalAlignment = -4108&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.VerticalAlignment = -4108&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Font.Bold = True&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Font.Name = &quot;Tahoma&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Font.Size = 8&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;H:T&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Font.Bold = True&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Font.Name = &quot;Tahoma&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Font.Size = 8&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.HorizontalAlignment = -4108&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.VerticalAlignment = -4108&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Выставляем высоту ячеек&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Rows(&quot;1:1&quot;).RowHeight = 5.25&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Rows(&quot;2:2&quot;).RowHeight = 12.75&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Rows(&quot;3:3&quot;).RowHeight = 18.75&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Rows(&quot;7:7&quot;).RowHeight = 15.75&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Rows(&quot;4:6&quot;).RowHeight = 12.75&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Rows(&quot;10:10&quot;).RowHeight = 132.75&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Задаем шрифт и высоту строк ячеек&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Rows(&quot;13:255&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Font.Name = &quot;Tahoma&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Font.Size = 8&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.RowHeight = 10.00&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Обьединяем ячейки&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;B7:V7&quot;).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;B10:C10&quot;).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;F9:F10&quot;).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;B9:C10&quot;).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;D9:D10&quot;).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;E9:E10&quot;).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;H9:K9&quot;).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;L9:P9&quot;).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;Q9:Q10&quot;).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;R9:R10&quot;).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;S9:S10&quot;).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;T9:T10&quot;).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;U9:V10&quot;).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Оформляем шапку таблицы&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;U2:U6&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;With XLAp.Selection.Font&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Name = &quot;Tahoma&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Size = 10&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;End With&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;U2:U2&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;УТВЕРЖДАЮ&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;U3:U3&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;__________________________________________&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;U4:U4&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;__________________________________________&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;U5:U5&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;__________________________________________&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;U6:U6&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;__________________________________________&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; Красим, заполняем шапку таблицы&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;B7:V7&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;With XLAp.Selection.Font&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Bold = True&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Name = &quot;Calibri&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Size = 16&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;End With&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.HorizontalAlignment = -4108&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.VerticalAlignment = -4108&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Схема распределения прав пользователей в группах домена DOMEN.LOCAL&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;B9:V10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.HorizontalAlignment = -4108&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.VerticalAlignment = -4108&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;With XLAp.Selection.Font&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Bold = True&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Name = &quot;Tahoma&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Size = 8&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;End With&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;With XLAp.Selection.Borders&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.LineStyle = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Weight = -4138&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End With&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;With XLAp.Selection.Interior&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.ThemeColor = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.TintAndShade = -0.149998474074526&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;End With&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;B10:C10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;№&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;D9:D10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Название группы&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;E9:E10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Interior.Color = 14922893&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Название подгруппы (Англ.)&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;F9:F10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Interior.Color = 14922893&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot; Основное место работы&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;G9:G9&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Interior.Color = 14922893&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Название подгруппы (Рус.)&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;G10:G10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Название ресурса&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;H9:K9&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Interior.Color = 10147522&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Project 2007&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;L9:P9&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Interior.Color = 12106214&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Сервера&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;H10:H10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Руководитель организации&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;I10:I10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Руководитель ресурсов&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;J10:J10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Руководитель проектов&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;K10:K10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Участник групп&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;L10:L10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;1С_User&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;M10:M10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Terminal_user&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;N10:N10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;VPN Доступ&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;O10:O10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Интернет&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;P10:P10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Почтовый ящик&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;Q9:Q10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Доступ к USB портам&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;R9:R10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Доступ к CD-RW&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;S9:S10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Видеонаблюдение&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;T9:T10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Orientation = -90&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;ПО `БАРЬЕР`&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;U9:V10&quot;).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.ActiveCell.FormulaR1C1 = &quot;Примечание&quot;&lt;br /&gt;
&#39;---------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&#39;Начинаем заполнять таблицу значениями из AD&lt;br /&gt;
Set objGroup = GetObject(&quot;LDAP://CN=domen_all,OU=domen,DC=rdomen,DC=local&quot;)&lt;br /&gt;
objGroup.GetInfo&lt;br /&gt;
arrMemberOf = objGroup.GetEx(&quot;member&quot;)&lt;br /&gt;
&lt;br /&gt;
&#39; Перестановка значений массива&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;arMem0 = arrMemberOf(0)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;arMem1 = arrMemberOf(1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;arMem2 = arrMemberOf(2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;arMem3 = arrMemberOf(3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;arrMemberOf(0) = arMem3&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;arrMemberOf(1) = arMem0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;arrMemberOf(2) = arMem1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;arrMemberOf(3) = arMem2&lt;br /&gt;
&lt;br /&gt;
x = 12&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; Номер строки для вывода &lt;br /&gt;
razdel = 1&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; Счетчик раздела для нумерации разделов в таблице &lt;br /&gt;
BorderMainX = x &#39; Счетчик для выделения рамкой общей группы предприятия&lt;br /&gt;
For Each strMember in arrMemberOf&lt;br /&gt;
&#39;Рисуем строку с названием основной группы красным цветом&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Rows(x).RowHeight = 15.00&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;B&quot;&amp;amp;x &amp;amp;&quot;:C&quot;&amp;amp;x).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;E&quot;&amp;amp;x &amp;amp;&quot;:V&quot;&amp;amp;x).Merge&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;B&quot;&amp;amp;x &amp;amp;&quot;:V&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Font.Bold = True&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Font.Name = &quot;Tahoma&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Font.Size = 8&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.HorizontalAlignment = -4108&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.VerticalAlignment = -4108&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Borders.LineStyle = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Borders.Weight = -4138&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Interior.Color = 4671487&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;Обрезаем лишнее&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;tmpv = instr(1,strMember,&quot;,&quot;) - 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpv1 = left(strMember,tmpv)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmpv2 = right(tmpv1, len(tmpv1) - 3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;DescGr = GetDescript(strMember)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; XLAp.Cells(x, 2).Value = razdel&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 4).Value = tmpv2&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 5).Value = DescGr&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; Следующий вложенный цикл&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Podrazdel1 = 1&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; Счетчик подраздела&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objGroup2 = GetObject(&quot;LDAP://&quot; &amp;amp; strMember)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;objGroup2.GetInfo&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;arrMemberOf2 = objGroup2.GetEx(&quot;member&quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Call quickSort( arrMemberOf2, 0, UBound( arrMemberOf2 ))&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;For Each strMember2 in arrMemberOf2&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;x = x + 2&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;tmpv = instr(1,strMember2,&quot;,&quot;) - 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;tmpv1 = left(strMember2,tmpv)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;tmpv2 = right(tmpv1, len(tmpv1) - 3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; Рисуем желтую ячейку&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;C&quot;&amp;amp;x &amp;amp;&quot;:D&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.NumberFormat = &quot;@&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Font.Bold = True&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.HorizontalAlignment = -4108&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Borders.LineStyle = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Borders.Weight = -4138&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Interior.Color = 65535&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 3).Value = razdel &amp;amp;&quot;.&quot; &amp;amp;Podrazdel1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 4).Value = tmpv2&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; Начинаем следующий вложенный цикл&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;BorderPrazdelX = x +1&amp;nbsp;&amp;nbsp; &amp;nbsp; &#39; Записываем начальную координату х для рамки раздела&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Podrazdel2 = 1&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; Счетчик подраздела&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objGroup3 = GetObject(&quot;LDAP://&quot; &amp;amp; strMember2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;objGroup3.GetInfo&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;arrMemberOf3 = objGroup3.GetEx(&quot;member&quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Call quickSort( arrMemberOf3, 0, UBound( arrMemberOf3 ))&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;Сортировка&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;For Each strMember3 in arrMemberOf3&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;x = x + 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;tmpv = instr(1,strMember3,&quot;,&quot;) - 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;tmpv1 = left(strMember3,tmpv)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;tmpv2 = right(tmpv1, len(tmpv1) - 3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;Рисуем голубую ячейку&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;D&quot;&amp;amp;x &amp;amp;&quot;:U&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.NumberFormat = &quot;@&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Font.Bold = True&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Borders.LineStyle = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Borders.Weight = -4138&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Interior.Color = 14922893&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 4).Value = razdel &amp;amp;&quot;.&quot; &amp;amp;Podrazdel1 &amp;amp;&quot;.&quot; &amp;amp;Podrazdel2&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 5).Value = tmpv2&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;DescGr3 = GetDescript(strMember3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 7).Value = DescGr3&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;DescGr3 = &quot;&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;ProjectOrgDir проверка -----------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;ProjectOrgDir&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 8).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;ProjectResManager проверка -----------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;ProjectResManager&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 9).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;ProjectManProect проверка ------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;ProjectManProect&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 10).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;ProjectUsers проверка -----------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;ProjectUsers&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 11).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;1C_user проверка -----------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;1C_user&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 12).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;Terminal_user проверка------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;Terminal_user&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 13).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;Inet_User проверка ---------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;internet_user&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 15).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; Начинаем следующий вложенный цикл, который выводит пользователей&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objGroup4 = GetObject(&quot;LDAP://&quot; &amp;amp; strMember3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;objGroup4.GetInfo&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;On Error Resume Next&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;If Not (IsNull(objGroup4.GetInfo)) then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;arrMemberOf4 = objGroup4.GetEx(&quot;member&quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If Err.Number &amp;lt;&amp;gt; E_ADS_PROPERTY_NOT_FOUND Then&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;XLAp.Cells(x, 25).Value = arrMemberOf4(0)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Call quickSort( arrMemberOf4, 0, UBound( arrMemberOf4 ))&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; Сортировка&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;For Each strMember4 in arrMemberOf4&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;x = x + 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;tmpv = instr(1,strMember4,&quot;,&quot;) - 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;tmpv1 = left(strMember4,tmpv)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;tmpv2 = right(tmpv1, len(tmpv1) - 3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;F&quot;&amp;amp;x &amp;amp;&quot;:U&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Borders.LineStyle = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;F&quot;&amp;amp;x &amp;amp;&quot;:G&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If DisabledAkk(strMember4) Then&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;Выделяем красным отключенных пользователей&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Interior.Color = 4671487&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;UsEmail = GetEmail(strMember4)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 21).Value = UsEmail&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;UsEmail = &quot;&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 7).Value = tmpv2&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;ProjectOrgDir проверка ----------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;ProjectOrgDir&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 8).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;ProjectResManager проверка ----------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;ProjectResManager&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 9).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;ProjectManProect проверка ------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;ProjectManProect&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 10).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;ProjectUsers проверка -----------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;ProjectUsers&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember4)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 11).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;1C_user проверка ----------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;1C_user&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember4)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 12).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;Terminal_user проверка ----------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;Terminal_user&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember4)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 13).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;VPN_user проверка --------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;VPN_user&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember4)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 14).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;Inet_User проверка --------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strGp = &quot;internet_user&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set objADus = GetObject(&quot;LDAP://&quot; &amp;amp; strMember4)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;If (IsMember(objADus, strGp) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Cells(x, 15).Value = &quot;V&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;----------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;H&quot;&amp;amp;x &amp;amp;&quot;:K&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Interior.Color = 10147522&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;L&quot;&amp;amp;x &amp;amp;&quot;:P&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Interior.Color = 12106214&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Next&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;arrMemberOf4 =&quot;&quot;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; сбрасываем в ноль для предотвращения повторений&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; Podrazdel2 = Podrazdel2 + 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; Выделяем рамкой раздел &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;D&quot;&amp;amp;BorderPrazdelX &amp;amp;&quot;:U&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;BigBorder&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;E&quot;&amp;amp;BorderPrazdelX &amp;amp;&quot;:E&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;BigBorder&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;G&quot;&amp;amp;BorderPrazdelX &amp;amp;&quot;:G&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;BigBorder&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;F&quot;&amp;amp;BorderPrazdelX &amp;amp;&quot;:F&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;BigBorder&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;H&quot;&amp;amp;BorderPrazdelX &amp;amp;&quot;:K&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;BigBorder&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;L&quot;&amp;amp;BorderPrazdelX &amp;amp;&quot;:P&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;BigBorder&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;Q&quot;&amp;amp;BorderPrazdelX &amp;amp;&quot;:T&quot;&amp;amp;x).Select&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;BigBorder&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Next&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Podrazdel1 = Podrazdel1 + 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Next&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; razdel = razdel + 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Range(&quot;B&quot;&amp;amp;BorderMainX &amp;amp;&quot;:V&quot;&amp;amp;x+1).Select &#39;Рисуем рамку главной группы&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;BigBorder&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;x = x + 3&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; Делаем отступ для следующей группы&lt;br /&gt;
&amp;nbsp;&amp;nbsp; BorderMainX = x&lt;br /&gt;
Next&lt;br /&gt;
&lt;br /&gt;
Function BigBorder()&#39; Функция выделения раздела рамкой&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Borders(5).LineStyle = -4142&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;XLAp.Selection.Borders(6).LineStyle = -4142&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;With XLAp.Selection.Borders(7)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.LineStyle = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.ColorIndex = 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.TintAndShade = 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Weight = -4138&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End With&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;With XLAp.Selection.Borders(8)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.LineStyle = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.ColorIndex = 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.TintAndShade = 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Weight = -4138&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End With&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;With XLAp.Selection.Borders(9)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.LineStyle = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.ColorIndex = 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.TintAndShade = 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Weight = -4138&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End With&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;With XLAp.Selection.Borders(10)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.LineStyle = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.ColorIndex = 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.TintAndShade = 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.Weight = -4138&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;End With&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
Function GetDescript(LdpAd)&#39; Функция возврата текстового поля description группы&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Set oGroup = GetObject (&quot;LDAP://&quot; &amp;amp; LdpAd)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;GetDescript = oGroup.Description&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
Function GetEmail(LdpAd)&#39; Функция возврата текстового поля&amp;nbsp; группы&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;On Error Resume Next&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Set oGroup = GetObject (&quot;LDAP://&quot; &amp;amp; LdpAd)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;GetEmail = oGroup.EmailAddress&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Err.Clear&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
Function DisabledAkk(LdpAd)&#39; Функция проверки отключен ли аккаунт &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Set oGroup = GetObject (&quot;LDAP://&quot; &amp;amp; LdpAd)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;DisabledAkk = oGroup.AccountDisabled&lt;br /&gt;
End Function&lt;br /&gt;
&#39;--------------------------------------------------------------------------------&lt;br /&gt;
Function splitArray(anArray, leftBound, rightBound)&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39; Сортировка массива&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim leftValue, rightValue, pivotValue, pivot, left, right&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left = leftBound&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pivot = left&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; right = rightBound&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pivotValue = anArray( pivot )&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do while left &amp;lt; right&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rightValue = anArray( right )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do while pivotValue &amp;lt;= rightValue and left &amp;lt; right&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; right = right - 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rightValue = anArray( right )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loop&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; anArray( left ) = rightValue&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; leftValue = anArray( left )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do while pivotValue &amp;gt; leftValue and left &amp;lt; right&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left = left + 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; leftValue = anArray( left )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loop&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; anArray( right ) = leftValue&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loop&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; anArray( left ) = pivotValue&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; splitArray = left&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End function&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; собственно сортировка&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Function quickSort(anArray, leftBound, rightBound)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim splitIndex, left, right&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left = leftBound&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; right = rightBound&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If ( left &amp;lt; right ) then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; splitIndex = splitArray( anArray, left, Right )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call quickSort( anArray, left, splitIndex - 1 )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call quickSort( anArray, splitIndex + 1, right )&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End if&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Function&lt;br /&gt;
&lt;br /&gt;
&#39;------------------------------------------------------------&lt;br /&gt;
Function IsMember(ByVal objADObject, ByVal strGroup)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Function to test for group membership.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; objADObject is a user or computer object.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; strGroup is the NT name (sAMAccountName) of the group to test.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; objGroupList is a dictionary object, with global scope.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Returns True if the user or computer is a member of the group.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Subroutine LoadGroups is called once for each different objADObject.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If (IsEmpty(objGroupList) = True) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set objGroupList = CreateObject(&quot;Scripting.Dictionary&quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objGroupList.CompareMode = vbTextCompare&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call LoadGroups(objADObject)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If (objGroupList.Exists(objADObject.sAMAccountName &amp;amp; &quot;\&quot;) = False) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call LoadGroups(objADObject)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; IsMember = objGroupList.Exists(objADObject.sAMAccountName &amp;amp; &quot;\&quot; _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; strGroup)&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
Sub LoadGroups(ByVal objADObject)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Subroutine to populate dictionary object with group memberships.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; objGroupList is a dictionary object, with global scope. It keeps track&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; of group memberships for each user or computer separately.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim arrbytGroups, j&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim arrstrGroupSids(), objGroup&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; objGroupList.Add objADObject.sAMAccountName &amp;amp; &quot;\&quot;, True&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; objADObject.GetInfoEx Array(&quot;tokenGroups&quot;), 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; arrbytGroups = objADObject.Get(&quot;tokenGroups&quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If (TypeName(arrbytGroups) = &quot;Byte()&quot;) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReDim arrstrGroupSids(0)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arrstrGroupSids(0) = OctetToHexStr(arrbytGroups)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set objGroup = GetObject(&quot;LDAP://&amp;lt;SID=&quot; &amp;amp; arrstrGroupSids(0) _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; &quot;&amp;gt;&quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objGroupList.Add objADObject.sAMAccountName &amp;amp; &quot;\&quot; _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; objGroup.sAMAccountName, True&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Sub&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If (UBound(arrbytGroups) = -1) Then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Sub&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ReDim arrstrGroupSids(UBound(arrbytGroups))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; For j = 0 To UBound(arrbytGroups)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arrstrGroupSids(j) = OctetToHexStr(arrbytGroups(j))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set objGroup = GetObject(&quot;LDAP://&amp;lt;SID=&quot; &amp;amp; arrstrGroupSids(j) _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; &quot;&amp;gt;&quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objGroupList.Add objADObject.sAMAccountName &amp;amp; &quot;\&quot; _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; objGroup.sAMAccountName, True&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;br /&gt;
&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Function OctetToHexStr(ByVal arrbytOctet)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39; Function to convert OctetString (byte array) to Hex string.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim k&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OctetToHexStr = &quot;&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; For k = 1 To Lenb(arrbytOctet)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OctetToHexStr = OctetToHexStr _&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; Right(&quot;0&quot; &amp;amp; Hex(Ascb(Midb(arrbytOctet, k, 1))), 2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
&#39;------------------------------------------------------------------&lt;/div&gt;
&lt;br /&gt;
В результате выполнения скрипта имеем документ в EXCEL, который сразу можно отправлять на принтер:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-qNkKpYSGKCs/T6LPsBhkM1I/AAAAAAAAAKI/mQgEYmDt4hU/s1600/excell.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-qNkKpYSGKCs/T6LPsBhkM1I/AAAAAAAAAKI/mQgEYmDt4hU/s200/excell.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;poisk&quot;&gt;
Некоторые особенности:&lt;br /&gt;
1) Значение некоторых свойств и методов можно подсмотреть в режиме записи макроса (т.е. записать макрос и посмотреть какие свойства и методы применяются).&lt;br /&gt;
2) Для запуска скрипта в системе должен быть установлен принтер и компьютер, на котором запускается скрипт, должен быть в домене Active Directory.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://daydevnull.blogspot.com/feeds/8345392172795039830/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://daydevnull.blogspot.com/2012/05/vbscript-active-directory-excel.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/8345392172795039830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/8345392172795039830'/><link rel='alternate' type='text/html' href='http://daydevnull.blogspot.com/2012/05/vbscript-active-directory-excel.html' title='Vbscript + Active Directory + Excel. Генерируем документ в Excel при помощи скрипта на vbscript.'/><author><name>Scorp</name><uri>http://www.blogger.com/profile/05623486012631508720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-8o0V4s7N60I/T6F48VAEfgI/AAAAAAAAAJw/naR3xCxDmqc/s72-c/3a64045e.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1397716098892955610.post-1241909777485905561</id><published>2012-05-02T06:08:00.002-07:00</published><updated>2015-09-03T23:59:41.813-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bash скрипты"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux Soft"/><category scheme="http://www.blogger.com/atom/ns#" term="Terminal"/><category scheme="http://www.blogger.com/atom/ns#" term="Программирование"/><title type='text'>Установка Ubuntu Server 10.04 или 12.04 + VirtualBox (virtualbox headless) + phpvirtualbox + автозапуск</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-1XtgMeVqc_M/T6E4K_0FvKI/AAAAAAAAAJk/ZazDUxOPue0/s1600/vbox_logo2_gradient.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;93&quot; src=&quot;http://2.bp.blogspot.com/-1XtgMeVqc_M/T6E4K_0FvKI/AAAAAAAAAJk/ZazDUxOPue0/s200/vbox_logo2_gradient.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Сегодня будем устанавливать сервер виртуальных машин на базе ОС Ubuntu Server 10.04 и  Virtualbox в режиме headless - без графического интерфейса (т.е. без запуска оконного менеджера на сервере). Управлять виртуальными машинами будем через веб интерфейс (phpvirtualbox) с любого компьютера в локальной сети.   Так же напишем скрипт для автоматического запуска нашей виртуальной машины и научимся .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Часть 1. Установка VirtualBox&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1) Устанавливаем Ubuntu Server 10.04 или 12.04 на наш физический сервер.&lt;br /&gt;
2) Настраиваем сетевые интерфейсы. (IP адрес моего сервера в сети 192.168.100.4)&lt;br /&gt;
3) устанавливаем ssh сервер и mc (&lt;span dir=&quot;auto&quot;&gt;Midnight Commander)&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; apt-get install ssh mc&lt;/div&gt;
4) подключаемся к серверу по ssh и далее все действия производим через ssh&lt;br /&gt;
5) добавляем репозиторий в /etc/apt/sources.list&lt;br /&gt;
Открываем файл в редакторе nano:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt;  nano /etc/apt/sources.list&lt;/div&gt;
в конец файла добавляем адрес репозитория virtualbox для нашего релиза&lt;br /&gt;
(смотрим здесь: &lt;a href=&quot;https://www.virtualbox.org/wiki/Linux_Downloads&quot;&gt;https://www.virtualbox.org/wiki/Linux_Downloads&lt;/a&gt; )&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
deb http://download.virtualbox.org/virtualbox/debian lucid contrib non-free&lt;/div&gt;
сохраняем. (Ctrl+O)&lt;br /&gt;
Выходим из редактора&amp;nbsp; (Ctrl+Q) &lt;br /&gt;
&lt;br /&gt;
6) Добавляем ключ репозитория. В консоли:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add - &lt;/div&gt;
7) Обновляем список доступных для установки пакетов: &lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; apt-get update&lt;/div&gt;
8) Обновляем систему:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; apt-get upgrade&lt;/div&gt;
9) Устанавливаем пакеты, необходимые для автоматической пересборки модуля ядра virtualbox после обновления системы командой apt-get upgrade&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; apt-get install linux-headers-$(uname -r) build-essential dkms&lt;/div&gt;
10) На странице &lt;a href=&quot;https://www.virtualbox.org/wiki/Linux_Downloads&quot;&gt;https://www.virtualbox.org/wiki/Linux_Downloads&lt;/a&gt; напротив нашей OS Ubuntu 10.04 LTS (&quot;Lucid Lynx&quot;) есть две ссылки - выбираем нужную для нашего релиза ( в нашем случае i386) в браузере правой кнопкой мыши - копировать ссылку на закачку пакета&lt;br /&gt;
Скачиваем пакет virtualbox&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; wget http://download.virtualbox.org/virtualbox/4.1.12/virtualbox-4.1_4.1.12-77245~Ubuntu~lucid_i386.deb&lt;/div&gt;
11) Устанавливаем пакет&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; dpkg -i virtualbox-4.1_4.1.12-77245~Ubuntu~lucid_i386.deb&lt;/div&gt;
12) Устанавливаем необходимые зависимости пакета:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; apt-get -f install&lt;/div&gt;
13) Далее надо установить VirtualBox_Extension_Pack&lt;br /&gt;
Ссылка на странице &lt;a href=&quot;https://www.virtualbox.org/wiki/Downloads&quot;&gt;https://www.virtualbox.org/wiki/Downloads&lt;/a&gt;&lt;br /&gt;
Скачиваем пакет:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; wget http://download.virtualbox.org/virtualbox/4.1.12/Oracle_VM_VirtualBox_Extension_Pack-4.1.12-77245.vbox-extpack&lt;/div&gt;
14) Устанавливаем&amp;nbsp; Extension_Pack, который добавляет следующий функционал:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; а) &lt;b&gt;RDP сервер&lt;/b&gt; — позволяет подключаться к виртуальной системе удалённо с помощью любого RDP совместимого клиента;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; б) &lt;b&gt;Поддержка USB&lt;/b&gt; — позволяет передавать виртуальной машине USB устройства;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; в) &lt;b&gt;Intel PXE boot ROM&lt;/b&gt; — загрузка операционной системы по сети. Используется для создания тонких клиентов/бездисковых рабочих станций.&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.1.12-77245.vbox-extpack&lt;/div&gt;
Видим вывод в консоли:&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%&lt;br /&gt;
Successfully installed &quot;Oracle VM VirtualBox Extension Pack&quot;.&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Установка PHPVirtualBox.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
15) Ставим веб сервер apache и php&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; apt-get install apache2 php5&lt;/div&gt;
16) Теперь необходимо установить phpvirtualbox - бесплатная реализация веб интерфейса для virtualbox с открытым исходным кодом. Идем по ссылке &lt;a href=&quot;http://code.google.com/p/phpvirtualbox/downloads/list&quot;&gt;http://code.google.com/p/phpvirtualbox/downloads/list&lt;/a&gt; и берем последнюю версию phpvirtualbox.&lt;br /&gt;
Скачиваем пакет:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; wget http://phpvirtualbox.googlecode.com/files/phpvirtualbox-4.1-7.zip&lt;/div&gt;
17) Устанавливаем архиватор: &lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; apt-get install unzip&lt;/div&gt;
18) Извлекаем файлы из архива:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; unzip phpvirtualbox-4.1-7.zip&lt;/div&gt;
19) Запускаем &lt;span dir=&quot;auto&quot;&gt;Midnight Commander&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; mc&lt;/div&gt;
Удаляем все файлы в папке /var/www/&lt;br /&gt;
копируем содержимое распакованного архива из /root/phpvirtualbox-4.1-7 в /var/www&lt;br /&gt;
Выходим из mc. &lt;br /&gt;
20) Переходим в корень нашего сайта&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; cd /var/www/&lt;/div&gt;
21) Создаем конфигурационный файл из дефолтного командой:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; mv config.php-example config.php&lt;/div&gt;
22) Добавляем пользователя vbox в систему командой&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; adduser vbox&lt;/div&gt;
Указываем пароль пользователя vbox, запоминаем этот пароль.&lt;br /&gt;
23) Добавляем пользователя vbox в группу vboxusers&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; usermod -a -G vboxusers vbox&lt;/div&gt;
24) Проверяем состоит ли пользователь в группе vboxusers&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; id vbox&lt;/div&gt;
25) Редактируем config.php&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; nano /var/www/config.php&lt;/div&gt;
Ищем строки:&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
/* Username / Password for system user that runs VirtualBox */&lt;br /&gt;
var $username = &#39;vbox&#39;;&lt;br /&gt;
var $password = &#39;pass&#39;;&lt;/div&gt;
Вместо pass - вводим пароль, который вы вводили при создании пользователя vbox.&lt;br /&gt;
----------------------------------------&lt;br /&gt;
В этом же файле находим строки:&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
/* SOAP URL of vboxwebsrv (not phpVirtualBox&#39;s URL) */&lt;br /&gt;
var $location = &#39;http://127.0.0.1:18083/&#39;;&lt;/div&gt;
Вместо 127.0.0.1 прописываем IP адрес нашего сервера в сети (у меня 192.168.100.4)&lt;br /&gt;
Получилось:&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
/* SOAP URL of vboxwebsrv (not phpVirtualBox&#39;s URL) */&lt;br /&gt;
var $location = &#39;http://192.168.100.4:18083/&#39;;&lt;/div&gt;
----------------------------------------&lt;br /&gt;
Находим строки: &lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
// Host / ip to use for console connections&lt;br /&gt;
#var $consoleHost = &#39;192.168.1.40&#39;;&lt;/div&gt;
Меняем IP на IP нашего сервера:&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
// Host / ip to use for console connections&lt;br /&gt;
var $consoleHost = &#39;192.168.100.4&#39;;&lt;/div&gt;
----------------------------------------&lt;br /&gt;
Сохраняем файл (Ctrl+O)&lt;br /&gt;
Выходим из nano (Ctrl+Q)&lt;br /&gt;
&lt;br /&gt;
26) Для работы нашего веб интерфейса нам понадобится конфигурационный файл.&lt;br /&gt;
Создаем файл:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; nano /etc/default/virtualbox&lt;/div&gt;
Вставляем в файл содержимое ниже (IP адрес меняем на IP своего сервера): &lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
VBOXWEB_USER=vbox&lt;br /&gt;
VBOXWEB_HOST=192.168.100.4&lt;br /&gt;
VBOXWEB_PORT=18083&lt;/div&gt;
Сохраняем файл&lt;br /&gt;
27) Перезагружаем vboxwebsrv командой:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; /etc/init.d/vboxweb-service restart&lt;/div&gt;
28) Для правильной обработки нажатия кнопки питания на сервере установим пакет acpid.&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; apt-get install acpid&lt;/div&gt;
&lt;span style=&quot;background-color: black; color: white;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
29) Перезагружаем наш сервер&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; reboot&lt;/div&gt;
30) После перезагрузки сервера в браузере вводим &lt;span style=&quot;color: yellow;&quot;&gt;http://192.168.100.4&lt;/span&gt;  (т.е. IP нашего сервера) и попадаем в веб интерфейс управления виртуальными машинами.&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
Логин  admin&lt;br /&gt;
Пароль admin&lt;/div&gt;
&lt;br /&gt;
В веб интерфейсе phpvirtualbox можно сменить дефолтный пароль на свой и добавить / удалить пользователей, которые смогут управлять виртуальными машинами.&lt;br /&gt;
&lt;br /&gt;
P.S.&lt;br /&gt;
Перекомпилировать модули ядра для virtualbox можно вручную запустив в консоли команду:&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; /etc/init.d/vboxdrv setup&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Часть 2. Настраиваем автозапуск виртуальной машины при загрузке сервера.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После того, как мы создали виртуальную машину через веб интерфейс (имя: Windows2003), нам необходимо настроить автозапуск нашей виртуальной машины при загрузке сервера и сохранение состояния виртуальной машины (не выключение) при выключении/перезагрузке физического сервера.&lt;br /&gt;
&lt;br /&gt;
Итак, я создал виртуальную машину с именем  Windowz2003&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-u_G8FNLVDRc/T6E1iP-9bsI/AAAAAAAAAJY/eVs2GAEFHdI/s1600/Vbox.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;205&quot; src=&quot;http://3.bp.blogspot.com/-u_G8FNLVDRc/T6E1iP-9bsI/AAAAAAAAAJY/eVs2GAEFHdI/s320/Vbox.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Создаем скрипт автозапуска виртуальной машины (желательно, чтоб название скрипта совпадало с именем виртуальной машины - так будет легче в будущем запускать или останавливать виртуальные машины):&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; nano /etc/init.d/Windowz2003&lt;/div&gt;
&lt;br /&gt;
Вставляем в файл следующий код:&lt;br /&gt;
&lt;div class=&quot;kod&quot;&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Windowz2003&lt;br /&gt;
# Required-Start: &amp;nbsp; &amp;nbsp;$all&lt;br /&gt;
# Required-Stop: &amp;nbsp; &amp;nbsp; $remote_fs $syslog&lt;br /&gt;
# Default-Start: &amp;nbsp; &amp;nbsp; 2 3 4 5&lt;br /&gt;
# Default-Stop: &amp;nbsp; &amp;nbsp; &amp;nbsp;0 1 6&lt;br /&gt;
# Short-Description: Start daemon at boot time&lt;br /&gt;
# Description: &amp;nbsp; &amp;nbsp; &amp;nbsp; Enable service provided by daemon.&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;div&gt;
# description: VirtualBox VM Autostarter v1.1 Written by Scorp.&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
VM_USER=&quot;vbox&quot;&lt;br /&gt;
SU=&quot;sudo -H -u $VM_USER &quot;&lt;br /&gt;
VM=&quot;Windowz2003&quot;&lt;br /&gt;
#----------------------&lt;br /&gt;
VMSTATUS=`$SU VBoxManage showvminfo $VM |grep &quot;State:&quot;|awk &#39;NR&amp;lt;2{print $2}&#39;`&lt;br /&gt;
# Вывод информации ---------------------&lt;br /&gt;
VMRUNS2=`$SU VBoxManage list -l runningvms|grep &quot;Name:&quot;`&lt;br /&gt;
VMRUNS=`$SU VBoxManage list vms | awk &#39;{print $1}&#39; | tr -d \&quot;`&lt;br /&gt;
echo&lt;br /&gt;
echo -e &quot;\e[0;36m===============================\e[00m&quot;&lt;br /&gt;
echo -e &quot;\e[01;33m Виртуальные машины в системе:\e[00m&quot;&lt;br /&gt;
echo&lt;br /&gt;
for line in $VMRUNS&lt;br /&gt;
do&lt;br /&gt;
&amp;nbsp;se_wd=`echo $VMRUNS2 | grep $line`&lt;br /&gt;
&amp;nbsp; if [ -z &quot;$se_wd&quot; ]&lt;br /&gt;
&amp;nbsp;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;then&lt;br /&gt;
&amp;nbsp;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;echo -e &quot;\e[01;31m OFF $line\e[00m&quot;&lt;br /&gt;
&amp;nbsp;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;else&lt;br /&gt;
&amp;nbsp;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;echo -e &quot;\e[01;32m ON &amp;nbsp;$line\e[00m&quot;&lt;br /&gt;
&amp;nbsp; fi&lt;br /&gt;
done&lt;br /&gt;
echo -e &quot;\e[0;36m===============================\e[00m&quot;&lt;br /&gt;
echo&lt;br /&gt;
#---------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
case &quot;$1&quot; in&lt;br /&gt;
start)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;if [ $VMSTATUS != &quot;running&quot; ]&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;then&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log_daemon_msg &quot;Starting VirtualBox $VM mashine&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$SU VBoxManage startvm $VM --type headless&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log_end_msg 0&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;fi&lt;br /&gt;
;;&lt;br /&gt;
restart)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;log_daemon_msg &quot;Reseting VirtualBox $VM mashine&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;$SU VBoxManage controlvm $VM reset&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;log_end_msg 0&lt;br /&gt;
;;&lt;br /&gt;
stop)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;if [ $VMSTATUS != &quot;saved&quot; ]&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;then&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; log_daemon_msg &quot;Saving state of VirtualBox $VM mashine&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $SU VBoxManage controlvm $VM savestate&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; log_end_msg 0&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;fi&lt;br /&gt;
;;&lt;br /&gt;
*)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;echo &quot;Usage: $0 {start|restart|stop}&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;exit 1&lt;br /&gt;
;;&lt;br /&gt;
esac&lt;br /&gt;
:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
В этом скрипте необходимо изменить&amp;nbsp; только значение переменной VM, в ней нужно указать название вашей виртуальной машины, которая отображается в веб интерфейсе phpvirtualbox.&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым и добавляем его в автозагрузку командами:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; chmod +x /etc/init.d/Windowz2003&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; update-rc.d&amp;nbsp;Windowz2003&amp;nbsp;start 70 2 3 4 5 . stop 20 0 1 6 .&lt;/div&gt;
Скрипт можно запускать вручную из командной строки:&lt;br /&gt;
a) выводит состояние виртуальной машины и список параметров: &lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; etc/init.d/Windowz2003&lt;/div&gt;
б) запускает текущую виртуальную машину, если она не запущена (если не со статусом &quot;running&quot;:&lt;br /&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; etc/init.d/Windowz2003&amp;nbsp;start&lt;br /&gt;
в) сохраняет состояние виртуальной машины, если она не со статусом &quot;saved&quot;&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; etc/init.d/Windowz2003&amp;nbsp;stop&lt;/div&gt;
г) рестарт виртуальной машины ( аналог нажатия кнопки reset)&lt;br /&gt;
&lt;div class=&quot;info&quot;&gt;
&lt;span style=&quot;color: yellow;&quot;&gt;root@server:&lt;/span&gt; etc/init.d/Windowz2003&amp;nbsp;restart&lt;/div&gt;
Для каждой гостевой машины необходимо сделать свой скрипт с уникальным именеем, запускающий и сохраняющий виртуальную машину при включении/выключении/перезагрузке физического сервера.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;warning&quot;&gt;
Внимание! Цель данной статьи - помочь начинающим пользователям Linux создать полигон для виртуальных машин в локальной сети. Если вы хотите выставить сервер в сеть интернет и управлять им - необходимо предпринять меры по защите сервера !!! &lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://daydevnull.blogspot.com/feeds/1241909777485905561/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://daydevnull.blogspot.com/2012/05/ubuntu-server-1004-virtualbox.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/1241909777485905561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1397716098892955610/posts/default/1241909777485905561'/><link rel='alternate' type='text/html' href='http://daydevnull.blogspot.com/2012/05/ubuntu-server-1004-virtualbox.html' title='Установка Ubuntu Server 10.04 или 12.04 + VirtualBox (virtualbox headless) + phpvirtualbox + автозапуск'/><author><name>Scorp</name><uri>http://www.blogger.com/profile/05623486012631508720</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-1XtgMeVqc_M/T6E4K_0FvKI/AAAAAAAAAJk/ZazDUxOPue0/s72-c/vbox_logo2_gradient.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>