<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Powershell for Windows</title>
	<atom:link href="http://angelkeeper.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://angelkeeper.wordpress.com</link>
	<description>PowerShell, Windows, Antivirus protection</description>
	<lastBuildDate>Thu, 01 Dec 2011 23:37:31 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='angelkeeper.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Powershell for Windows</title>
		<link>http://angelkeeper.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://angelkeeper.wordpress.com/osd.xml" title="Powershell for Windows" />
	<atom:link rel='hub' href='http://angelkeeper.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Актуализируем учетные данные Active Directory.</title>
		<link>http://angelkeeper.wordpress.com/2011/11/30/active-directory/</link>
		<comments>http://angelkeeper.wordpress.com/2011/11/30/active-directory/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 05:12:27 +0000</pubDate>
		<dc:creator>Yamshikov Pavel</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Active Directory Users and Computers]]></category>
		<category><![CDATA[AD]]></category>
		<category><![CDATA[ADUC]]></category>
		<category><![CDATA[carLicense]]></category>
		<category><![CDATA[Citrix]]></category>
		<category><![CDATA[d]]></category>
		<category><![CDATA[domen]]></category>
		<category><![CDATA[drink]]></category>
		<category><![CDATA[Домен]]></category>
		<category><![CDATA[пользователи и компьютеры]]></category>
		<category><![CDATA[employeeID]]></category>
		<category><![CDATA[flags]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[MS Outlook]]></category>
		<category><![CDATA[учетная запись]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[user account]]></category>

		<guid isPermaLink="false">http://angelkeeper.wordpress.com/?p=848</guid>
		<description><![CDATA[Многие помнят то чувство, когда компания расширяется до тех размеров, когда рабочих групп недостаточно, и поднимается первый домен Active Directory: «О, уж теперь-то все будет как следует!» Ан нет, домен потихонечку разрастается, создаются новые учетки, блокируются старые, добавляются, удаляются компьютеры, девушки выходят замуж, меняют фамилии и, в конце концов, база данных службы каталогов выглядит, как [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=848&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Многие помнят то чувство, когда компания расширяется до тех размеров, когда рабочих групп недостаточно, и поднимается первый домен Active Directory: «О, уж теперь-то все будет как следует!» Ан нет, домен потихонечку разрастается, создаются новые учетки, блокируются старые, добавляются, удаляются компьютеры, девушки выходят замуж, меняют фамилии и, в конце концов, база данных службы каталогов выглядит, как полный швах. В этом топике мы наладим связь между базой Active Directory и кадровой системой предприятия, а также создадим механизм для поддержания данных сотрудников в AD в актуальном состоянии.</p>
<p>Первым делом, мы опишем требования, которые мы должны предъявить к учетным записям сотрудников. А эти требования мы постараемся прикинуть, исходя из потребностей пользователя. Не секрет, что многие корпоративные системы, использующие аутентификацию через Active Directory, для отображения и в своих админках, и просто в ходе работы зачастую используют разнообразные поля учетных записей AD: это и Sharepoint, и Citrix, и многие-многие другие. В качестве примера такой системы я возьму известный всем MS Outlook, да не полностью, а лишь его адресную книгу, которая черпает свои данные напрямую из Active Directory.</p>
<p><img src="http://habrastorage.org/storage1/b8ad289f/14eaba30/5649628e/1bed9442.png" alt="" /></p>
<p>Что использует пользователь? У нас в организации он зачастую ищет по имени телефон, адрес электронной почты и название подразделения. Конечно, неплохо заполнить еще и адресную информацию, но в связи с тем, что топик у нас о связке с абстрактной кадровой системой, мы адреса и телефоны оставим за скобками.<br />
Первое, мы выписываем список полей, которые мы желаем забирать из кадровой системы, у нас это будут:</p>
<ul>
<li>Фамилия Имя Отчество</li>
<li>Должность</li>
<li>Организация</li>
<li>Подразделение</li>
<li>Почтовый индекс</li>
<li>Тип занятости</li>
</ul>
<p>На этом этапе полезно закрепить наш перечень полей и издать Приказ Именем Самого Большого Директора, обязывающий кадровиков и администраторов поддерживать эти данные в актуальном состоянии.</p>
<h4>Механизм</h4>
<p>Само собой ясно, что для того, чтобы связать персону из кадровой системы и персону из Active Directory, необходимо иметь некий идентификатор, связывающий эти две записи. Обычно таким идентификатором является табельный номер сотрудника, он присваивается при приеме на работу и более никогда не меняется, вместе с тем, я встречался с ситуациями, когда и табельный номер не статичен, в этом случае такой идентификатор следует выдумать.</p>
<p>Сведения о пользователе Active Directory не исчерпываются сведениями, которые можно увидеть в оснастке Active Directory Users and Computers (устоявшееся сокращение ADUC), причем очень далеко не исчерпываются. На самом деле объект пользователя имеет триллион атрибутов, и эти атрибуты даже могут быть добавлены администратором схемы. Например, есть такой атрибут, как <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms675438%28v=vs.85%29.aspx">carLicense</a>, содержащий информацию о водительском удостоверении, или <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms675651%28v=VS.85%29.aspx">drink</a>, характеризующий любимый напиток пользователя. В общем, Microsoft в этом смысле предусмотрела многое.</p>
<p>Использовать в моем примере я буду атрибуты <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms675662%28v=VS.85%29.aspx">employeeID</a> для хранения идентификатора пользователя, и <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms675677%28v=VS.85%29.aspx">flags</a>, для чего именно, сообщу чуть позже.</p>
<p>Также для заполнения полей пользователя мы будем использовать атрибуты:</p>
<ul>
<li>displayName и CN для хранения ФИО</li>
<li>department для хранения подразделения</li>
<li>company для хранения организации</li>
<li>title для хранения должности</li>
<li>employeeType для хранения типа сотрудника</li>
<li>postalCode для хранения индекса</li>
</ul>
<p>Педанты могут, конечно, дополнительно использовать givenName, initials и sn для хранения имени, инициалов и фамилии соответственно, но я думаю, что это уже тонкости.</p>
<p>Итак, наше приложение будет работать таким образом:</p>
<ol>
<li>Перечислять учетные записи, у которых заполнен employeeID</li>
<li>Искать в кадровой системе для каждой учетной записи изменившиеся данные</li>
<li>Обновлять данные в Active Directory</li>
<li>Протоколировать изменения в файле</li>
</ol>
<h4>К делу</h4>
<p>Первым делом следует проставить employeeID, который у нас представляет табельный номер, всем пользователям. Если пользователей мало, то сделать это проще всего через <a href="http://technet.microsoft.com/en-us/library/cc773354%28WS.10%29.aspx">ADSI Edit</a>, если их чуть больше, то можно прикрутить скрипт для прописывания, например <a href="http://adisfun.blogspot.com/2009/05/add-employee-id-field-aduc.html">вот так</a>. А если пользователей много, расстановку идентификаторов необходимо делегировать, хочется приятный интерфейс и используются дополнительные фенечки, то можно создать вот такую дополнительную вкладку в ADUC:</p>
<p><img src="http://habrastorage.org/storage1/d9568531/9081fa6e/e84a9449/7ea9f65c.png" alt="" /></p>
<p>впрочем, создание такой вкладки это само по себе тема для отдельного топика.</p>
<p>Второе тонкое место в том, что иногда случается так, что для некоторых людей менять следует только некоторые атрибуты. Есть, например, у нас сотрудник, назовем его Кудрымунбеков Садруддин Фатхулларович, но все его называют просто Сан Саныч. А есть генеральный директор, должность которого в кадрах записана не иначе, как Генеральный Директор Открытого Акционерного Общества Дальней Космической Связи «Рога И Копыта», которого в AD лучше бы просто оставить точно со связью, но точно без рогов и копыт. Таким образом, мы видим необходимость в закладывании в логику работы нашего приложения некоторых исключений, а хранить эти исключения мы будем там же, в Active Directory в атрибуте flags. Этот атрибут имеет величину в четыре байта, а значит, устанавливая тот или иной бит в то или иное значение, мы сможем при необходимости запомнить аж 32 исключения. Впрочем, использовать мы все равно будем только шесть.</p>
<h5><span style="text-decoration:underline;">Переходим к реализации на powershell:</span></h5>
<p><span style="color:#339966;"><span class="comment"># Пример изменения учетных записей пользователей в Active Directory</span><br />
<span class="comment"># Егор Иванов</span></span><br />
<span class="identifier" style="color:#3366ff;">param</span>(<span class="variable" style="color:#993366;">$strServer</span>, <span class="variable" style="color:#993366;">$strContainer</span>, <span class="variable" style="color:#993366;">$strUserName</span>, <span class="variable" style="color:#993366;">$strPassword</span>, <span class="variable" style="color:#993366;">$strFileName</span>, <span class="variable" style="color:#993366;">$strLogName</span>)</p>
<p><span class="identifier" style="color:#3366ff;">function</span> <span class="constant">Write</span>-<span class="constant">LogFile</span>([<span class="identifier">string</span>]<span class="variable" style="color:#993366;">$logFileName</span>)<br />
{<br />
<span class="constant" style="color:#3366ff;"> Process</span><br />
{<br />
<span class="number" style="color:#993366;">$_</span><br />
<span class="variable" style="color:#993366;">$dt</span> = <span class="constant">Get</span>-<span class="constant">Date</span></p>
<p><span class="variable" style="color:#993366;">$str</span> = <span class="variable" style="color:#993366;">$dt</span>.<span class="constant">DateTime</span> + <span class="string">&raquo; &laquo;</span> + <span class="number" style="color:#993366;">$_</span><br />
<span class="variable" style="color:#993366;">$str</span> | <span class="constant">Out</span>-<span class="constant">File</span> -<span class="constant">FilePath</span> <span class="variable" style="color:#993366;">$logFileName</span> -<span class="constant">Append</span></p>
<p>}<br />
}</p>
<p><span class="comment" style="color:#339966;"># Эта функция на самом деле заглушка, ее реализация зависит</span><br />
<span class="comment" style="color:#339966;"> # от той или иной кадровой системы. Тут может быть и соединение с 1С,</span><br />
<span class="comment" style="color:#339966;"> # и запрос в веб, у меня лично тут ковыряние Oracle e-Buisness suite,</span><br />
<span class="comment" style="color:#339966;"> # но демонстрации ради мы ограничимся чтением из csv-файла.</span><br />
<span class="comment" style="color:#339966;"> # Понятное дело, что вызывать каждый раз Import-CSV глупо,</span><br />
<span class="comment" style="color:#339966;"> # но как я и говорил, функция &#8211; заглушка, она лишь демонстрирует возможность</span></p>
<p><span class="identifier" style="color:#3366ff;">function</span> <span class="constant">Get</span>-<span class="constant">Employee</span>(<span class="variable" style="color:#993366;">$employeeID</span>, <span class="variable" style="color:#993366;">$fileName</span>, [<span class="identifier">ref</span>]<span class="variable" style="color:#993366;">$title</span>, [<span class="identifier">ref</span>]<span class="variable" style="color:#993366;">$department</span>, [<span class="identifier">ref</span>]<span class="variable" style="color:#993366;">$displayName</span>, [<span class="identifier">ref</span>]<span class="variable" style="color:#993366;">$company</span>, [<span class="identifier">ref</span>]<span class="variable" style="color:#993366;">$postalCode</span>, [<span class="identifier">ref</span>]<span class="variable" style="color:#993366;">$employeeType</span>)<br />
{<br />
<span class="variable" style="color:#993366;">$records</span> = <span class="variable" style="color:#993366;">$fileName</span> | <span class="constant">Import</span>-<span class="constant">CSV</span> -<span class="constant">Delimiter</span> <span class="string">&laquo;;&raquo;</span></p>
<p><span class="variable" style="color:#993366;">$employee</span> = <span class="variable" style="color:#993366;">$records</span> | <span class="identifier">where</span>-<span class="identifier">object</span> {<span class="number" style="color:#993366;">$_</span>.<span class="constant">EmployeeID</span> -<span class="identifier">eq</span> <span class="variable" style="color:#993366;">$employeeID</span>}<br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> (<span class="variable" style="color:#993366;">$employee</span> -<span class="identifier">eq</span> <span class="variable" style="color:#993366;">$null</span>) {<span class="identifier" style="color:#3366ff;"><span class="keyword">return</span></span> <span class="variable" style="color:#993366;">$false</span>}<br />
<span class="variable" style="color:#993366;">$title</span>.<span class="constant">Value</span> = [<span class="identifier">string</span>]<span class="variable" style="color:#993366;">$employee</span>.<span class="constant">Title</span></p>
<p><span class="variable" style="color:#993366;">$department</span>.<span class="constant">Value</span> = [<span class="identifier">string</span>]<span class="variable" style="color:#993366;">$employee</span>.<span class="constant">Department</span><br />
<span class="variable" style="color:#993366;">$displayName</span>.<span class="constant">Value</span> = [<span class="identifier">string</span>]<span class="variable" style="color:#993366;">$employee</span>.<span class="constant">Name</span></p>
<p><span class="variable" style="color:#993366;">$company</span>.<span class="constant">Value</span> = [<span class="identifier">string</span>]<span class="variable" style="color:#993366;">$employee</span>.<span class="constant">Company</span><br />
<span class="variable" style="color:#993366;">$postalCode</span>.<span class="constant">Value</span> = [<span class="identifier">string</span>]<span class="variable" style="color:#993366;">$employee</span>.<span class="constant">PostalCode</span></p>
<p><span class="variable" style="color:#993366;">$employeeType</span>.<span class="constant">Value</span> = [<span class="identifier">string</span>]<span class="variable" style="color:#993366;">$employee</span>.<span class="constant">EmployeeType</span><br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">return</span></span> <span class="variable" style="color:#993366;">$true</span></p>
<p>}</p>
<p><span class="comment" style="color:#339966;"># Будем писать в лог</span></p>
<p><span class="string">&laquo;&#8212;&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span><br />
<span class="string">&laquo;Запускаю с параметрами:&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="string">&laquo;Сервер: &laquo;</span> + <span class="variable" style="color:#993366;">$strServer</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span><br />
<span class="string">&laquo;Контейнер: &laquo;</span> + <span class="variable" style="color:#993366;">$strContainer</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="string">&laquo;Имя пользователя: &laquo;</span> + <span class="variable" style="color:#993366;">$strUserName</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span><br />
<span class="string">&laquo;Пароль: &laquo;</span> + <span class="variable" style="color:#993366;">$strPassword</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="string">&laquo;Имя файла: &laquo;</span> +<span class="variable" style="color:#993366;">$strFileName</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span><br />
<span class="string">&laquo;Имя файла лога: &laquo;</span> + <span class="variable" style="color:#993366;">$strLogName</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="comment" style="color:#339966;"># Это наши константы, которые переводят те или иные атрибуты в режим только чтения</span><br />
<span class="comment" style="color:#339966;"> # Нетрудно заметить, что они имеют значения 000001, 000010, 000100, 001000, 010000 и 100000</span><br />
<span class="comment" style="color:#339966;"> # в двоичной системе. Это значит, что их комбинация однозначно определит,</span><br />
<span class="comment" style="color:#339966;"> # какие поля запретить изменять</span></p>
<p><span class="constant">New</span>-<span class="constant">Variable</span> -<span class="constant">Option</span> <span class="identifier">constant</span> -<span class="constant">Name</span> <span class="constant">C_COMPANY_FLAG</span> -<span class="constant">Value</span> <span class="number">1</span></p>
<p><span class="constant">New</span>-<span class="constant">Variable</span> -<span class="constant">Option</span> <span class="identifier">constant</span> -<span class="constant">Name</span> <span class="constant">C_POSTALCODE_FLAG</span> -<span class="constant">Value</span> <span class="number">2</span></p>
<p><span class="constant">New</span>-<span class="constant">Variable</span> -<span class="constant">Option</span> <span class="identifier">constant</span> -<span class="constant">Name</span> <span class="constant">C_TITLE_FLAG</span> -<span class="constant">Value</span> <span class="number">4</span></p>
<p><span class="constant">New</span>-<span class="constant">Variable</span> -<span class="constant">Option</span> <span class="identifier">constant</span> -<span class="constant">Name</span> <span class="constant">C_DEPARTMENT_FLAG</span> -<span class="constant">Value</span> <span class="number">8</span></p>
<p><span class="constant">New</span>-<span class="constant">Variable</span> -<span class="constant">Option</span> <span class="identifier">constant</span> -<span class="constant">Name</span> <span class="constant">C_NAME_FLAG</span> -<span class="constant">Value</span> <span class="number">16</span></p>
<p><span class="constant">New</span>-<span class="constant">Variable</span> -<span class="constant">Option</span> <span class="identifier">constant</span> -<span class="constant">Name</span> <span class="constant">C_EMPLOYEETYPE_FLAG</span> -<span class="constant">Value</span> <span class="number">32</span></p>
<p><span class="comment" style="color:#339966;"># Ниже заглушка для атрибута title. Атрибут title к примеру</span><br />
<span class="comment" style="color:#339966;"> # http://msdn.microsoft.com/en-us/library/windows/desktop/ms680037(v=VS.85).aspx</span><br />
<span class="comment" style="color:#339966;"> # имеет 64 символа максимальный размер в Windows Server 2003</span><br />
<span class="comment" style="color:#339966;"> # или 128 символов максимальный размер в Windows Server 2008</span><br />
<span class="comment" style="color:#339966;"> # поэтому если не обрезать значение, случится конфуз</span></p>
<p><span class="constant">New</span>-<span class="constant">Variable</span> -<span class="constant">Option</span> <span class="identifier">constant</span> -<span class="constant">Name</span> <span class="constant">C_PARAMETERS_LENGTH</span> -<span class="constant">Value</span> <span class="number">64</span></p>
<p><span class="comment" style="color:#339966;"># (!userAccountControl:1.2.840.113556.1.4.803:=2) читать как &laquo;и при этом учетка не заблокирована&raquo;</span></p>
<p><span class="variable" style="color:#993366;">$strFilter</span> = <span class="string">&laquo;(&amp;(objectClass=user)(!objectClass=computer)(employeeID=*)(!userAccountControl:1.2.840.113556.1.4.803:=2))&raquo;</span></p>
<p><span class="comment" style="color:#339966;"># Можно, конечно, использовать навески для Active Directory под Windows Server 2008</span><br />
<span class="comment" style="color:#339966;"> # http://blogs.msdn.com/adpowershell</span><br />
<span class="comment" style="color:#339966;"> # Но я решил сделать приложение совместимым с Windows Server 2003 и Windows XP,</span></p>
<p><span class="comment" style="color:#339966;"># поэтому обойдемся сухим дотнетом </span></p>
<p><span class="variable" style="color:#993366;">$objDomain</span> = <span class="constant">New</span>-<span class="constant">Object</span> <span class="constant">System</span>.<span class="constant">DirectoryServices</span>.<span class="constant">DirectoryEntry</span>(<span class="string">&laquo;LDAP://&raquo;</span>+<span class="variable" style="color:#993366;">$strServer</span>+<span class="string">&laquo;/&raquo;</span>+<span class="variable" style="color:#993366;">$strContainer</span>)</p>
<p><span class="variable" style="color:#993366;">$objSearcher</span> = <span class="constant">New</span>-<span class="constant">Object</span> <span class="constant">System</span>.<span class="constant">DirectoryServices</span>.<span class="constant">DirectorySearcher</span><br />
<span class="variable" style="color:#993366;">$objSearcher</span>.<span class="constant">SearchRoot</span> = <span class="variable" style="color:#993366;">$objDomain</span></p>
<p><span class="variable" style="color:#993366;">$objSearcher</span>.<span class="constant">PageSize</span> = <span class="number">1000</span><br />
<span class="variable" style="color:#993366;">$objSearcher</span>.<span class="constant">Filter</span> = <span class="variable" style="color:#993366;">$strFilter</span><br />
<span class="variable" style="color:#993366;">$objSearcher</span>.<span class="constant">SearchScope</span> = <span class="string">&laquo;Subtree&raquo;</span></p>
<p><span class="variable" style="color:#993366;">$colProplist</span> = <span class="string">&laquo;employeeID&raquo;</span>,<span class="string">&laquo;postalCode&raquo;</span>,<span class="string">&laquo;title&raquo;</span>,<span class="string">&laquo;department&raquo;</span>, <span class="string">&laquo;displayName&raquo;</span>, <span class="string">&laquo;cn&raquo;</span>, <span class="string">&laquo;employeeType&raquo;</span></p>
<p><span class="identifier" style="color:#3366ff;"><span class="keymethods">foreach</span></span> (<span class="variable" style="color:#993366;">$i</span> <span class="identifier"><span class="keyword">in</span></span> <span class="variable" style="color:#993366;">$colPropList</span>)<br />
{<br />
<span class="variable" style="color:#993366;">$objSearcher</span>.<span class="constant">PropertiesToLoad</span>.<span class="constant">Add</span>(<span class="variable" style="color:#993366;">$i</span>)<br />
}</p>
<p><span class="variable" style="color:#993366;">$colResults</span> = <span class="variable" style="color:#993366;">$objSearcher</span>.<span class="constant">FindAll</span>()</p>
<p><span class="comment" style="color:#339966;"># Теперь в colResults мы имеем все необходимые учетки</span></p>
<p><span class="variable" style="color:#993366;">$startTime</span> = <span class="constant">Get</span>-<span class="constant">Date</span></p>
<p><span class="variable" style="color:#993366;">$totalCount</span> = <span class="variable" style="color:#993366;">$colResults</span>.<span class="constant">Count</span><br />
<span class="variable" style="color:#993366;">$i</span> = <span class="number">0</span><br />
<span class="identifier" style="color:#3366ff;"><span class="keymethods">foreach</span></span> (<span class="variable" style="color:#993366;">$objResult</span> <span class="identifier"><span class="keyword">in</span></span> <span class="variable" style="color:#993366;">$colResults</span>)<br />
{<br />
<span class="variable" style="color:#993366;">$objItem</span> = <span class="variable" style="color:#993366;">$objResult</span>.<span class="constant">Properties</span></p>
<p><span class="variable" style="color:#993366;">$aDEmployeeID</span> = <span class="variable" style="color:#993366;">$objItem</span>.<span class="identifier">employeeid</span></p>
<p><span class="comment" style="color:#339966;"># Тут ясно, мы смотрим в атрибут flags, если у нас есть запрет на изменение</span><br />
<span class="comment" style="color:#339966;"> # поля, то мы это на будущее запоминаем, поднимая тот или иной флажок</span></p>
<p><span class="variable" style="color:#993366;">$flagProtectCompany</span> = <span class="variable" style="color:#993366;">$false</span></p>
<p><span class="variable" style="color:#993366;">$flagProtectPostalCode</span> = <span class="variable" style="color:#993366;">$false</span><br />
<span class="variable" style="color:#993366;">$flagProtectTitle</span> = <span class="variable" style="color:#993366;">$false</span><br />
<span class="variable" style="color:#993366;">$flagProtectDepartment</span> = <span class="variable" style="color:#993366;">$false</span></p>
<p><span class="variable" style="color:#993366;">$flagProtectName</span> = <span class="variable" style="color:#993366;">$false</span><br />
<span class="variable" style="color:#993366;">$flagProtectEmployeeType</span> = <span class="variable" style="color:#993366;">$false</span></p>
<p><span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> (!(<span class="variable" style="color:#993366;">$objItem</span>.<span class="identifier">flags</span> -<span class="identifier">eq</span> <span class="variable" style="color:#993366;">$null</span>))<br />
{<br />
<span class="variable" style="color:#993366;">$flags</span> = <span class="variable" style="color:#993366;">$objItem</span>.<span class="identifier">flags</span></p>
<p><span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> ((<span class="variable" style="color:#993366;">$flags</span>[<span class="number">0</span>] -<span class="identifier">band</span> <span class="variable" style="color:#993366;">$C_COMPANY_FLAG</span>) -<span class="identifier">ne</span> <span class="number">0</span>) {<span class="variable" style="color:#993366;">$flagProtectCompany</span> = <span class="variable" style="color:#993366;">$true</span>}<br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> ((<span class="variable" style="color:#993366;">$flags</span>[<span class="number">0</span>] -<span class="identifier">band</span> <span class="variable" style="color:#993366;">$C_POSTALCODE_FLAG</span>) -<span class="identifier">ne</span> <span class="number">0</span>) {<span class="variable" style="color:#993366;">$flagProtectPostalCode</span> = <span class="variable" style="color:#993366;">$true</span>}<br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> ((<span class="variable" style="color:#993366;">$flags</span>[<span class="number">0</span>] -<span class="identifier">band</span> <span class="variable" style="color:#993366;">$C_TITLE_FLAG</span>) -<span class="identifier">ne</span> <span class="number">0</span>) {<span class="variable" style="color:#993366;">$flagProtectTitle</span> = <span class="variable" style="color:#993366;">$true</span>}<br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> ((<span class="variable" style="color:#993366;">$flags</span>[<span class="number">0</span>] -<span class="identifier">band</span> <span class="variable" style="color:#993366;">$C_DEPARTMENT_FLAG</span>) -<span class="identifier">ne</span> <span class="number">0</span>) {<span class="variable" style="color:#993366;">$flagProtectDepartment</span> = <span class="variable" style="color:#993366;">$true</span>}<br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> ((<span class="variable" style="color:#993366;">$flags</span>[<span class="number">0</span>] -<span class="identifier">band</span> <span class="variable" style="color:#993366;">$C_NAME_FLAG</span>) -<span class="identifier">ne</span> <span class="number">0</span>) {<span class="variable" style="color:#993366;">$flagProtectName</span> = <span class="variable" style="color:#993366;">$true</span>}<br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> ((<span class="variable" style="color:#993366;">$flags</span>[<span class="number">0</span>] -<span class="identifier">band</span> <span class="variable" style="color:#993366;">$C_EMPLOYEETYPE_FLAG</span>) -<span class="identifier">ne</span> <span class="number">0</span>) {<span class="variable" style="color:#993366;">$flagProtectEmployeeType</span> = <span class="variable" style="color:#993366;">$true</span>}<br />
}</p>
<p><span class="comment" style="color:#339966;"># Это не обязательно, но я предпочитаю все обнулить</span></p>
<p><span class="variable" style="color:#993366;">$cSVName</span> = <span class="string">&laquo;&raquo;</span><br />
<span class="variable" style="color:#993366;">$cSVTitle</span> = <span class="string">&laquo;&raquo;</span><br />
<span class="variable" style="color:#993366;">$cSVDepartment</span> = <span class="string">&laquo;&raquo;</span></p>
<p><span class="variable" style="color:#993366;">$cSVCompany</span> = <span class="string">&laquo;&raquo;</span><br />
<span class="variable" style="color:#993366;">$cSVPostalCode</span> = <span class="string">&laquo;&raquo;</span><br />
<span class="variable" style="color:#993366;">$cSVEmployeeType</span> = <span class="string">&laquo;&raquo;</span></p>
<p><span class="comment" style="color:#339966;"># Тут следует обратить внимание на вызов функции в PowerShell, он не совсем</span><br />
<span class="comment" style="color:#339966;"> # такой, как в привычных языках</span></p>
<p><span class="variable" style="color:#993366;">$rc</span> = <span class="constant">Get</span>-<span class="constant">Employee</span> <span style="color:#993366;"><span class="variable">$aDEmployeeID</span> <span class="variable">$strFileName</span></span> ([<span class="identifier">ref</span>]<span class="variable" style="color:#993366;">$cSVTitle</span>) ([<span class="identifier">ref</span>]<span class="variable" style="color:#993366;">$cSVDepartment</span>) ([<span class="identifier">ref</span>]<span class="variable" style="color:#993366;">$cSVName</span>) ([<span class="identifier">ref</span>]<span class="variable" style="color:#993366;">$cSVCompany</span>) ([<span class="identifier">ref</span>]<span class="variable" style="color:#993366;">$cSVPostalCode</span>) ([<span class="identifier">ref</span>]<span style="color:#993366;"><span class="variable">$cSVEmployeeType</span>)</span></p>
<p><span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> (<span class="variable" style="color:#993366;">$rc</span>)<br />
{<br />
<span class="comment" style="color:#339966;"># Здесь мы соединяемся со службой каталогов уже под другим именем и паролем, нежели был</span></p>
<p><span class="comment" style="color:#339966;"># запущен сценарий. Неразумно осуществлять изменения от имени администратора домена,</span><br />
<span class="comment" style="color:#339966;"> # разумнее делегировать изменения того, того, того и сего атрибута служебной учетке</span><br />
<span class="comment" style="color:#339966;"> # с ограниченными правами</span></p>
<p><span class="variable" style="color:#993366;">$objDirectoryEntry</span> = <span class="identifier"><span class="keymethods">new</span></span>-<span class="identifier">object</span> <span class="constant">System</span>.<span class="constant">DirectoryServices</span>.<span class="constant">DirectoryEntry</span>(<span style="color:#993366;"><span class="variable">$objItem</span>.<span class="identifier">adspath</span></span>, <span class="variable" style="color:#993366;">$strUsername</span>, <span class="variable" style="color:#993366;">$strPassword</span>, [<span class="constant">System</span>.<span class="constant">DirectoryServices</span>.<span class="constant">AuthenticationTypes</span>]<span class="constant">::Secure</span>)</p>
<p><span class="variable" style="color:#993366;">$oTitle</span> = <span class="variable" style="color:#993366;">$cSVTitle</span></p>
<p><span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> (<span class="variable" style="color:#993366;">$oTitle</span>.<span class="constant">Length</span> -<span class="identifier">gt</span> <span class="variable" style="color:#993366;">$C_PARAMETERS_LENGTH</span>) {<span class="variable" style="color:#993366;">$oTitle</span> = <span class="variable" style="color:#993366;">$oTitle</span>.<span class="constant">Substring</span>(<span class="number">0</span>,<span class="variable" style="color:#993366;">$C_PARAMETERS_LENGTH</span>)}<br />
<span class="variable" style="color:#993366;">$oDepartment</span> = <span class="variable">$cSVDepartment</span></p>
<p><span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> (<span class="variable" style="color:#993366;">$oDepartment</span>.<span class="constant">Length</span> -<span class="identifier">gt</span> <span class="variable" style="color:#993366;">$C_PARAMETERS_LENGTH</span>) {<span class="variable" style="color:#993366;">$oDepartment</span> = <span style="color:#993366;"><span class="variable">$oDepartment</span>.<span class="constant">Substring</span></span>(<span class="number">0</span>,<span class="variable" style="color:#993366;">$C_PARAMETERS_LENGTH</span>)}<br />
<span class="variable" style="color:#993366;">$newEmployeeType</span> = <span class="variable" style="color:#993366;">$cSVEmployeeType</span></p>
<p><span class="comment" style="color:#339966;"># Здесь и далее мы проверяем, совпадает ли то значение, которое мы хотим присвоить, тому значению,</span><br />
<span class="comment" style="color:#339966;"> # которое уже присвоено (и не забываем про флажок). Это чтоб не напрягать службу каталогов</span></p>
<p><span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> ((<span class="variable" style="color:#993366;">$newEmployeeType</span> -<span class="identifier">ne</span> <span style="color:#993366;"><span class="variable">$objItem</span>.<span class="identifier">employeetype</span></span>) -<span class="identifier"><span class="keyword">and</span></span> -<span class="identifier"><span class="keyword">not</span></span> <span class="variable" style="color:#993366;">$flagProtectEmployeeType</span>)<br />
{<br />
<span class="string">&laquo;Изменение EmployeeType пользователя &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier"><span class="keymethods">name</span></span> + <span class="string">&laquo;&raquo;</span><span class="string">&laquo;&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="string">&laquo;с &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">employeetype</span> + <span class="string">&laquo;&raquo;</span><span class="string">&raquo; на &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$newEmployeeType</span> + <span class="string">&laquo;&raquo;</span><span class="string">&laquo;&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">employeetype</span> = [<span class="identifier">string</span>]<span class="variable" style="color:#993366;">$newEmployeeType</span><br />
<span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="constant">CommitChanges</span>()<br />
}<br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> ((<span class="variable" style="color:#993366;">$cSVCompany</span> -<span class="identifier">ne</span> <span class="variable" style="color:#993366;">$objItem</span>.<span class="identifier">company</span>) -<span class="identifier"><span class="keyword">and</span></span> -<span class="identifier"><span class="keyword">not</span></span> <span class="variable" style="color:#993366;">$flagProtectCompany</span>)<br />
{<br />
<span class="string">&laquo;Изменение организации пользователя &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier"><span class="keymethods">name</span></span> + <span class="string">&laquo;&raquo;</span><span class="string">&laquo;&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="string">&laquo;с &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">company</span> + <span class="string">&laquo;&raquo;</span><span class="string">&raquo; на &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$cSVCompany</span> + <span class="string">&laquo;&raquo;</span><span class="string">&laquo;&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">company</span> = [<span class="identifier">string</span>]<span class="variable" style="color:#993366;">$cSVCompany</span><br />
<span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="constant">CommitChanges</span>()<br />
}<br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> ((<span class="variable" style="color:#993366;">$cSVPostalCode</span> -<span class="identifier">ne</span> <span class="variable" style="color:#993366;">$objItem</span>.<span class="identifier">postalcode</span>) -<span class="identifier"><span class="keyword">and</span></span> -<span class="identifier"><span class="keyword">not</span></span> <span class="variable" style="color:#993366;">$flagProtectPostalCode</span>)<br />
{<br />
<span class="string">&laquo;Изменение индекса пользователя &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier"><span class="keymethods">name</span></span> + <span class="string">&laquo;&raquo;</span><span class="string">&laquo;&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="string">&laquo;с &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">postalCode</span> + <span class="string">&laquo;&raquo;</span><span class="string">&raquo; на &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$cSVPostalCode</span> + <span class="string">&laquo;&raquo;</span><span class="string">&laquo;&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">postalCode</span> = <span class="variable" style="color:#993366;">$cSVPostalCode</span><br />
<span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="constant">CommitChanges</span>()<br />
}<br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> ((<span class="variable" style="color:#993366;">$oTitle</span> -<span class="identifier">ne</span> <span class="variable" style="color:#993366;">$objItem</span>.<span class="identifier">title</span>) -<span class="identifier"><span class="keyword">and</span></span> -<span class="identifier"><span class="keyword">not</span></span> <span class="variable" style="color:#993366;">$flagProtectTitle</span>)<br />
{<br />
<span class="string">&laquo;Изменение должности пользователя &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier"><span class="keymethods">name</span></span> + <span class="string">&laquo;&raquo;</span><span class="string">&laquo;&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="string">&laquo;с &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">title</span> + <span class="string">&laquo;&raquo;</span><span class="string">&raquo; на &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$cSVTitle</span> + <span class="string">&laquo;&raquo;</span><span class="string">&laquo;&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> (<span style="color:#993366;"><span class="variable">$title</span>.<span class="constant">Length</span></span> -<span class="identifier">gt</span> <span class="variable" style="color:#993366;">$C_PARAMETERS_LENGTH</span>)<br />
{<br />
<span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">title</span> = <span class="variable" style="color:#993366;">$cSVTitle</span>.<span class="constant">Substring</span>(<span class="number">0</span>,<span class="variable" style="color:#993366;">$C_PARAMETERS_LENGTH</span>)<br />
}<br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">else</span></span></p>
<p>{<br />
<span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">title</span> = <span class="variable" style="color:#993366;">$cSVTitle</span>.<span class="constant">ToString</span>()<br />
}<br />
<span class="variable">$objDirectoryEntry</span>.<span class="constant">CommitChanges</span>()<br />
}<br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> ((<span class="variable" style="color:#993366;">$oDepartment</span> -<span class="identifier">ne</span> <span class="variable" style="color:#993366;">$objItem</span>.<span class="identifier">department</span>) -<span class="identifier"><span class="keyword">and</span></span> -<span class="identifier"><span class="keyword">not</span></span> <span class="variable" style="color:#993366;">$flagProtectDepartment</span>)<br />
{<br />
<span class="string">&laquo;Изменение подразделения пользователя &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier"><span class="keymethods">name</span></span> + <span class="string">&laquo;&raquo;</span><span class="string">&laquo;&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="string">&laquo;с &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">department</span> + <span class="string">&laquo;&raquo;</span><span class="string">&raquo; на &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$cSVDepartment</span> + <span class="string">&laquo;&raquo;</span><span class="string">&laquo;&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> (<span class="variable" style="color:#993366;">$department</span>.<span class="constant">Length</span> -<span class="identifier">gt</span> <span class="variable" style="color:#993366;">$C_PARAMETERS_LENGTH</span>)<br />
{<br />
<span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">department</span> = <span class="variable" style="color:#993366;">$cSVDepartment</span>.<span class="constant">Substring</span>(<span class="number">0</span>,<span class="variable" style="color:#993366;">$C_PARAMETERS_LENGTH</span>)<br />
}<br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">else</span></span></p>
<p>{<br />
<span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">department</span> = <span class="variable" style="color:#993366;">$cSVDepartment</span>.<span class="constant">ToString</span>()<br />
}<br />
<span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">description</span> = <span class="variable" style="color:#993366;">$cSVDepartment</span>.<span class="constant">ToString</span>()<br />
<span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="constant">CommitChanges</span>()<br />
}<br />
<span class="identifier" style="color:#3366ff;"><span class="keyword">if</span></span> (((<span class="variable" style="color:#993366;">$cSVName</span> -<span class="identifier">ne</span> <span class="variable" style="color:#993366;">$objItem</span>.<span class="identifier">displayname</span>) -<span class="identifier"><span class="keyword">or</span></span> (<span class="variable" style="color:#993366;">$cSVName</span> -<span class="identifier">ne</span> <span class="variable" style="color:#993366;">$objItem</span>.<span class="identifier">cn</span>)) -<span class="identifier"><span class="keyword">and</span></span> -<span class="identifier"><span class="keyword">not</span></span> <span class="variable" style="color:#993366;">$flagProtectName</span>)<br />
{<br />
<span class="string">&laquo;Изменение имени пользователя &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier"><span class="keymethods">name</span></span> + <span class="string">&laquo;&raquo;</span><span class="string">&laquo;&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="string">&laquo;с &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">displayname</span> + <span class="string">&laquo;&raquo;</span><span class="string">&raquo; на &laquo;</span><span class="string">&laquo;&raquo;</span> + <span class="variable" style="color:#993366;">$cSVName</span> + <span class="string">&laquo;&raquo;</span><span class="string">&laquo;&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier">displayName</span> = <span class="variable" style="color:#993366;">$cSVName</span><br />
<span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="constant">CommitChanges</span>()<br />
<span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="constant">Rename</span>(<span class="string">&laquo;cn=&raquo;</span>+<span class="variable" style="color:#993366;">$cSVName</span>)<br />
}<br />
<span class="variable" style="color:#993366;">$i</span>++</p>
<p><span class="comment" style="color:#339966;"># Здесь мы сформируем статусную строку и будем ее демонстрировать, простые математические действия</span></p>
<p><span class="comment" style="color:#339966;"># укажут нам, когда же, наконец, процесс прочесывания миллиардов наших пользователей прекратится</span></p>
<p><span class="variable" style="color:#993366;">$status</span> = <span class="variable" style="color:#993366;">$i</span>.<span class="constant">ToString</span>() + <span class="string">&raquo; of &laquo;</span> + <span class="variable" style="color:#993366;">$totalCount</span>.<span class="constant">ToString</span>() + <span class="string">&raquo; complete &#8211; &laquo;</span> + <span class="variable" style="color:#993366;">$objDirectoryEntry</span>.<span class="identifier"><span class="keymethods">name</span></span></p>
<p><span class="variable" style="color:#993366;">$currentTime</span> = <span class="constant">Get</span>-<span class="constant">Date</span><br />
<span class="variable" style="color:#993366;">$diffTime</span> = [<span class="identifier">int</span>][<span class="constant">System</span>.<span class="constant">Math</span>]<span class="constant">::Round</span>((<span class="variable" style="color:#993366;">$currentTime</span> &#8211; <span class="variable" style="color:#993366;">$startTime</span>).<span class="constant">Ticks</span> / <span class="variable" style="color:#993366;">$i</span>)<br />
<span class="variable" style="color:#993366;">$delta</span> = <span class="variable" style="color:#993366;">$diffTime</span>*<span class="variable" style="color:#993366;">$totalCount</span></p>
<p><span class="variable" style="color:#993366;">$endTime</span> = <span class="variable" style="color:#993366;">$startTime</span>.<span class="constant">Add</span>([<span class="identifier">int64</span>](<span class="variable" style="color:#993366;">$delta</span>))<br />
<span class="variable" style="color:#993366;">$activityString</span> = <span class="string">&laquo;Перебор пользователей. Расчетное время завершения &laquo;</span> + <span class="variable" style="color:#993366;">$endTime</span></p>
<p><span class="constant">Write</span>-<span class="constant">Progress</span> -<span class="constant">Activity</span> <span class="variable" style="color:#993366;">$activityString</span> -<span class="constant">Status</span> <span class="variable" style="color:#993366;">$status</span> -<span class="constant">PercentComplete</span> ((<span class="variable" style="color:#993366;">$i</span> / <span class="variable" style="color:#993366;">$totalCount</span>) * <span class="number">100</span>)<br />
}<br />
}</p>
<p><span class="string">&laquo;Работа окончена&raquo;</span> | <span class="constant">Write</span>-<span class="constant">LogFile</span> <span class="variable" style="color:#993366;">$strLogName</span></p>
<p><span class="comment" style="color:#339966;"># И не забыть пропищать из динамика, мало ли</span></p>
<p><span class="constant">Write</span>-<span class="constant">Host</span> `<span class="identifier">a</span></p>
<h5><span style="text-decoration:underline;">Создадим тестовую среду, абсолютно произвольно присвоим имена учетным записям:</span></h5>
<p><img src="http://habrastorage.org/storage1/eae5faa8/78754fab/262d35b7/22be5460.png" alt="" /></p>
<p>Теперь запускаем скрипт с параметрами. Разумеется, его можно зашедулить и выполнять по расписанию, только не забыть учетной записи, от имени которой выполняется задание, присвоить право <em>входа в качестве пакетного задания</em>:</p>
<p><img src="http://habrastorage.org/storage1/4efd1d4f/90be4044/832e6afb/78abe7ee.png" alt="" /></p>
<p>Как видим, после выполнения, мы получили хорошие читаемые имена, отличные должности и великолепные наименования компаний:</p>
<p><img src="http://habrastorage.org/storage1/2b8eeeb5/0159734b/bd25d358/1d239637.png" alt="" /></p>
<p>Конечно, путем неглубокой модификации скрипта, мы можем заполнять пользователю все: от телефонов и адресов до пресловутых любимых напитков, был бы источник. А если скрипт запускать с определенной регулярностью, то мы добиваемся того, что все данные о пользователях будут актуальны.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angelkeeper.wordpress.com/848/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angelkeeper.wordpress.com/848/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angelkeeper.wordpress.com/848/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angelkeeper.wordpress.com/848/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angelkeeper.wordpress.com/848/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angelkeeper.wordpress.com/848/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angelkeeper.wordpress.com/848/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angelkeeper.wordpress.com/848/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angelkeeper.wordpress.com/848/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angelkeeper.wordpress.com/848/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angelkeeper.wordpress.com/848/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angelkeeper.wordpress.com/848/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angelkeeper.wordpress.com/848/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angelkeeper.wordpress.com/848/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=848&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angelkeeper.wordpress.com/2011/11/30/active-directory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>43.819656 131.943054</georss:point>
		<geo:lat>43.819656</geo:lat>
		<geo:long>131.943054</geo:long>
		<media:content url="http://1.gravatar.com/avatar/d045d46207067ececab5d5e8cc1c52ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">angelkeeper</media:title>
		</media:content>

		<media:content url="http://habrastorage.org/storage1/b8ad289f/14eaba30/5649628e/1bed9442.png" medium="image" />

		<media:content url="http://habrastorage.org/storage1/d9568531/9081fa6e/e84a9449/7ea9f65c.png" medium="image" />

		<media:content url="http://habrastorage.org/storage1/eae5faa8/78754fab/262d35b7/22be5460.png" medium="image" />

		<media:content url="http://habrastorage.org/storage1/4efd1d4f/90be4044/832e6afb/78abe7ee.png" medium="image" />

		<media:content url="http://habrastorage.org/storage1/2b8eeeb5/0159734b/bd25d358/1d239637.png" medium="image" />
	</item>
		<item>
		<title>Speed Install 2.0 − репозиторий под Windows</title>
		<link>http://angelkeeper.wordpress.com/2011/09/09/speed_install/</link>
		<comments>http://angelkeeper.wordpress.com/2011/09/09/speed_install/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 04:27:19 +0000</pubDate>
		<dc:creator>Yamshikov Pavel</dc:creator>
				<category><![CDATA[Utilits]]></category>
		<category><![CDATA[репозиторий]]></category>
		<category><![CDATA[Speed Install]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://angelkeeper.wordpress.com/?p=840</guid>
		<description><![CDATA[Я до вчерашнего дня не знал, что такое репозиторий. А оказалось, что очень полезная вещь. Это такая программа, которая помогает устанавливать другие программы. Подобные вещи есть на Маках, на Линуксах, на Андроиде. А на самой распространенной ОС во вселенной Windows не было. И вот она появилась. Преимущества репозитория: в нужной категории есть список програм с [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=840&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://vadimgalkin.pp.ru/useful/speed_install/speed_install3.png" alt="" width="213" height="60" />Я до вчерашнего дня не знал, что такое репозиторий. А оказалось, что<br />
очень полезная вещь. Это такая программа, которая помогает устанавливать<br />
другие программы. Подобные вещи есть на Маках, на Линуксах, на<br />
Андроиде. А на самой распространенной ОС во вселенной Windows не было. И<br />
вот она появилась.<br />
Преимущества репозитория:</p>
<ul>
<li>в нужной категории есть список програм с описанием, выбираешь сразу ту, что нужна,</li>
<li>устанавливается последняя версия, опубликованная на официальном сайте,</li>
<li>Программа устанавливается сама, не требуется выставлять «Я согласен с условиями» и прочее.</li>
</ul>
<p>Итак, это программа <a href="http://www.speedinstall.ru/">Speed Install 2.0</a>. Она создается российскими разработчиками, издается на двух языках: русский и английский.</p>
<h2>Удобный интерфейс</h2>
<p>Все делается легко и просто, программа все делает за вас. Так что<br />
можносчитать, что интерфейс Спид Инстал выполняет свою задачу на все<br />
сто. Не надо думать − просто выбираешь программу и нажимаешь<br />
«Установить». К хорошему быстро привыкаешь.</p>
<h2>Поиск по категориям</h2>
<p>Я храню у себя на диске некоторые программы. И иногда не могу найти<br />
нужную по папкам. Ребятам, кажется, удалось создать именно такой<br />
каталог, по которому все легко найти:</p>
<p><img src="http://vadimgalkin.pp.ru/useful/speed_install/speed_install1.png" alt="" /></p>
<h2>Дополнительные плюшки</h2>
<p>Если какие-то программы нужно просто постоянно обновлять до последней<br />
версии − это можно делать автоматически. Просто собираете программы в<br />
список, и назначаете этот список обновляемым в автоматическом режиме.</p>
<p>Еще понравилась функция, которая после установки удаляет икнки с<br />
рабочего стола. Я люблю чистый рабочий стол, мне эта функция нкжна по<br />
зарез.</p>
<p><img src="http://vadimgalkin.pp.ru/useful/speed_install/speed_install2.png" alt="" /></p>
<h2>Вот официальное описание с официального сайта:</h2>
<ul>
<li>Сотни программ в БД.</li>
<li>Полностью автоматическая тихая установка.</li>
<li>Постоянно обновляющаяся база приложений.</li>
<li>Установка последних версий программ.</li>
<li>Мультиязычный интерфейс.</li>
<li>32/64 битные установки.</li>
<li>Создание оффлайн установщика.</li>
<li>Создание, редактирование своих списков программ.</li>
<li>Быстрый поиск.</li>
<li>Дружественный интерфейс.</li>
<li>Все программы скачиваются только с официальных сайтов (вирусов нет).</li>
<li>HTML/XML отчеты.</li>
<li>Контроль создания ярлыков во время установки.</li>
<li>Создание исполняемых файлов с программами.</li>
<li>Контроль зависимостей (.Net, Java, etc).</li>
</ul>
<p>Подтверждаю про постоянные обновления. Пока я писал эту статью версия обновилась до 2.0.1.1533.</p>
<h2>Что запланировано</h2>
<ul>
<li>Удаленная установка на компьютеры в сети.</li>
<li>Возможность добавлять свой софт (качается по расписанию и устанавливается).</li>
<li>Список установленных программ.</li>
<li>Список программ для обновления (updater).</li>
<li>Рейтинговый центр (возможность поставить оценки программам).</li>
<li>Деинсталятор программ.</li>
<li>База программ будет расти.</li>
</ul>
<h2>Что бы я добавил:</h2>
<p>Дизайн интерфейса на мой взгляд несколько отстает от тенденций<br />
дизайна. Надеюсь, это улучшится. Хотя, дизайн хорош тогда, когда все<br />
понятно. И в этом плане дизайн меня полностью устраивает.</p>
<p>Пожалуй я был бы рад, если кроме короткого описания в программе было<br />
бы и описание подробное. Можно было бы еще добавить отзывы,<br />
положительные и отрицательные, которые могут добавить зарегистрированные<br />
пользователи.</p>
<address>http://vadimgalkin.pp.ru/useful/speed_install/</address>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angelkeeper.wordpress.com/840/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angelkeeper.wordpress.com/840/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angelkeeper.wordpress.com/840/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angelkeeper.wordpress.com/840/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angelkeeper.wordpress.com/840/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angelkeeper.wordpress.com/840/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angelkeeper.wordpress.com/840/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angelkeeper.wordpress.com/840/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angelkeeper.wordpress.com/840/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angelkeeper.wordpress.com/840/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angelkeeper.wordpress.com/840/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angelkeeper.wordpress.com/840/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angelkeeper.wordpress.com/840/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angelkeeper.wordpress.com/840/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=840&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angelkeeper.wordpress.com/2011/09/09/speed_install/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>43.819656 131.943054</georss:point>
		<geo:lat>43.819656</geo:lat>
		<geo:long>131.943054</geo:long>
		<media:content url="http://1.gravatar.com/avatar/d045d46207067ececab5d5e8cc1c52ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">angelkeeper</media:title>
		</media:content>

		<media:content url="http://vadimgalkin.pp.ru/useful/speed_install/speed_install3.png" medium="image" />

		<media:content url="http://vadimgalkin.pp.ru/useful/speed_install/speed_install1.png" medium="image" />

		<media:content url="http://vadimgalkin.pp.ru/useful/speed_install/speed_install2.png" medium="image" />
	</item>
		<item>
		<title>FSRM 2008 R2 &#8211; Error ID: 12306 Source: SRMSVC!!!</title>
		<link>http://angelkeeper.wordpress.com/2011/08/09/fsrm-2008-r2-error-id-12306-source-srmsvc/</link>
		<comments>http://angelkeeper.wordpress.com/2011/08/09/fsrm-2008-r2-error-id-12306-source-srmsvc/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 06:52:21 +0000</pubDate>
		<dc:creator>Yamshikov Pavel</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[0x8004531c]]></category>
		<category><![CDATA[A File Server Resource Manager Service email action could not be run.]]></category>
		<category><![CDATA[Email Notification]]></category>
		<category><![CDATA[Error ID: 12306]]></category>
		<category><![CDATA[File server Resource Manager]]></category>
		<category><![CDATA[FSRM]]></category>
		<category><![CDATA[IFsrmEmailExternal::SendMail]]></category>
		<category><![CDATA[LmCompatibilityLevel]]></category>
		<category><![CDATA[Lsa]]></category>
		<category><![CDATA[Send Test E-mail]]></category>
		<category><![CDATA[SRMSVC]]></category>
		<category><![CDATA[Syntax error in parameters or arguments]]></category>
		<category><![CDATA[Unknown command]]></category>
		<category><![CDATA[WSUS]]></category>

		<guid isPermaLink="false">http://angelkeeper.wordpress.com/?p=830</guid>
		<description><![CDATA[При настройке &#171;Email Notification&#187; на очередном серваке столкнулся с проблемой, при нажатии &#171;Send Test E-mail&#187; вывалилось окно с ошибкой. Полез смотреть &#171;Application event log&#187;, а там вот так: Решение проблемы помогли найти коллеги net_andy и blic дав ссылку на форм, где подобное явление уже обсуждалось. Решение проблемы простое. В редакторе реестра открываем ветку &#171;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa&#187; и [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=830&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>При настройке &laquo;Email Notification&raquo; на очередном серваке столкнулся с проблемой, при нажатии &laquo;Send Test E-mail&raquo; вывалилось окно с ошибкой.</p>
<p><a href="http://angelkeeper.files.wordpress.com/2011/08/error-email-notifications.jpg"><img class="size-full wp-image-831 alignnone" title="Error Email Notifications" src="http://angelkeeper.files.wordpress.com/2011/08/error-email-notifications.jpg" alt="" width="416" height="150" /></a></p>
<p>Полез смотреть &laquo;Application event log&raquo;, а там вот так:</p>
<p><a href="http://angelkeeper.files.wordpress.com/2011/08/error-email-notifications_application-event-log.jpg"><img class="size-full wp-image-833 alignnone" title="Error Email Notifications_Application event log" src="http://angelkeeper.files.wordpress.com/2011/08/error-email-notifications_application-event-log.jpg" alt="" width="633" height="440" /></a></p>
<p>Решение проблемы помогли найти коллеги net_andy и blic дав ссылку на <a href="http://social.technet.microsoft.com/Forums/ru-RU/wsusru/thread/fef4b5bd-a50a-42dd-bb34-c3a74836fe82">форм</a>, где подобное явление уже обсуждалось.</p>
<p>Решение проблемы простое. В редакторе реестра открываем ветку &laquo;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa&raquo; и создаем параметр &laquo;DWORD&raquo; с именем &laquo;LmCompatibilityLevel&raquo; и значением &laquo;2&#8243;.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angelkeeper.wordpress.com/830/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angelkeeper.wordpress.com/830/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angelkeeper.wordpress.com/830/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angelkeeper.wordpress.com/830/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angelkeeper.wordpress.com/830/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angelkeeper.wordpress.com/830/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angelkeeper.wordpress.com/830/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angelkeeper.wordpress.com/830/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angelkeeper.wordpress.com/830/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angelkeeper.wordpress.com/830/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angelkeeper.wordpress.com/830/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angelkeeper.wordpress.com/830/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angelkeeper.wordpress.com/830/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angelkeeper.wordpress.com/830/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=830&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angelkeeper.wordpress.com/2011/08/09/fsrm-2008-r2-error-id-12306-source-srmsvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>43.819656 131.943054</georss:point>
		<geo:lat>43.819656</geo:lat>
		<geo:long>131.943054</geo:long>
		<media:content url="http://1.gravatar.com/avatar/d045d46207067ececab5d5e8cc1c52ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">angelkeeper</media:title>
		</media:content>

		<media:content url="http://angelkeeper.files.wordpress.com/2011/08/error-email-notifications.jpg" medium="image">
			<media:title type="html">Error Email Notifications</media:title>
		</media:content>

		<media:content url="http://angelkeeper.files.wordpress.com/2011/08/error-email-notifications_application-event-log.jpg" medium="image">
			<media:title type="html">Error Email Notifications_Application event log</media:title>
		</media:content>
	</item>
		<item>
		<title>Многопоточный сканер сети от Xaegr</title>
		<link>http://angelkeeper.wordpress.com/2011/07/15/threadping/</link>
		<comments>http://angelkeeper.wordpress.com/2011/07/15/threadping/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 23:26:53 +0000</pubDate>
		<dc:creator>Yamshikov Pavel</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Scanner]]></category>
		<category><![CDATA[Ping]]></category>
		<category><![CDATA[Thread]]></category>

		<guid isPermaLink="false">http://angelkeeper.wordpress.com/?p=824</guid>
		<description><![CDATA[ThreadPing.ps1 Param ( [string[]]$Address = $(1..20 &#124; %{"192.168.1.$_"}), [int]$Threads = 5 ) write-host "Distributing addresses around jobs" $JobAddresses = @{} $CurJob = 0 $CurAddress = 0 while ($CurAddress -lt $Address.count) { $JobAddresses[$CurJob] += @($Address[$CurAddress]) $CurAddress++ if ($CurJob -eq $Threads -1) { $CurJob = 0 } else { $CurJob++ } } $Jobs = @() foreach ($n [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=824&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>ThreadPing.ps1</strong></p>
<pre class="PowerShellColorizedScript"><span style="color:#00008b;">Param</span> <span style="color:#000000;">(</span>
<span style="color:#008080;">[string[]]</span><span style="color:#ff4500;">$Address</span> <span style="color:#a9a9a9;">=</span> <span style="color:#000000;">$(</span><span style="color:#800080;">1</span><span style="color:#a9a9a9;">..</span><span style="color:#800080;">20</span> <span style="color:#a9a9a9;">|</span> <span style="color:#0000ff;">%</span><span style="color:#000000;">{</span><span style="color:#8b0000;">"192.168.1.$_"</span><span style="color:#000000;">}</span><span style="color:#000000;">)</span><span style="color:#a9a9a9;">,</span>
<span style="color:#008080;">[int]</span><span style="color:#ff4500;">$Threads</span> <span style="color:#a9a9a9;">=</span> <span style="color:#800080;">5</span>
<span style="color:#000000;">)</span>            

<span style="color:#0000ff;">write-host</span> <span style="color:#8b0000;">"Distributing addresses around jobs"</span>
<span style="color:#ff4500;">$JobAddresses</span> <span style="color:#a9a9a9;">=</span> <span style="color:#000000;">@{</span><span style="color:#000000;">}</span>
<span style="color:#ff4500;">$CurJob</span> <span style="color:#a9a9a9;">=</span> <span style="color:#800080;">0</span>
<span style="color:#ff4500;">$CurAddress</span> <span style="color:#a9a9a9;">=</span> <span style="color:#800080;">0</span>
<span style="color:#00008b;">while</span> <span style="color:#000000;">(</span><span style="color:#ff4500;">$CurAddress</span> <span style="color:#a9a9a9;">-lt</span> <span style="color:#ff4500;">$Address</span><span style="color:#a9a9a9;">.</span><span style="color:#000000;">count</span><span style="color:#000000;">)</span>
<span style="color:#000000;">{</span>
    <span style="color:#ff4500;">$JobAddresses</span><span style="color:#a9a9a9;">[</span><span style="color:#ff4500;">$CurJob</span><span style="color:#a9a9a9;">]</span> <span style="color:#a9a9a9;">+=</span> <span style="color:#000000;">@(</span><span style="color:#ff4500;">$Address</span><span style="color:#a9a9a9;">[</span><span style="color:#ff4500;">$CurAddress</span><span style="color:#a9a9a9;">]</span><span style="color:#000000;">)</span>
    <span style="color:#ff4500;">$CurAddress</span><span style="color:#a9a9a9;">++</span>
    <span style="color:#00008b;">if</span> <span style="color:#000000;">(</span><span style="color:#ff4500;">$CurJob</span> <span style="color:#a9a9a9;">-eq</span> <span style="color:#ff4500;">$Threads</span> <span style="color:#a9a9a9;">-</span><span style="color:#800080;">1</span><span style="color:#000000;">)</span>
    <span style="color:#000000;">{</span>
        <span style="color:#ff4500;">$CurJob</span> <span style="color:#a9a9a9;">=</span> <span style="color:#800080;">0</span>
    <span style="color:#000000;">}</span>
    <span style="color:#00008b;">else</span>
    <span style="color:#000000;">{</span>
        <span style="color:#ff4500;">$CurJob</span><span style="color:#a9a9a9;">++</span>
    <span style="color:#000000;">}</span>
<span style="color:#000000;">}</span>            

<span style="color:#ff4500;">$Jobs</span> <span style="color:#a9a9a9;">=</span> <span style="color:#000000;">@(</span><span style="color:#000000;">)</span>
<span style="color:#00008b;">foreach</span> <span style="color:#000000;">(</span><span style="color:#ff4500;">$n</span> <span style="color:#00008b;">in</span> <span style="color:#800080;">0</span> <span style="color:#a9a9a9;">..</span> <span style="color:#000000;">(</span><span style="color:#ff4500;">$Threads</span><span style="color:#a9a9a9;">-</span><span style="color:#800080;">1</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>
<span style="color:#000000;">{</span>
    <span style="color:#0000ff;">Write-host</span> <span style="color:#8b0000;">"Starting job $n, for addresses $($JobAddresses[$n])"</span>
    <span style="color:#ff4500;">$Jobs</span> <span style="color:#a9a9a9;">+=</span> <span style="color:#0000ff;">Start-Job</span> <span style="color:#000080;">-ArgumentList</span> <span style="color:#ff4500;">$JobAddresses</span><span style="color:#a9a9a9;">[</span><span style="color:#ff4500;">$n</span><span style="color:#a9a9a9;">]</span> <span style="color:#000080;">-ScriptBlock</span> <span style="color:#000000;">{</span>
        <span style="color:#ff4500;">$ping</span> <span style="color:#a9a9a9;">=</span> <span style="color:#0000ff;">new-object</span> <span style="color:#8a2be2;">System.Net.NetworkInformation.Ping</span>
        <span style="color:#00008b;">Foreach</span> <span style="color:#000000;">(</span><span style="color:#ff4500;">$Ip</span> <span style="color:#00008b;">in</span> <span style="color:#ff4500;">$Args</span><span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#00008b;">trap</span> <span style="color:#000000;">{</span>
                <span style="color:#0000ff;">new-object</span> <span style="color:#8a2be2;">psobject</span> <span style="color:#000080;">-Property</span> <span style="color:#000000;">{</span>
                    <span style="color:#0000ff;">Status</span> <span style="color:#8a2be2;">=</span> <span style="color:#8b0000;">"Error: $_"</span>
                    <span style="color:#0000ff;">Address</span> <span style="color:#8a2be2;">=</span> <span style="color:#ff4500;">$Ip</span>
                    <span style="color:#0000ff;">RoundtripTime</span> <span style="color:#8a2be2;">=</span> <span style="color:#800080;">0</span>
                <span style="color:#000000;">}</span>
                <span style="color:#00008b;">Continue</span>
            <span style="color:#000000;">}</span>
            <span style="color:#ff4500;">$ping</span><span style="color:#a9a9a9;">.</span><span style="color:#000000;">send</span><span style="color:#000000;">(</span><span style="color:#ff4500;">$Ip</span><span style="color:#a9a9a9;">,</span><span style="color:#800080;">100</span><span style="color:#000000;">)</span> <span style="color:#a9a9a9;">|</span> <span style="color:#0000ff;">select</span> <span style="color:#000000;">` </span>                <span style="color:#000000;">@{</span><span style="color:#000000;">name</span><span style="color:#a9a9a9;">=</span><span style="color:#8b0000;">"Status"</span><span style="color:#000000;">;</span> <span style="color:#000000;">expression</span><span style="color:#a9a9a9;">=</span><span style="color:#000000;">{</span><span style="color:#ff4500;">$_</span><span style="color:#a9a9a9;">.</span><span style="color:#000000;">Status</span><span style="color:#a9a9a9;">.</span><span style="color:#000000;">ToString</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#000000;">}</span><span style="color:#000000;">}</span><span style="color:#a9a9a9;">,</span>
                <span style="color:#000000;">@{</span><span style="color:#000000;">name</span> <span style="color:#a9a9a9;">=</span> <span style="color:#8b0000;">"Address"</span><span style="color:#000000;">;</span> <span style="color:#000000;">expression</span><span style="color:#a9a9a9;">=</span><span style="color:#000000;">{</span><span style="color:#ff4500;">$Ip</span><span style="color:#000000;">}</span><span style="color:#000000;">}</span><span style="color:#a9a9a9;">,</span> <span style="color:#8a2be2;">RoundtripTime</span>
        <span style="color:#000000;">}</span>
    <span style="color:#000000;">}</span>
<span style="color:#000000;">}</span>            

<span style="color:#0000ff;">write-host</span> <span style="color:#8b0000;">"Waiting for jobs"</span>
<span style="color:#ff4500;">$ReceivedJobs</span> <span style="color:#a9a9a9;">=</span> <span style="color:#800080;">0</span>
<span style="color:#00008b;">while</span> <span style="color:#000000;">(</span><span style="color:#ff4500;">$ReceivedJobs</span> <span style="color:#a9a9a9;">-le</span> <span style="color:#ff4500;">$Jobs</span><span style="color:#a9a9a9;">.</span><span style="color:#000000;">Count</span><span style="color:#000000;">)</span>
<span style="color:#000000;">{</span>
    <span style="color:#00008b;">foreach</span> <span style="color:#000000;">(</span><span style="color:#ff4500;">$CompletedJob</span> <span style="color:#00008b;">in</span> <span style="color:#000000;">(</span><span style="color:#ff4500;">$Jobs</span> <span style="color:#a9a9a9;">|</span> <span style="color:#0000ff;">where</span> <span style="color:#000000;">{</span><span style="color:#ff4500;">$_</span><span style="color:#a9a9a9;">.</span><span style="color:#000000;">State</span> <span style="color:#a9a9a9;">-eq</span> <span style="color:#8b0000;">"Completed"</span><span style="color:#000000;">}</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>
    <span style="color:#000000;">{</span>
        <span style="color:#0000ff;">Receive-Job</span> <span style="color:#ff4500;">$CompletedJob</span> <span style="color:#a9a9a9;">|</span> <span style="color:#0000ff;">select</span> <span style="color:#8a2be2;">status</span><span style="color:#a9a9a9;">,</span> <span style="color:#8a2be2;">address</span><span style="color:#a9a9a9;">,</span> <span style="color:#8a2be2;">roundtriptime</span>
        <span style="color:#ff4500;">$ReceivedJobs</span> <span style="color:#a9a9a9;">++</span>
        <span style="color:#0000ff;">sleep</span> <span style="color:#800080;">1</span>
    <span style="color:#000000;">}</span>
<span style="color:#000000;">}</span>            

<span style="color:#0000ff;">Remove-Job</span> <span style="color:#ff4500;">$Jobs</span>
<span style="color:#0000ff;">write-host</span> <span style="color:#8b0000;">"Done." </span></pre>
<h6><a href="http://xaegr.wordpress.com/2011/07/12/threadping/">Оригинал</a></h6>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angelkeeper.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angelkeeper.wordpress.com/824/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angelkeeper.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angelkeeper.wordpress.com/824/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angelkeeper.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angelkeeper.wordpress.com/824/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angelkeeper.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angelkeeper.wordpress.com/824/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angelkeeper.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angelkeeper.wordpress.com/824/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angelkeeper.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angelkeeper.wordpress.com/824/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angelkeeper.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angelkeeper.wordpress.com/824/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=824&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angelkeeper.wordpress.com/2011/07/15/threadping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>43.819656 131.943054</georss:point>
		<geo:lat>43.819656</geo:lat>
		<geo:long>131.943054</geo:long>
		<media:content url="http://1.gravatar.com/avatar/d045d46207067ececab5d5e8cc1c52ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">angelkeeper</media:title>
		</media:content>
	</item>
		<item>
		<title>Парсинг журнала безопасности терминал-сервера. Успех входа, Отказ входа в систему.</title>
		<link>http://angelkeeper.wordpress.com/2011/06/21/security-log/</link>
		<comments>http://angelkeeper.wordpress.com/2011/06/21/security-log/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 03:02:47 +0000</pubDate>
		<dc:creator>Yamshikov Pavel</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[member]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[парсинг]]></category>
		<category><![CDATA[журнал]]></category>
		<category><![CDATA[EventLog]]></category>
		<category><![CDATA[Terminal server]]></category>
		<category><![CDATA[EventID]]></category>
		<category><![CDATA[EntryType]]></category>
		<category><![CDATA[Remote Desktop]]></category>
		<category><![CDATA[RPD]]></category>

		<guid isPermaLink="false">http://angelkeeper.wordpress.com/?p=801</guid>
		<description><![CDATA[Для получения списка событий журнала security нам понадобится командлет Get-EventLog. Команда отображает содержимое всего журнала, что в корне нас не устраивает. Но все не так плохо, то что мы видим на скриншоте, не просто текст, а объекты с свойствами. Получить свойства данных объектов позволяет комадлет Get-Member. Выполнив в командной строке Get-EventLog security &#124; Get-Member, мы [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=801&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Для получения списка событий журнала security нам понадобится командлет Get-EventLog.</p>
<p><img src="http://habrastorage.org/storage/habraeffect/3c/33/3c339211e534cd64463c432396942cd0.JPG" alt="image" /></p>
<p>Команда отображает содержимое всего журнала, что в корне нас не устраивает. Но все не так плохо, то что мы видим на скриншоте, не просто текст, а объекты с свойствами. Получить свойства данных объектов позволяет комадлет Get-Member. Выполнив в командной строке <code>Get-EventLog security | Get-Member</code>, мы получим в результате список свойств всех объектов выводимых Get-EventLog.</p>
<p><img src="http://habrastorage.org/storage/habraeffect/aa/f8/aaf8e6ce86e74e30ac638020d557c9f2.JPG" alt="image" /></p>
<p>Зная список свойств, можно манипулировать результатами работы Get-EventLog. Например, что бы получить список всех событий за сегодняшний день, самым простым способом будет использование параметра <code>-after</code>. Полный список параметров командлета <code>Get-EventLog</code> можно узнать используя командлет <code>Get-Help</code> или <a href="http://technet.microsoft.com/ru-ru/library/dd315250.aspx">здесь</a>. В результате у нас получится команда <code>Get-EventLog security -after (Get-date -hour 0 -minute 0 -second 0)</code>, где командлет Get-Date выдает текущую дату и время, но параметры hour, minute и second задают вывод времени с начала текущего дня. В результате мы получим список событий произошедших за сегодня.<br />
Нам необходимо получить список всех пользователей совершавших вход на сервер по протоколу RPD, для этого используем значения EventID и EntryType.</p>
<p>Значения EventID</p>
<ul>
<li>528 — Успешный вход пользователя на компьютер.</li>
<li>529 — Отказ входа в систему. Не правильное имя пользователя или пароль.</li>
</ul>
<p>Значения EntryType</p>
<ul>
<li>10 — RemoteInteractive. Пользователь выполнил удаленный вход на этот компьютер, используя Terminal Services или Remote Desktop.</li>
</ul>
<p>От фильтруем события из дополнив команду новыми вводными:<br />
<code>Get-EventLog security -message "*Тип входа:?10*" -after (Get-date -hour 0 -minute 0 -second 0) | ?{$_.eventid -eq 528}</code></p>
<p>Параметр <code>-message</code> отражает полностью сообщение нашего события, в котором содержится «Entry type» («Тип входа»), через шаблоны мы задаем поиск интересующей нас строки. Далее передаем ч\з конвейер командлету Where-Object (?) для фильтрации сообщений &laquo;Успешного входа пользователя в систему&raquo;. Для фильтрации сообщений &laquo;Отказа входа в систему<code>"{$_.eventid -eq 528} заменить на <code>{$_.eventid -eq 529}.</code></code></p>
<p>Результатом выполнения будет следующее:</p>
<p><img src="http://habrastorage.org/storage/habraeffect/cc/30/cc30d0cfc4acc7b2ee8eae48a2af2bfb.JPG" alt="image" /></p>
<p>Пойдем дальше, создадим файл-срипт&raquo;test.ps1&#8243;.</p>
<p><code># В переменную "<code>$Events" загружаем массив</code> событий "Удаленного успешного входа в систему"<br />
$Events = Get-EventLog security -message "*Тип входа:?10*" -after (get-date -hour 0 -minute 0 -second 0) | ?{$_.eventid -eq 528 }</code></p>
<p># Создаем переменную &laquo;$Data&raquo; с параметрами Время, Имя пользователя, IP адрес.<br />
$Data = New-Object System.Management.Automation.PSObject<br />
$Data | Add-Member NoteProperty Time ($null)<br />
$Data | Add-Member NoteProperty UserName ($null)<br />
$Data | Add-Member NoteProperty Address ($null)</p>
<p># Пройдемся по каждому объекту из массива &laquo;<code>$Events"</code>.<br />
$Events | %{</p>
<p># Наполняем переменную &laquo;$Data&raquo; данными.<br />
$Data.time = $_.TimeGenerated</p>
<p># В переменную &laquo;$message&raquo; загружаем массив строк, которые разделяются символом переноса строки (&#8216;n).<br />
# Функции trimstart(), trimend() убирают все лишние символы в конце и в начале строки.<br />
# Функция split разделяет строку.<br />
$message = $_.message.split(&laquo;`n&raquo;) | %{$_.trimstart()} | %{$_.trimend()}</p>
<p># В массиве &laquo;$message&raquo; мы ищем совпадения по строке «Пользователь:» и «Адрес сети источника:»<br />
$Data.UserName = ($message | ?{$_ -like &laquo;Пользователь:*&raquo;} | %{$_ -replace &laquo;^.+:.&raquo;} )<br />
$Data.Address = ($message | ?{$_ -like &laquo;Адрес сети источника:*&raquo;} | %{$_ -replace &laquo;^.+:.&raquo;})</p>
<p># Вывод результата.<br />
$Data<br />
}</p>
<p>Запускаем скрипт <code>".\test.ps1</code>&laquo;.<br />
<img src="http://habrastorage.org/storage/habraeffect/86/5e/865ec1e1fbd716c0e2e3096cb233a3cd.JPG" alt="image" /></p>
<p>Если скрипт не запустился, то скорее всего ваш PoSh не настроен на выполнение скриптов. Выполните команду <code> Set-ExecutionPolicy RemoteSignet </code>.</p>
<p>Выглядит вполне хорошо, но думаю можно улучшить скрипт. Для удобства внесем в него возможность задания параметров, и выделения строк цветом по маске IP адреса.</p>
<p><code>param ($key1,$val1,$val2,$val3,$val4,$val5,$val6)</code></p>
<p>if ($val1 -eq $null) {$val1=0};</p>
<p>$mydate = Get-date -hour 0 -minute 0 -second 0;</p>
<p>if ($key1 -eq &laquo;year&raquo;) { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1 -month 1); $mydate = $mydate.addyears(-$val1); };</p>
<p>if ($key1 -eq &laquo;month&raquo;) { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1); $mydate = $mydate.addmonths(-$val1); };</p>
<p>if ($key1 -eq &laquo;day&raquo;) { $mydate = $mydate.adddays(-$val1) };</p>
<p>if ($key1 -eq &laquo;date&raquo;) { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day $val1 -month $val2 -year $val3); };</p>
<p># здесь реализуем возможность задания интервала</p>
<p>if ($val4 -eq $null) {$Events = Get-EventLog security -message &laquo;*Тип входа:?10*&raquo; -after ($mydate) | ?{$_.eventid -eq 528 }}<br />
if ($val4 -ne $null) {$Events = Get-EventLog security -message &laquo;*Тип входа:?10*&raquo; -after ($mydate) -before (get-date -hour 0 -minute 0 -second 0 -day $val4 -month $val5 -year $val6) | ?{$_.eventid -eq 528 }}<br />
$Data = New-Object System.Management.Automation.PSObject<br />
$Data | Add-Member NoteProperty Time ($null)<br />
$Data | Add-Member NoteProperty UserName ($null)<br />
$Data | Add-Member NoteProperty Address ($null)</p>
<p>$Events | %{</p>
<p>$Data.time = $_.TimeGenerated</p>
<p>$message = $_.message.split(&laquo;`n&raquo;) | %{$_.trimstart()} | %{$_.trimend()}</p>
<p>$Data.UserName = ($message | ?{$_ -like &laquo;Пользователь:*&raquo;} | %{$_ -replace &laquo;^.+:.&raquo;} )<br />
$Data.Address = ($message | ?{$_ -like &laquo;Адрес сети источника:*&raquo;} | %{$_ -replace &laquo;^.+:.&raquo;})</p>
<p>$textcolor = $host.ui.rawui.foregroundcolor</p>
<p>$host.ui.rawui.foregroundcolor = &laquo;red&raquo;</p>
<p>if ($data.address -like &laquo;192.168.0*&raquo;) {$host.ui.rawui.foregroundcolor = &laquo;DarkGreen&raquo;}<br />
if ($data.address -like &laquo;10.*&raquo;) {$host.ui.rawui.foregroundcolor = &laquo;yellow&raquo;}</p>
<p>$data</p>
<p>$host.ui.rawui.foregroundcolor = $textcolor</p>
<p>}</p>
<p><code>param ($key1,$val1,$val2,$val3,$val4,$val5,$val6)</code> — определяет параметры, передаваемые скрипту.</p>
<p><code>if ($key1 -eq "day") {$mydate = $mydate.adddays(-$val1)}; </code> проверяем переданные параметры на соответствие ключу, если ключ совпадает, то корректируем дату согласно задаваемым параметрам. В данном случае в качестве параметра передается ключ «day» аргументом которого мы будем переводить дату на определенное количество дней назад. Т.е. будет выведен лог за определенное количество дней, остальные условия выполняются по аналогии, за месяц и за год. Если указан ключ «date» то за начало отсчета берется конкретная дата, указанная через пробел, например «01 05 2011», если мы так же через пробел укажем другую дату, то на экран будет выведен определенный период, указанный в этих датах.</p>
<p><img src="http://habrastorage.org/storage/habraeffect/39/04/39040120602807790ae03ca000603193.JPG" alt="image" /></p>
<p>А если задать <code>{$_.eventid -eq 529 }</code> то результатом будут все попытки входа с неправильными паролями.</p>
<p><img src="http://habrastorage.org/storage/habraeffect/6e/d4/6ed4b900a6bccfe4bf5616cabf8d4130.JPG" alt="image" /></p>
<h6><a href="http://habrahabr.ru/blogs/powershell/118644/">Источник</a></h6>
<p>PS.</p>
<p>Пусть автор поста на меня не серчает, кое какие фразы, формулировки исправил.</p>
<p>Cкрипт можно сделал немного изящнее внеся в него изменения:</p>
<p># Параметры<br />
param ($EventID,$key1,$val1,$StartDate,$EndDate)</p>
<p># Начальное время суток<br />
$TimeofDay = (get-date).date</p>
<p>if ($val1 -eq $null) {$val1=0};</p>
<p># Год<br />
if ($key1 -eq &laquo;year&raquo;) {$mydate = ((Get-date $TimeofDay -day 1 -month 1)).addyears(-$val1)}</p>
<p># Месяц<br />
if ($key1 -eq &laquo;month&raquo;) {$mydate = ((Get-date $TimeofDay -day 1)).addmonths(-$val1)}</p>
<p># День<br />
if ($key1 -eq &laquo;day&raquo;) {$mydate = $TimeofDay.adddays(-$val1)}</p>
<p># Конкретная<br />
if ($key1 -eq &laquo;date&raquo;) {$mydate = (Get-date $StartDate)}</p>
<p># Интервал<br />
if ($key1 -eq &laquo;interval&raquo;) {$After = (Get-date $StartDate);$Before = (Get-date $EndDate)}</p>
<p># <code><code>Загружаем массив</code> событий</code><br />
if (!$After -and !$Before) {$Events = Get-EventLog security -message &laquo;*Тип входа:?10*&raquo; -after $mydate | ?{$_.eventid -eq $EventID }}<br />
else {$Events = Get-EventLog security -message &laquo;*Тип входа:?10*&raquo; -after $After -before $Before | ?{$_.eventid -eq $EventID }}</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angelkeeper.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angelkeeper.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angelkeeper.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angelkeeper.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angelkeeper.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angelkeeper.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angelkeeper.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angelkeeper.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angelkeeper.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angelkeeper.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angelkeeper.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angelkeeper.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angelkeeper.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angelkeeper.wordpress.com/801/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=801&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angelkeeper.wordpress.com/2011/06/21/security-log/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>43.819656 131.943054</georss:point>
		<geo:lat>43.819656</geo:lat>
		<geo:long>131.943054</geo:long>
		<media:content url="http://1.gravatar.com/avatar/d045d46207067ececab5d5e8cc1c52ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">angelkeeper</media:title>
		</media:content>

		<media:content url="http://habrastorage.org/storage/habraeffect/3c/33/3c339211e534cd64463c432396942cd0.JPG" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://habrastorage.org/storage/habraeffect/aa/f8/aaf8e6ce86e74e30ac638020d557c9f2.JPG" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://habrastorage.org/storage/habraeffect/cc/30/cc30d0cfc4acc7b2ee8eae48a2af2bfb.JPG" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://habrastorage.org/storage/habraeffect/86/5e/865ec1e1fbd716c0e2e3096cb233a3cd.JPG" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://habrastorage.org/storage/habraeffect/39/04/39040120602807790ae03ca000603193.JPG" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://habrastorage.org/storage/habraeffect/6e/d4/6ed4b900a6bccfe4bf5616cabf8d4130.JPG" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Рестарт задания печати.</title>
		<link>http://angelkeeper.wordpress.com/2011/05/06/printer-jobstatus-restart/</link>
		<comments>http://angelkeeper.wordpress.com/2011/05/06/printer-jobstatus-restart/#comments</comments>
		<pubDate>Thu, 05 May 2011 23:01:00 +0000</pubDate>
		<dc:creator>Yamshikov Pavel</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Рестарт]]></category>
		<category><![CDATA[задание]]></category>
		<category><![CDATA[Print Server]]></category>
		<category><![CDATA[PrintJob]]></category>
		<category><![CDATA[Restart]]></category>

		<guid isPermaLink="false">http://angelkeeper.wordpress.com/?p=791</guid>
		<description><![CDATA[Задача была сформулирована следующим образом: Есть сервер с win2008 r2 sp1. На нем развернут терминал 1с, установлены принтеры, порядка 30. К серверу подключаются удаленные объекты, соединенные VPN каналом. Скорость канала варьируется от 96-512 Кбит/с. Периодически, при печати на принтер, задание останавливается ошибкой и висит со статусом &#171;ошибка&#187;. Для продолжения работы необходимо открыть принтер, выбрать задание [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=791&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Задача была сформулирована следующим образом:</p>
<blockquote><p>Есть сервер с win2008 r2 sp1. На нем развернут терминал 1с, установлены принтеры, порядка 30. К серверу подключаются удаленные объекты, соединенные VPN каналом. Скорость канала варьируется от 96-512 Кбит/с. Периодически, при печати на принтер, задание останавливается ошибкой и висит со статусом &laquo;ошибка&raquo;. Для продолжения работы необходимо открыть принтер, выбрать задание с ошибкой правой кнопкой, и нажать &laquo;Перезапустить&raquo;. Задание перезапускается и печатается.</p>
<p>Так как принтеров большое кол-во и задания зависают ошибкой довольно часто, есть возможность проверять принтеры на ошибку скриптом. В инете нашел такой скрипт:<br />
strComputer = &laquo;.&raquo;<br />
Set objWMIService = GetObject(&laquo;winmgmts:&raquo; _<br />
&amp; &laquo;{impersonationLevel=impersonate}!\\&raquo; &amp; strComputer &amp; &laquo;\root\cimv2&#8243;)<br />
Set colPrintJobs =  objWMIService.ExecQuery _<br />
(&laquo;Select * from Win32_PrintJob where status=’Error’&raquo;)<br />
For Each objPrintJob in colPrintJobs<br />
objPrintJob.Resume<br />
Next<br />
Однако, этот скрипт возобновляет печать, только если задание было приостановлено, а перезапускать не хочет. Перезапуск спулера помогает, однако при этом перезапускаются все параллельные очереди на других принтерах. Есть ли метод или скрипт для класса objPrintJob, чтобы перезапустить задание, как это можно сделать визуально?</p></blockquote>
<p>Собственно cамо решение:</p>
<p><span style="color:#009900;">#Определяем способ работы с потоками (threads)</span><br />
<span style="color:#993399;">$host</span>.Runspace.ThreadOptions <span style="color:#ff0000;">= </span>«<span style="color:#660000;">ReuseThread</span>»<br />
<span style="color:#009900;">#Подключаем сборку System.Printing</span><br />
<span style="color:#339999;">Add-Type -AssemblyName</span> System.Printing<br />
<span style="color:#009900;">#Создаем объект PrintServer (для локального компьютера)</span><br />
<span style="color:#993399;">$PrintServer</span> <span style="color:#ff0000;">= </span><span style="color:#339999;">new-object</span> System.Printing.PrintServer<br />
<span style="color:#009900;">#Получаем перечень очередей печати (PrintQueues)</span><br />
<span style="color:#993399;">$PrintQueues</span> <span style="color:#ff0000;">= </span><span style="color:#993399;">$PrintServer</span>.GetPrintQueues()<br />
<span style="color:#009900;">#Для каждой очереди печати…</span><br />
<span style="color:#3333ff;">foreach </span>(<span style="color:#993399;">$PrnQueue</span> <span style="color:#ff0000;">in </span><span style="color:#993399;">$PrintQueues</span>) {<br />
<span style="color:#009900;">#…обновим свойства объекта PrnQueue значениями, полученными от принтера<br />
#и утилит очередей печати, запущенных на компьютере</span><br />
<span style="color:#993399;">$PrnQueue</span>.Refresh()<br />
<span style="color:#009900;">#Получаем перечень заданий печати для текущей Очереди печати</span><br />
<span style="color:#993399;">$PrintJobs</span><span style="color:#ff0000;">=</span><span style="color:#993399;">$PrnQueue</span>.GetPrintJobInfoCollection()<br />
<span style="color:#009900;">#Для каждого задания печати…</span><br />
<span style="color:#3333ff;">foreach </span>(<span style="color:#993399;">$PrnJob</span> <span style="color:#ff0000;">in </span><span style="color:#993399;">$PrintJobs</span>) {<br />
<span style="color:#009900;">   #…проверяем статус задания</span><br />
<span style="color:#3333ff;">if </span>(<span style="color:#993399;">$PrnJob</span>.JobStatus.ToString() <span style="color:#ff0000;">-like </span>«<span style="color:#660000;">*error*</span>») {<br />
<span style="color:#009900;">      #если статус задания, содержит слово error, то перезапускаем задание.</span><br />
<span style="color:#993399;">$PrnJob</span>.Restart()<br />
}<br />
}<br />
}</p>
<h6><a href="http://shserg.ru/" rel="nofollow">Источник</a></h6>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angelkeeper.wordpress.com/791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angelkeeper.wordpress.com/791/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angelkeeper.wordpress.com/791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angelkeeper.wordpress.com/791/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angelkeeper.wordpress.com/791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angelkeeper.wordpress.com/791/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angelkeeper.wordpress.com/791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angelkeeper.wordpress.com/791/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angelkeeper.wordpress.com/791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angelkeeper.wordpress.com/791/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angelkeeper.wordpress.com/791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angelkeeper.wordpress.com/791/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angelkeeper.wordpress.com/791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angelkeeper.wordpress.com/791/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=791&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angelkeeper.wordpress.com/2011/05/06/printer-jobstatus-restart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>43.819656 131.943054</georss:point>
		<geo:lat>43.819656</geo:lat>
		<geo:long>131.943054</geo:long>
		<media:content url="http://1.gravatar.com/avatar/d045d46207067ececab5d5e8cc1c52ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">angelkeeper</media:title>
		</media:content>
	</item>
		<item>
		<title>Конференция по виртуализации.</title>
		<link>http://angelkeeper.wordpress.com/2011/04/22/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-%d0%bf%d0%be-%d0%b2%d0%b8%d1%80%d1%82%d1%83%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d0%b8/</link>
		<comments>http://angelkeeper.wordpress.com/2011/04/22/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-%d0%bf%d0%be-%d0%b2%d0%b8%d1%80%d1%82%d1%83%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d0%b8/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 22:55:00 +0000</pubDate>
		<dc:creator>Yamshikov Pavel</dc:creator>
				<category><![CDATA[another]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Владивосток]]></category>
		<category><![CDATA[Конференция]]></category>
		<category><![CDATA[виртуализация]]></category>

		<guid isPermaLink="false">http://angelkeeper.wordpress.com/?p=789</guid>
		<description><![CDATA[21 апреля в славном городе Владивостоке прошла тематическая конференция по виртуализации, на которой было представлено множество интересных докладов, посвященных возможностям организации и управления виртуальной инфраструктурой предприятия. Здесь вы можете увидеть запись онлайн-трансляции данного мероприятия.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=789&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>21 апреля в славном городе Владивостоке прошла тематическая конференция по виртуализации, на которой было представлено множество интересных докладов, посвященных возможностям организации и управления виртуальной инфраструктурой предприятия. <a href="http://click.email.microsoftemail.com/?qs=5ba537bda06a0b11393976854fb5d90934ecc599baec93f008281ed001a2758b9bd2b348468e9b6e">Здесь</a> вы можете увидеть запись онлайн-трансляции данного мероприятия.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angelkeeper.wordpress.com/789/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angelkeeper.wordpress.com/789/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angelkeeper.wordpress.com/789/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angelkeeper.wordpress.com/789/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angelkeeper.wordpress.com/789/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angelkeeper.wordpress.com/789/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angelkeeper.wordpress.com/789/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angelkeeper.wordpress.com/789/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angelkeeper.wordpress.com/789/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angelkeeper.wordpress.com/789/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angelkeeper.wordpress.com/789/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angelkeeper.wordpress.com/789/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angelkeeper.wordpress.com/789/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angelkeeper.wordpress.com/789/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=789&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angelkeeper.wordpress.com/2011/04/22/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-%d0%bf%d0%be-%d0%b2%d0%b8%d1%80%d1%82%d1%83%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d0%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>43.819656 131.943054</georss:point>
		<geo:lat>43.819656</geo:lat>
		<geo:long>131.943054</geo:long>
		<media:content url="http://1.gravatar.com/avatar/d045d46207067ececab5d5e8cc1c52ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">angelkeeper</media:title>
		</media:content>
	</item>
		<item>
		<title>Windows PowerShell Cheat Sheet.</title>
		<link>http://angelkeeper.wordpress.com/2011/04/21/windows-powershell-cheat-sheet/</link>
		<comments>http://angelkeeper.wordpress.com/2011/04/21/windows-powershell-cheat-sheet/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 05:59:05 +0000</pubDate>
		<dc:creator>Yamshikov Pavel</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Cheat Sheet]]></category>
		<category><![CDATA[Шпаргалка]]></category>
		<category><![CDATA[Gary Lapointe]]></category>

		<guid isPermaLink="false">http://angelkeeper.wordpress.com/?p=784</guid>
		<description><![CDATA[Gary Lapointe сделал удобную шпаргалку с описанием команд и отличными примерами, которая очень облегчит жизнь при написании powershell скрипта. Download Windows PowerShell Cheat Sheet Источник<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=784&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Gary Lapointe сделал удобную шпаргалку с описанием команд и отличными примерами, которая очень облегчит жизнь при написании powershell скрипта.</p>
<p><a title="Windows PowerShell Cheat Sheet" href="http://blog.falchionconsulting.com/blog/PowerShellCheatSheet.pdf" target="_blank">Download Windows PowerShell Cheat Sheet</a></p>
<h6><a href="http://blog.falchionconsulting.com/index.php/2011/04/windows-powershell-cheat-sheet/">Источник</a></h6>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angelkeeper.wordpress.com/784/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angelkeeper.wordpress.com/784/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angelkeeper.wordpress.com/784/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angelkeeper.wordpress.com/784/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angelkeeper.wordpress.com/784/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angelkeeper.wordpress.com/784/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angelkeeper.wordpress.com/784/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angelkeeper.wordpress.com/784/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angelkeeper.wordpress.com/784/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angelkeeper.wordpress.com/784/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angelkeeper.wordpress.com/784/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angelkeeper.wordpress.com/784/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angelkeeper.wordpress.com/784/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angelkeeper.wordpress.com/784/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=784&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angelkeeper.wordpress.com/2011/04/21/windows-powershell-cheat-sheet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>43.819656 131.943054</georss:point>
		<geo:lat>43.819656</geo:lat>
		<geo:long>131.943054</geo:long>
		<media:content url="http://1.gravatar.com/avatar/d045d46207067ececab5d5e8cc1c52ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">angelkeeper</media:title>
		</media:content>
	</item>
		<item>
		<title>Определяем логин пользователя по его SID средствами MS SQL.</title>
		<link>http://angelkeeper.wordpress.com/2011/01/18/login-sid-mssql/</link>
		<comments>http://angelkeeper.wordpress.com/2011/01/18/login-sid-mssql/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 05:51:32 +0000</pubDate>
		<dc:creator>Yamshikov Pavel</dc:creator>
				<category><![CDATA[Microsoft SQL]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[база данных]]></category>
		<category><![CDATA[задача]]></category>
		<category><![CDATA[идентификатор]]></category>
		<category><![CDATA[Microsoft Dynamics NAV]]></category>
		<category><![CDATA[microsoft sql]]></category>
		<category><![CDATA[name]]></category>
		<category><![CDATA[SID]]></category>
		<category><![CDATA[user]]></category>

		<guid isPermaLink="false">http://angelkeeper.wordpress.com/?p=777</guid>
		<description><![CDATA[У администратора БД (Microsoft Dynamics NAV), возникла задача выдавать/проверять наличие роли SQL db_datareader для некоторых работников. Но в таблице список пользователей хранился в виде SID windows: S-1-5-21-3879… и записи постоянно добавлялись, т.е.  необходимо было конвертировать из S-1-5-21-38… → aapetrov. Серверов было около 70-ти и хотелось все сделать стандартными средствами. Как и положено начал с гугла [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=777&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>У администратора БД (Microsoft Dynamics NAV),  возникла задача выдавать/проверять наличие роли SQL db_datareader для  некоторых работников. Но в таблице список пользователей хранился в виде  SID windows: S-1-5-21-3879… и записи постоянно добавлялись, т.е.  необходимо было конвертировать из S-1-5-21-38… → aapetrov.<br />
Серверов было около 70-ти и хотелось все сделать стандартными средствами. Как и положено начал с гугла — ничего полезного не нашел. Обратился за помощью на <a href="http://www.sql.ru/forum/actualthread.aspx?tid=698225">форум sql.ru</a>. Было предложено множество вариантов, за что огромное спасибо добрым людям, но увы, решение так и не было найдено. И вот на грани нервного срыва, проблему все-таки удалось разрешить.</p>
<p>Для начала немного теории. Разберем SID (S-1-5-21-3879291865-2298129343-1096376209-3741) по частям:</p>
<ul>
<li>S — говорит нам о том, что это именно SID;</li>
<li>1 — уровень контроля;</li>
<li>5 — полномочие идентификатора;</li>
<li>21 — первое подчиненное полномочие идентификатора;</li>
<li>3879291865, 2298129343 и 1096376209 — остальные подчиненные  полномочия идентификатора, все вместе они обозначают домен или  компьютер, который издал идентификатор SID;</li>
<li>3741 — относительный идентификатор.</li>
</ul>
<p>Более подробно о можно <a href="http://onestyle.com.ua/node/2865">почитать тут</a>.</p>
<p>Теперь сам скрипт. Лучше всего создать функцию, а потом просто вызывать ее с параметром:</p>
<p><code>--Проверяем существует ли функция, если да то удаляем и создаем.</p>
<p>IF OBJECT_ID (N'dbo.StringSIDToLogin', N'FN') IS NOT NULL<br />
DROP FUNCTION dbo.StringSIDToLogin<br />
GO<br />
CREATE FUNCTION dbo.StringSIDToLogin (@MYSID AS VARCHAR(255))<br />
RETURNS VARCHAR(300)<br />
AS<br />
BEGIN</p>
<p>--получаем бинарное значение</p>
<p>DECLARE @A AS BIGINT ,@B AS BIGINT ,@C AS BIGINT ,@D AS BIGINT<br />
SET @MYSID = REVERSE(@MYSID)<br />
SET @D = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX('-',@MYSID)-1))<br />
SET @MYSID = SUBSTRING(@MYSID,CHARINDEX('-',@MYSID)+1,255)<br />
SET @C = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX('-',@MYSID)-1))<br />
SET @MYSID = SUBSTRING(@MYSID,CHARINDEX('-',@MYSID)+1,255)<br />
SET @B = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX('-',@MYSID)-1))<br />
SET @MYSID = SUBSTRING(@MYSID,CHARINDEX('-',@MYSID)+1,255)<br />
SET @A = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX('-',@MYSID)-1))<br />
declare @sid_sql VARBINARY(100)<br />
DECLARE @StrLogin VARCHAR(100)<br />
set @sid_sql= 0x010500000000000515000000<br />
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@A)))<br />
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@B)))<br />
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@C)))<br />
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@D)))</p>
<p>--теперь с помощью стандартной функции MS SQL находим логин и убираем префикс домена</p>
<p>set @StrLogin=SUSER_SNAME(@sid_sql)<br />
set @StrLogin=REPLACE (@StrLogin,'dom\','')<br />
RETURN (@StrLogin)<br />
END<br />
GO<br />
Осталось только вызвать функцию:</p>
<p>SELECT dbo.StringSIDToLogin('S-1-5-21-1106671424-631848431-2339101832-7032') AS [Login]</code></p>
<p>Как оказалось всё просто. Саму идею <a href="http://www.sqlservercentral.com/Forums/Topic453997-145-1.aspx">подсказали на форуме</a>.</p>
<h6><a title="Определяем логин пользователя по его SID средствами MS SQL" href="http://habrahabr.ru/blogs/sql/111978/" target="_blank">автор: antonick</a></h6>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angelkeeper.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angelkeeper.wordpress.com/777/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angelkeeper.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angelkeeper.wordpress.com/777/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angelkeeper.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angelkeeper.wordpress.com/777/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angelkeeper.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angelkeeper.wordpress.com/777/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angelkeeper.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angelkeeper.wordpress.com/777/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angelkeeper.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angelkeeper.wordpress.com/777/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angelkeeper.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angelkeeper.wordpress.com/777/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=777&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angelkeeper.wordpress.com/2011/01/18/login-sid-mssql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>43.819656 131.943054</georss:point>
		<geo:lat>43.819656</geo:lat>
		<geo:long>131.943054</geo:long>
		<media:content url="http://1.gravatar.com/avatar/d045d46207067ececab5d5e8cc1c52ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">angelkeeper</media:title>
		</media:content>
	</item>
		<item>
		<title>Руководства по Office 2010.</title>
		<link>http://angelkeeper.wordpress.com/2011/01/14/manual-office-2010/</link>
		<comments>http://angelkeeper.wordpress.com/2011/01/14/manual-office-2010/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 00:08:30 +0000</pubDate>
		<dc:creator>Yamshikov Pavel</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Microsoft Office]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[бесплатно]]></category>
		<category><![CDATA[manual]]></category>
		<category><![CDATA[руководства]]></category>
		<category><![CDATA[скачать]]></category>
		<category><![CDATA[справочник]]></category>
		<category><![CDATA[office]]></category>

		<guid isPermaLink="false">http://angelkeeper.wordpress.com/?p=773</guid>
		<description><![CDATA[На русском языке вышли руководства по Office 2010. Архив содержит руководства по всем продуктам, кроме Lync, входящим в состав Office Professional Plus 2010. Каждое руководство представляет 70-страничный pdf-файл. Скачать руководства (28 Мб)<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=773&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>На русском языке вышли руководства по Office 2010.</p>
<p>Архив содержит руководства по всем продуктам, кроме Lync, входящим в  состав Office Professional Plus 2010. Каждое руководство представляет  70-страничный pdf-файл.</p>
<p><a href="http://download.microsoft.com/download/2/0/B/20B894A3-CB25-47F7-BD76-7F1C5E118227/Office2010ProductGuides.zip" target="_blank"><strong>Скачать руководства</strong></a> (28 Мб)</p>
<p><a href="http://download.microsoft.com/download/2/0/B/20B894A3-CB25-47F7-BD76-7F1C5E118227/Office2010ProductGuides.zip" target="_blank"><img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-70-67/4428.Capture.PNG" border="0" alt="" width="409" height="260" align="left" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angelkeeper.wordpress.com/773/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angelkeeper.wordpress.com/773/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angelkeeper.wordpress.com/773/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angelkeeper.wordpress.com/773/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/angelkeeper.wordpress.com/773/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/angelkeeper.wordpress.com/773/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/angelkeeper.wordpress.com/773/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/angelkeeper.wordpress.com/773/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angelkeeper.wordpress.com/773/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angelkeeper.wordpress.com/773/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angelkeeper.wordpress.com/773/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angelkeeper.wordpress.com/773/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angelkeeper.wordpress.com/773/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angelkeeper.wordpress.com/773/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angelkeeper.wordpress.com&amp;blog=7622704&amp;post=773&amp;subd=angelkeeper&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://angelkeeper.wordpress.com/2011/01/14/manual-office-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<georss:point>43.819656 131.943054</georss:point>
		<geo:lat>43.819656</geo:lat>
		<geo:long>131.943054</geo:long>
		<media:content url="http://1.gravatar.com/avatar/d045d46207067ececab5d5e8cc1c52ff?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">angelkeeper</media:title>
		</media:content>

		<media:content url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-70-67/4428.Capture.PNG" medium="image" />
	</item>
	</channel>
</rss>
