<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Блог команды разработки Active Directory Powershell</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/adpowershell_ru/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/adpowershell_ru/feed.xml</link>
    <description />
    <lastBuildDate>Fri, 17 Apr 2015 05:22:38 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Active Directory PowerShell – Расширенный фильтр (Часть 2)</title>
      <link>https://docs.microsoft.com/archive/blogs/adpowershell_ru/active-directory-powershell-2</link>
      <pubDate>Mon, 30 Nov 2009 06:13:22 GMT</pubDate>
      <dc:creator><![CDATA[Andrey Beshkov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/adpowershell_ru/2009/11/30/active-directory-powershell-2/</guid>
      <description><![CDATA[В моем предыдущем посте я рассказывал о различных возможностях, доступных с помощью параметра...]]></description>
      <content:encoded><![CDATA[<p>В моем предыдущем <a href="https://blogs.technet.com/adpowershell_ru/archive/2009/11/30/3297140.aspx" target="_blank">посте</a> я рассказывал о различных возможностях, доступных с помощью параметра &#8211;Filter, также известного как &#171;расширенный фильтр&#187;. Этот пост дополняет предыдущий и рассказывает о различных операторах, которые поддерживаются расширенным фильтром и представляет некоторые примеры использования каждого из них. Большинство примеров взяты из нашей встроенной справки, которую вы можете вызвать командой:</p>  <p>PS C:\&gt; get-help about_ActiveDirectory_Filter&#160;&#160; ## работает только в самых последних сборках</p>  <p>Вот список поддерживаемых операторов в расширенных фильтрах Active Directory Powershell:    <table border="1" cellspacing="0" cellpadding="0"><tbody>       <tr>         <td valign="top" width="112">           <p><b>Логический оператор</b></p>         </td>          <td valign="top" width="267">           <p><b>Описание</b></p>         </td>          <td valign="top" width="178">           <p><b>Эквивалентный оператор/выражение</b> <b>LDAP</b></p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-eq </p>         </td>          <td valign="top" width="267">           <p>Равно. <b>Не</b> поддерживает подстановочные знаки. </p>         </td>          <td valign="top" width="178">           <p>= </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-ne </p>         </td>          <td valign="top" width="267">           <p>Не равно. <b>Не</b> поддерживает подстановочные знаки. </p>         </td>          <td valign="top" width="178">           <p>! x = y </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-like </p>         </td>          <td valign="top" width="267">           <p>Аналогично &#8211;eq, но поддерживает сравнение с использованием подстановочных знаков. Единственный поддерживаемый подстановочный знак: <b>*</b></p>         </td>          <td valign="top" width="178">           <p>= </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-notlike </p>         </td>          <td valign="top" width="267">           <p>Не соответствует. Поддерживает сравнение с использованием подстановочных знаков. </p>         </td>          <td valign="top" width="178">           <p>! x = y </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-approx </p>         </td>          <td valign="top" width="267">           <p>Приблизительно равно</p>         </td>          <td valign="top" width="178">           <p>~= </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-le </p>         </td>          <td valign="top" width="267">           <p>Лексикографически меньше или равно</p>         </td>          <td valign="top" width="178">           <p>&lt;= </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-lt </p>         </td>          <td valign="top" width="267">           <p>Лексикографически меньше </p>         </td>          <td valign="top" width="178">           <p>! x &gt;= y </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-ge </p>         </td>          <td valign="top" width="267">           <p>Лексикографически больше или равно</p>         </td>          <td valign="top" width="178">           <p>&gt;= </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-gt </p>         </td>          <td valign="top" width="267">           <p>Лексикографически больше </p>         </td>          <td valign="top" width="178">           <p>! x &lt;= y </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-and </p>         </td>          <td valign="top" width="267">           <p>И</p>         </td>          <td valign="top" width="178">           <p>&amp; </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-or </p>         </td>          <td valign="top" width="267">           <p>ИЛИ </p>         </td>          <td valign="top" width="178">           <p>| </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-not </p>         </td>          <td valign="top" width="267">           <p>НЕ</p>         </td>          <td valign="top" width="178">           <p>! </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-bor </p>         </td>          <td valign="top" width="267">           <p>Побитовое ИЛИ</p>         </td>          <td valign="top" width="178">           <p>:1.2.840.113556.1.4.804:= </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-band </p>         </td>          <td valign="top" width="267">           <p>Побитовое И</p>         </td>          <td valign="top" width="178">           <p>:1.2.840.113556.1.4.803:= </p>         </td>       </tr>        <tr>         <td valign="top" width="112">           <p>-recursivematch </p>         </td>          <td valign="top" width="267">           <p>Использует LDAP_MATCHING_RULE_IN_CHAIN (Win2k3 SP2 и выше) </p>         </td>          <td valign="top" width="178">           <p>:1.2.840.113556.1.4.1941:= </p>         </td>       </tr>     </tbody></table> </p>  <p><b>Пример</b><b> 1:&#160; </b><b>Получаем все записи</b><b>      <br /></b>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADObject -Filter { ObjectClass -like &quot;*&quot; }</p>  <p>Эквивалентный LDAP фильтр: (objectClass=*)</p>  <p><b>Пример</b><b> 2: </b><b>Получаем</b><b> </b><b>записи</b><b>, </b><b>содержащие</b><b> </b><b>&quot;bob&quot; </b><b>где</b><b>-</b><b>либо</b><b> </b><b>в</b><b> common name      <br /></b>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADObject -Filter { CN -like &quot;*bob*&quot; }</p>  <p>Эквивалентный LDAP фильтр: (cn=*bob*)</p>  <p><b>Пример 3: Получаем записи, для которых количество ошибочных вводов пароля больше 5      <br /></b>Get-ADUser -Filter { badpwdcount -ge 5 }</p>  <p>Эквивалентный LDAP фильтр: (badpwdcount&gt;=5)</p>  <p><b>Пример</b><b> 4: </b><b>Получаем</b><b> </b><b>всех</b><b> </b><b>пользователей</b><b> </b><b>с</b><b> </b><b>атрибутом</b><b> e</b><b>-mail      <br /></b>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADUser -filter { email -like &quot;*&quot; }     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -или-     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADObject -filter { email -like &quot;*&quot; -and ObjectClass -eq &quot;user&quot; }</p>  <p>Эквивалентный LDAP фильтр: (&amp;(objectClass=user)(email=*))</p>  <p><b>Пример</b><b> 5: </b><b>Получаем</b><b> </b><b>все</b><b> </b><b>записи</b><b> </b><b>пользователей</b><b> </b><b>с</b><b> </b><b>атрибутом</b><b> e-mail</b><b>, </b><b>где</b><b> </b><b>фамилия</b><b> = &quot;smith&quot;      <br /></b>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADUser -Filter { Email -like &quot;*&quot; -and Surname -eq &quot;smith&quot; }     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -или-     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADUser -Filter { Email -like &quot;*&quot; -and sn -eq &quot;smith&quot; }</p>  <p>Эквивалентный LDAP фильтр: (&amp;(sn=smith)(objectClass=user)(email=*))</p>  <p><b>Пример</b><b> 6: </b><b>Получаем</b><b> </b><b>все</b><b> </b><b>записи</b><b> </b><b>пользователей</b><b>, </b><b>где</b><b> </b><b>common name </b><b>начинается</b><b> </b><b>с</b><b> &quot;andy&quot;, </b><b>а</b><b> </b><b>также</b><b> </b><b>пользователей</b><b>, </b><b>у</b><b> </b><b>которых</b><b> </b><b>common nam</b><b>e &quot;steve&quot; </b><b>или</b><b> &quot;margaret&quot;      <br /></b>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADUser -Filter { CN -like &quot;andy*&quot; -or CN -eq &quot;steve&quot; -or CN -eq &quot;margaret&quot; }     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -или-     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADObject -Filter { objectClass -eq &quot;user&quot; -and (CN -like &quot;andy*&quot; -or CN -eq &quot;steve&quot; -or CN -eq &quot;margaret&quot;) }</p>  <p>Эквивалентный LDAP фильтр: (&amp;(objectClass=user) | (cn=andy*)(cn=steve)(cn=margaret))</p>  <p><b>Пример</b><b> 7: </b><b>Получаем</b><b> </b><b>все</b><b> </b><b>записи</b><b> </b><b>без</b><b> </b><b>атрибута</b><b> e-mail      <br /></b>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADUser -Filter { -not Email -like &quot;*&quot; }     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -или-     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADUser -Filter { Email -notlike &quot;*&quot; }</p>  <p>Эквивалентный LDAP фильтр: (!(email=*))</p>  <p><b>Пример 8: Получаем объекты всех пользователей, которые не входили в систему с 1 января 2007 г.      <br /></b>$date = new-object System.DateTime -ArgumentList @(2007,1,1,0,0,0)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADUser -Filter { -not LastLogon -le $date }</p>  <p>Эквивалентный LDAP фильтр:&#160; (&amp;(lastlogon&lt;=X)(objectClass=user))    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; ## где X &#8211; количество 100-наносекундных интервалов, прошедших с 1 января 1601 г.</p>  <p><b>Пример</b><b> 9: </b><b>Получаем</b><b> </b><b>всех</b><b> </b><b>пользователей</b><b>, </b><b>которые</b><b> </b><b>входили</b><b> </b><b>в</b><b> </b><b>систему</b><b> </b><b>в</b><b> </b><b>последние</b><b> 5 </b><b>дней</b><b>      <br /></b>&#160;&#160;&#160;&#160;&#160;&#160;&#160; $date = (get-date) - (new-timespan -days 5)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADUser -Filter { lastLogon -gt $date }</p>  <p>Эквивалентный LDAP фильтр:&#160; (&amp;(lastLogon&gt;=128812906535515110) (objectClass=user)(!(objectClass=computer)))</p>  <p><b>Пример 10: Получаем все группы безопасности      <br /></b>Следующий запрос возвращает все объекты групп, у которых установлен флаг ADS_GROUP_TYPE_SECURITY_ENABLED (0x80000000 = 2147483648).     <br />Get-ADGroup -filter { groupType -band 0x80000000 }     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -или-     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADGroup -filter { GroupCategory -eq &quot;Security&quot; }</p>  <p>Эквивалентный LDAP фильтр: (&amp;(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483648))</p>  <p><b>Пример 11: Проверяем, является ли пользователь членом группы (с использованием рекурсивного поиска)      <br /></b>Следующий пример запроса использует LDAP_MATCHING_RULE_IN_CHAIN - это OID правила, которое позволяет искать происхождение объекта.</p>  <p>Get-ADUser -Filter { memberOf -RecursiveMatch &quot;CN=Administrators,CN=Builtin,DC=Fabrikam,DC=com&quot; } -SearchBase &quot;CN=Administrator,CN=Users,DC=Fabrikam,DC=com&quot; -SearchScope Base    <br />## ВНИМАНИЕ: Указанная вверху команда возвратит объект пользователя (Administrator в данном случае), если она найдет совпадение рекурсивно в атрибуте memberOf.     <br />-или-     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; $userObj = Get-ADUser Administrator     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; $groupObj = Get-ADUser Administrators     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Get-ADUser -Filter { memberOf -RecursiveMatch $userObj.DistinguishedName } -SearchBase $groupObj.DistinguishedName -SearchScope Base</p>  <p>Эквивалентный LDAP фильтр: (memberof:1.2.840.113556.1.4.1941:=(CN=Administrators,CN=Builtin,DC=Fabrikam,DC=com)))</p>  <p>Cheers!    <br />Swami</p>  <p>--    <br />Swaminathan Pattabiraman [MSFT]     <br />Developer &#8211; Active Directory Powershell Team</p>  <p>&#160;</p>  <p><b>Оригинал: <a title="https://blogs.msdn.com/adpowershell/archive/2009/04/14/active-directory-powershell-advanced-filter-part-ii.aspx" href="https://blogs.msdn.com/adpowershell/archive/2009/04/14/active-directory-powershell-advanced-filter-part-ii.aspx">https://blogs.msdn.com/adpowershell/archive/2009/04/14/active-directory-powershell-advanced-filter-part-ii.aspx</a></b></p>  <p><b>Перевод:</b> <a href="https://lushnikov.spaces.live.com/blog/">Илья Лушников</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Работа с сертификатами в Active Directory PowerShell</title>
      <link>https://docs.microsoft.com/archive/blogs/adpowershell_ru/active-directory-powershell</link>
      <pubDate>Mon, 30 Nov 2009 06:10:26 GMT</pubDate>
      <dc:creator><![CDATA[Andrey Beshkov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/adpowershell_ru/2009/11/30/active-directory-powershell/</guid>
      <description><![CDATA[AD Powershell использует .NET класс X509Certificate для представления сертификата. Давайте...]]></description>
      <content:encoded><![CDATA[<p>AD Powershell использует .NET класс <a href="https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate.aspx">X509Certificate</a> для представления сертификата. Давайте посмотрим, как можно управлять сертификатами пользователя.</p>  <p><b>Обновление пользовательских сертификатов</b></p>  <p>Создаем объект <a href="https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate.aspx">X509Certificate</a>&#160; (или <a href="https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.aspx">X509Certificate2</a>) с помощью файла сертификата.     <br /></p>  <pre class="prettyprint">PS C:\&gt; $cert1 = New-Object System.Security.Cryptography.X509Certificates.X509Certificate &quot;C:\Certs\Test1.cer&quot;
PS C:\&gt; $cert2 = New-Object System.Security.Cryptography.X509Certificates.X509Certificate &quot;C:\Certs\Test2.cer&quot;</pre>

<p></p>

<p>Затем назначаем сертификат учетной записи пользователя во время ее создания. 
  <br /></p>

<pre class="prettyprint">PS C:\&gt; $certs = $cert1,$cert2 #create certificate array
PS C:\&gt; New-ADUser -Name TestUser1 -SamAccountName TestUser1 -Certificates $certs</pre>

<p></p>

<p><b>На</b><b> </b><b>заметку</b>: Параметр Certificates обновляет атрибут LDAP userCertificate.</p>

<p>Также можно назначить сертификаты существующей учетной записи пользователя. 
  <br />PS C:\&gt; Set-ADUser TestUser1 -Certificates @{Replace=$cert1,$cert2}</p>

<p></p>

<p><b>Просмотр пользовательских сертификатов</b></p>

<p>Можно выбрать сертификаты для существующего пользователя. 
  <br />PS C:\&gt; $user1 = Get-ADUser TestUser1 -Properties &quot;Certificates&quot; 

  <br /></p>

<p></p>

<p></p>

<p>И затем просмотреть основные параметры сертификатов: 
  <br /></p>

<pre class="prettyprint">PS C:\&gt; $user1.Certificates | fl * -f

Handle  : 456139856
Issuer  : OU=EFS File Encryption Certificate, L=EFS, CN=Administrator
Subject : OU=EFS File Encryption Certificate, L=EFS, CN=Administrator
...</pre>

<p></p>

<p>Класс <a href="https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.aspx">X509Certificate2</a> используется для получения большей информации о сертификатах. 

  <br /></p>

<pre class="prettyprint">PS C:\&gt; $user1.Certificates | foreach {New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $_} | fl * -f

...
FriendlyName       :
IssuerName         : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter           : 2/24/2109 8:35:26 AM
NotBefore          : 3/20/2009 9:35:26 AM
HasPrivateKey      : False
PrivateKey         :
PublicKey          : System.Security.Cryptography.X509Certificates.PublicKey
RawData            : {48, 130, 3, 139...}
SerialNumber       : &#8230;
SubjectName        : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm : System.Security.Cryptography.Oid
Thumbprint         : &#8230;
Version            : 3
Handle             : 456139856
Issuer             : OU=EFS File Encryption Certificate, L=EFS, CN=Administrator
Subject            : OU=EFS File Encryption Certificate, L=EFS, CN=Administrator</pre>

<p></p>

<p>Также можно назначить существующие сертификаты новому пользователю. 
  <br /></p>

<pre class="prettyprint">PS C:\&gt; $user1 = Get-ADUser TestUser1 -Properties &quot;Certificates&quot;
PS C:\&gt; New-ADUser -Name TestUser2 -SamAccountName TestUser2 -Certificates $user1.Certificates</pre>

<p></p>

<p><b>На заметку</b>: Сертификаты также могут быть применены для учетных записей компьютеров и служб, управление ими производится аналогично.</p>

<p>Надеюсь, это поможет.</p>

<p>Cheers! 
  <br />Ashish</p>

<p>-- 
  <br />Ашлиш Шарма (Ashish Sharma) [MSFT] 

  <br />Developer &#8211; Active Directory Powershell Team</p>

<p>&#160;</p>

<p><b><a href="https://blogs.msdn.com/adpowershell/archive/2009/04/26/working-with-certificates.aspx">Оригинал</a></b></p>

<p><b>Перевод:</b> <a href="https://lushnikov.spaces.live.com/blog/">Илья Лушников</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Обзор Active Directory Web Services</title>
      <link>https://docs.microsoft.com/archive/blogs/adpowershell_ru/active-directory-web-services</link>
      <pubDate>Mon, 30 Nov 2009 06:05:31 GMT</pubDate>
      <dc:creator><![CDATA[Andrey Beshkov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/adpowershell_ru/2009/11/30/active-directory-web-services/</guid>
      <description><![CDATA[&#160;  Active Directory Web Services (ADWS) &#8211; это новый сервис, впервые появившийся в Windows...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>Active Directory Web Services (ADWS) &#8211; это новый сервис, впервые появившийся в Windows Server 2008 R2 и позволяющий удаленно управлять любыми службами каталогов с помощью протоколов WS-*.</p>  <p>ADWS поддерживает следующие протоколы веб-служб:</p>  <ul>   <li><a href="https://www.w3.org/Submission/2006/SUBM-WS-Transfer-20060927/">WS-Transfer</a> </li>    <li><a href="https://msdn.microsoft.com/en-us/library/dd302851(PROT.10).aspx">IMDA (WS-Transfer Extensions for Identity Management Operations for Directory Access)</a> </li>    <li><a href="https://msdn.microsoft.com/en-us/library/dd303513(PROT.10).aspx">WS-Enumeration Directory Services Protocol Extensions</a>, который является набором расширений для <a href="https://www.w3.org/Submission/2006/SUBM-WS-Enumeration-20060315/">WS-Enumeration</a>. </li>    <li><a href="https://msdn.microsoft.com/en-us/library/dd340138(PROT.10).aspx">Custom Actions</a> </li>    <li><a href="https://msdn.microsoft.com/en-us/library/dd340851(PROT.10).aspx">LDAP Generic Control Extension</a>: Собственное расширение для WS-Transfer и WS-Enumeration, которое представляет механизм для передачи в LDAP, контролирующее часть запросов. </li> </ul>  <p>Модель данных, используемая AD Webservice, описана <a href="https://msdn.microsoft.com/en-us/library/dd304395(PROT.10).aspx">здесь</a>.</p>  <p>AD Webservice автоматически устанавливается вместе с ролями AD DS или AD LDS и автоматически запускается, когда выполняется запрос к службам каталогов. Модуль Active Directory для Windows Powershell использует AD Webservice для управления и администрирования Active Directory. Кроме того, поскольку Active Directory Administrative Center (ADAC) выполнен на основе AD PowerShell, он также использует AD Webservice для управления сервером служб каталогов. Эта клиент-серверная модель изображена на диаграмме:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/adpowershell_ru/WindowsLiveWriter/ActiveDirectoryWebServices_111C3/clip_image002_2.jpg" original-url="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/ActiveDirectoryWebServices_111C3/clip_image002_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/adpowershell_ru/WindowsLiveWriter/ActiveDirectoryWebServices_111C3/clip_image002_thumb.jpg" original-url="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/ActiveDirectoryWebServices_111C3/clip_image002_thumb.jpg" width="550" height="380" /></a></p>  <p>Как показано на диаграмме вверху, один экземпляр ADWS управляет всеми экземплярами службы каталогов, работающими на сервере. Среди них могут быть контроллер домена, сервер глобального каталога, моментальные снимки каталогов и экземпляры AD LDS. AD Webservice реализован с помощью WCF и прослушивает зарегистрированный TCP порт <a href="https://www.iana.org/assignments/port-numbers">9389</a>. Эта служба работает с привилегиями Local System. </p>  <p>Не переключайтесь с нашей волны, и получайте больше информации о AD Webservice. </p>  <p>Cheers,    <br />Манас Сингх (Manas Singh)</p>  <p>&#160;</p>  <p><b>Оригинал: <a title="https://blogs.msdn.com/adpowershell/archive/2009/04/06/active-directory-web-services-overview.aspx" href="https://blogs.msdn.com/adpowershell/archive/2009/04/06/active-directory-web-services-overview.aspx">https://blogs.msdn.com/adpowershell/archive/2009/04/06/active-directory-web-services-overview.aspx</a></b></p>  <p><b>Перевод:</b> <a href="https://lushnikov.spaces.live.com/blog/">Илья Лушников</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Как создать функцию для подтверждения наличия объекта AD (Test-XADObject)</title>
      <link>https://docs.microsoft.com/archive/blogs/adpowershell_ru/8</link>
      <pubDate>Mon, 30 Nov 2009 06:04:24 GMT</pubDate>
      <dc:creator><![CDATA[Andrey Beshkov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/adpowershell_ru/2009/11/30/8/</guid>
      <description><![CDATA[В этом посте я покажу вам простую, но очень нужную функцию, которая может понадобиться во многих...]]></description>
      <content:encoded><![CDATA[<p>В этом посте я покажу вам простую, но очень нужную функцию, которая может понадобиться во многих скриптах. Эта функция возвращает истину, если заданный объект AD действительно существует. <strong>Параметр Identity может принимать значение любого типа ADObject. Это означает, что он может принимать те же значения, что и командлеты вида *-ADObject.</strong></p>  <pre class="prettyprint">function Test-XADObject() {
	[CmdletBinding(ConfirmImpact=&quot;Low&quot;)]

	Param (

		[Parameter(Mandatory=$true,
			Position=0,
			ValueFromPipeline=$true,
			HelpMessage=&quot;Identity of the AD object to verify if exists or not.&quot;
			)]
		[Object] $Identity
	)
	
	trap [Exception] {
		return $false
	}

	$auxObject = Get-ADObject -Identity $Identity

	return $true

}</pre>

<p></p>

<p>В будущих сообщениях я покажу примеры скриптов, которые многократно используют эту функцию. Не переключайтесь с нашей волны.</p>

<p>Cheers,</p>

<p>Джайро Кадена (Jairo Cadena)</p>

<p>Active Directory</p>

<p>&#160;</p>

<p><b><a href="https://blogs.msdn.com/adpowershell/archive/2009/05/05/how-to-create-a-function-to-validate-the-existence-of-an-ad-object-test-xadobject.aspx">Оригинал</a></b></p>

<p><b>Перевод:</b> <a href="https://lushnikov.spaces.live.com/blog/">Илья Лушников</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Как просмотреть удаленные объекты Active Directory перед восстановлением</title>
      <link>https://docs.microsoft.com/archive/blogs/adpowershell_ru/17</link>
      <pubDate>Mon, 30 Nov 2009 06:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Andrey Beshkov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/adpowershell_ru/2009/11/30/17/</guid>
      <description><![CDATA[Случайные удаления объектов в Active Directory могут происходить по многим причинам. Администратор...]]></description>
      <content:encoded><![CDATA[<P>Случайные удаления объектов в Active Directory могут происходить по многим причинам. Администратор может непредумышленно удалить один объект пользователя или, нечаянно нажав не ту клавишу на клавиатуре, удалить целое дерево OU. Некорректный скрипт может удалить несколько объектов в разных местах иерархии AD. В Active Directory, когда удаленные объекты перемещаются в контейнер для удаленных объектов, они теряют свое расположение в иерархии (т.к. DN уже изменено для обеспечения уникальности). <BR>Когда происходит случайное удаление, важно внимательно проанализировать произошедшее перед разработкой стратегии восстановления. В этом случае необходимо определить:</P>
<OL>
<LI>Что было удалено? </LI>
<LI>Когда произошло удаление? </LI>
<LI>Где (на каком контроллере домена) произошло удаление? </LI></OL>
<P>После выполнения анализа, когда определены объекты, которые необходимо восстановить, – вы можете выбрать предпочтительный метод восстановления. <BR>Традиционное восстановление предполагает, что есть недавняя резервная копия состояния системы (system state) и необходимо произвести авторитетное восстановление удаленных объектов. Но для лесов с функциональным уровнем Windows Server 2008 R2 есть новая функция Корзина (Recycle Bin), которая делает восстановление одиночных объектов очень простым. С момента включения этой функции, все атрибуты сохраняются в объекте при его удалении. И когда объект восстанавливается с помощью командлета Restore-ADObject – объект восстанавливается полностью. Таким образом, если объект пользователя был случайно удален и восстановлен с помощью Restore-ADObject – все прямые и обратные ссылки на объект пользователя также восстанавливаются – членство в группах, менеджер, ManagedObjects, DirectReports и т.д., также, как и атрибуты, не являющиеся ссылками. <BR>Этот пост описывает фазу анализа: определение объектов, которые необходимо восстановить. <BR>Необходимо определить способы, которыми вы можете анализировать произошедшее удаление. Три основных подхода таковы: </P>
<OL>
<LI>Если были случайно удалены несколько объектов, обычно все такие объекты удаляются за короткий промежуток времени. Это может быть действие непрофессиональных сотрудников во время установки приложения или некорректный скрипт, который удалил не только те объекты, которые требовалось, но и другие тоже, или неуклюжий администратор, удаливший целое дерево OU, или даже действие злоумышленника – в любом случае, обычно такие удаления происходят за несколько секунд или минут. </LI>
<LI>При случайном удалении нескольких объектов, обычно все эти объекты удаляются с одного контроллера домена. </LI>
<LI>Данные в AD расположены иерархически, графический интерфейс тоже иерархичен – при удалении более, чем одного объекта – обычно удаляется целая иерархическая структура. </LI></OL>
<P>В виду отсутствия хорошего графического интерфейса, позволяющего просмотреть содержимое корзины AD, предлагаю вам пример скрипта, который может просмотреть содержимое контейнера удаленных объектов и дать информацию по трем категориям, представленным выше. <BR>Скрипт читает контейнер удаленных объектов, конструируя иерархию удаленных объектов (организационные подразделения и контейнеры). Далее, он считывает метаданные о репликации этих контейнеров для определения, когда и где объект был удален. <BR>Посмотрите на схему ниже. Пять деревьев организационных подразделений были удалены. Четыре из них располагались в иерархии непосредственно ниже уровня домена и одно – внутри контейнера Users. Для каждого из удаленных OU, скрипт точно показывает, когда произошло удаление (а не изменение атрибута whenChanged) и где оно произошло. <BR><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image001_2.gif" original-url="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image001_2.gif" mce_href="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image001_2.gif"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image001 border=0 alt=clip_image001 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image001_thumb.gif" original-url="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image001_thumb.gif" width=640 height=343 mce_src="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image001_thumb.gif"></A> <BR>Далее вывод этой команды можно передать по конвейеру командлету Where-Object и отфильтровать по нужному критерию – когда или где произошло удаление.</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image002_2.gif" original-url="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image002_2.gif" mce_href="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image002_2.gif"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image002 border=0 alt=clip_image002 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image002_thumb.gif" original-url="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image002_thumb.gif" width=640 height=434 mce_src="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image002_thumb.gif"></A></P>
<P>Можно также отсортировать по полю WhenDeleted – хотя это и нарушает вид дерева …</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image003_2.gif" original-url="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image003_2.gif" mce_href="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image003_2.gif"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image003 border=0 alt=clip_image003 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image003_thumb.gif" original-url="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image003_thumb.gif" width=640 height=347 mce_src="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image003_thumb.gif"></A></P>
<P><STRONG>Восстановление дерева</STRONG> <BR>Восстановление для удаленных деревьев не так просто, как для отдельных объектов. Когда объекты удаляются, они перемещаются в контейнер Deleted Objects с плоской иерархией. Таким образом, удаленное дерево теряет свою иерархию. Скрипт Restore-ADTree делает восстановление дерева более простым. Можно передать в скрипт DN или GUID корня дерева и он рекурсивно восстановит все нижележащие объекты. Скрипт Restore-ADTree можно использовать на удаленных OU, только если ВСЕ удаленные дочерние объекты этого OU (ныне расположенные в контейнере для удаленных объетов) должны быть восстановлены. <BR>При использовании с параметром -LeafObjectInfo, этот скрипт (Get-ADDeletedContainers) также показывает информацию о подчиненных (subordinates) каждого контейнера. Поле 'subordinates' показывает количество удаленных объетов, непосредственно расположенных ниже удаленного OU и максимальный промежуток между временем удаления подчиненных объектов. Итак, пусть свежесозданное OU содержало 5 объектов пользователей. Один из них был удален 3 дня назад (правильное умышленное удаление), а сегодня OU и 4 дочерних объекта были удалены случайно – Поле “subordinates” (подчиненные) для данного OU покажет 5 (3.00:00:00).</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image004_2.gif" original-url="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image004_2.gif" mce_href="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image004_2.gif"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image004 border=0 alt=clip_image004 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image004_thumb.gif" original-url="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image004_thumb.gif" width=640 height=356 mce_src="https://blogs.technet.com/blogfiles/adpowershell_ru/WindowsLiveWriter/be43364a30fa_13640/clip_image004_thumb.gif"></A></P>
<P>С опцией LeafObjectsInfo скрипт будет выполняться дольше. Эта опция поможет проанализировать, нужно ли использовать для удаленных OU скрипт Restore-ADTree. Если время удаления подчиненных объектов различается более, чем на несколько минут – нужно проанализировать, все ли подчиненные объекты являются кандидатами на восстановление. <BR>Таким образом, перед использованием Restore-ADObject или Restore-ADTree или даже если вы планируете использовать авторитетное восстановление (ввиду невозможности использования корзины) – вы можете использовать этот скрипт для лучшего просмотра и анализа содержимого контейнера удаленных объектов. <BR>Использование: Укажите диском AD PowerShell на вашу AD или перейдите на диск AD: и используйте скрипт, как показано в примерах. Не требуется включать корзину, чтобы скрипт работал.</P>
<OL>
<LI>PS CONTOSO:\&gt; Get-ADDeletedContainers.ps1 | ft DisplayName,WhenDeleted,WhereDeleted </LI>
<LI>PS CONTOSO:\&gt; Get-ADDeletedContainers.ps1 | ft DisplayName,ObjectClass,ObjectGUID,WhenDeleted,WhereDeleted </LI>
<LI>PS CONTOSO:\&gt; Get-ADDeletedContainers.ps1 -LeafObjectsInfo | ft DisplayName,Subordinates </LI>
<LI>PS CONTOSO:\&gt; Get-ADDeletedContainers.ps1 | where {$_.WhenDeleted -gt [DateTime]::Parse("5/25/2009 9:40:00 AM")}|ft DisplayName,WhenDeleted,WhereDeleted </LI>
<LI>PS CONTOSO:\&gt; Get-ADDeletedContainers.ps1 | where {$_.WhereDeleted -like "CONTOSO-DC2*"}|ft DisplayName,WhenDeleted,WhereDeleted </LI>
<LI>PS CONTOSO:\&gt; Get-ADDeletedContainers.ps1 | where {$_.WhenDeleted -gt [DateTime]::Parse("5/25/2009") -and $_.WhereDeleted -like "CONTOSO-DC2*"}|ft DisplayName,WhenDeleted,WhereDeleted </LI></OL>
<P>ps: Защитите ваши OU от случайного удаления, для предотвращения подобного в дальнейшем. Чтобы узнать как – сделайте поиск по фразе "Protect an Organizational Unit from Accidental Deletion" <BR></P>
<P>Наслаждайтесь! <BR>Душянт Гилл (Dushyant Gill) <BR>Program Manager, Directory Services</P>
<P><B>Присоединенный файл: </B><A href="https://blogs.msdn.com/adpowershell/attachment/9680070.ashx" mce_href="https://blogs.msdn.com/adpowershell/attachment/9680070.ashx">Get-ADDeletedContainers ps1.txt</A></P>
<P><STRONG><A href="https://blogs.msdn.com/adpowershell/archive/2009/06/01/inspecting-deleted-objects-before-restore.aspx" mce_href="https://blogs.msdn.com/adpowershell/archive/2009/06/01/inspecting-deleted-objects-before-restore.aspx">Оригинал</A></STRONG></P>
<P><STRONG>Перевод:</STRONG> <A href="https://lushnikov.spaces.live.com/blog/" mce_href="https://lushnikov.spaces.live.com/blog/">Илья Лушников</A></P>]]></content:encoded>
    </item>
    <item>
      <title>Используем Active Directory PowerShell для управления сайтами – Часть 1 (New-XADSite)</title>
      <link>https://docs.microsoft.com/archive/blogs/adpowershell_ru/active-directory-powershell-3</link>
      <pubDate>Mon, 30 Nov 2009 05:58:48 GMT</pubDate>
      <dc:creator><![CDATA[Andrey Beshkov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/adpowershell_ru/2009/11/30/active-directory-powershell-3/</guid>
      <description><![CDATA[&#160;  На этот раз я хочу представить вам решение для управления сайтами в лесу Active Directory...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>На этот раз я хочу представить вам решение для управления сайтами в лесу Active Directory (AD), расширяя Active Directory PowerShell путем реализации функций, позволяющих создавать, искать, обновлять (изменять связь сайтов, переименовывать) и удалять сайты.</p>  <p>Прежде всего, необходимо понять, для чего создаются сайты AD. Можно сказать, что сайт AD представлен тремя объектами служб каталогов и ссылками в атрибутах других объектов (например, объекта Site Link &#8211; связь сайтов). Если точнее, сайт AD состоит из:</p>  <p>1. Объекта <b>site</b> (objectClass=site), который в иерархии расположен ниже объекта sites в разделе конфигурации.</p>  <p>2. Объекта <b>NTDS</b><b> </b><b>site</b><b> </b><b>settings</b> (objectClass=nTDSSiteSettings), который является дочерним объектом объекта site</p>  <p>3. Объекта <b>servers containers</b> (objectClass=serversContainer), который является дочерним объектом объекта site</p>  <p>4. Значения в многозначном атрибуте <b>siteList</b> объекта <b>site</b><b> </b><b>link</b>, представляющего связь сайтов.</p>  <p>В первую очередь, необходимо знать различительное имя (DN &#8211; distinguished name) контейнера sites. Этот объект имеет относительное различительное имя (RDN - relative distinguished name) Sites и расположен непосредственно ниже контекста именования конфигурации. Итак, получить DN контейнера sites можно следующим образом:</p>  <pre class="prettyprint">$configNCDN = (Get-ADRootDSE).ConfigurationNamingContext

$sitesContainerDN = (&quot;CN=Sites,&quot; + $configNCDN)</pre>

<p></p>

<p>
  <br />Новый объект site станет объектом внутри контейнера sites:</p>

<pre class="prettyprint"> $newSiteDN = (&quot;CN=&quot; + $newSiteName +&quot;,&quot; + $sitesContainerDN)</pre>

<p></p>

<p>Для создания объектов Site, NTDS Site Settings и Servers внутри контейнера Sites, можно использовать командлет New-ADObject:</p>

<pre class="prettyprint">New-ADObject -Name $newSiteName -Path $sitesContainerDN -Type site
New-ADObject -Name &quot;NTDS Site Settings&quot; -Path $newSiteDN -Type nTDSSiteSettings
New-ADObject -Name &quot;Servers&quot; -Path $newSiteDN -Type serversContainer</pre>

<p></p>

<p>Далее, для добавления сайта в связь сайтов необходима ссылка на объект сайта. Ссылки на объект сайта (site link objects) расположены ниже объекта внутрисайтового транспорта (inter-site transport object) (IP или SMTP). Например, для связи сайтов DEFAULTIPSITELINK контейнер связей сайтов будет расположен так:</p>

<p>$siteLinkContainer = (&quot;CN=DEFAULTIPSITELINK,CN=IP,CN=Inter-Site Transports,CN=Sites,&quot; + $configNCDN)</p>

<p>Последний шаг &#8211; это добавление сайта к связи сайтов путем включения имени сайта в атрибут siteList в соответствующем объекте связи сайтов. Для изменения атрибута siteList в объекте связи сайтов, необходимо сначала получить объект связи сайтов с атрибутом siteList с помощью командлета Get-ADObject (для создания экземпляра), а затем изменить его с помощью командлета Set-ADObject:</p>

<pre class="prettyprint">$siteLink = Get-ADObject $siteLinkContainer -Properties siteList
$siteLink.siteList.Add($newSiteDN)
Set-ADObject -Instance $siteLink</pre>

<p></p>

<p></p>

<p>Вот так оно будет выглядеть.</p>

<p>Я создал функцию по имени New-XADSite, которая принимает имя сайта и имя объекта связи сайтов (поддерживается протокол IP, но для поддержки SMTP требуется совсем немного изменений). Она также содержит проверки особых случаев, которые обеспечивают более надежную работу для использования функции в лесах AD. В будущем, я покажу вам, как в AD PowerShell создать функции для получения имен сайтов в лесу, перемещения сайта в другую связь сайтов, переименования сайта и удаления сайта из леса AD. Обратите внимание, что скрипт использует функцию Test-XADObject, которая представлена в предыдущем посте.</p>

<pre class="prettyprint">   1:  function New-XADSite() {
   2:     [CmdletBinding(ConfirmImpact=&quot;Low&quot;)]
   3:     Param (
   4:        [Parameter(Mandatory=$true,
   5:                   Position=0,
   6:                   ValueFromPipeline=$true,
   7:                   HelpMessage=&quot;Идентификатор создаваемого сайта. В  этой версии скрипта, имя &#8211; единственный допустимый идентификатор сайта.&quot;
   8:                  )]
   9:        [Object] $Identity,
  10:        [Parameter(Mandatory=$false,
  11:                   Position=1,
  12:                   ValueFromPipeline=$false,
  13:                   HelpMessage=&quot;Имя объекта связи сайтов, к которому будет относиться сайт.&quot;
  14:                  )]
  15:        [Object] $SiteLinkName
  16:     )
  17:   
  18:     BEGIN {
  19:   
  20:     }
  21:   
  22:     PROCESS {
  23:   
  24:        # В этой версии скрипта, имя сайта &#8211; единственный поддерживаемый идентификатор
  25:        # Измените строку ниже для поддержки других идентификаторов
  26:        $newSiteName = $Identity
  27:   
  28:        if ([String]::IsNullOrEmpty($newSiteName)) {
  29:           throw New-Object System.Management.Automation.PSArgumentException(&quot;Имя сайта не может быть пустым. Пожалуйста, укажите правильное имя сайта.&quot;)
  30:        }
  31:   
  32:        if ($SiteLinkName -eq $null) {
  33:           $SiteLinkName = &quot;DEFAULTIPSITELINK&quot;
  34:        }
  35:   
  36:        # Получаем DN раздела конфигурации, контейнера sites и создаем DN нового сайта
  37:        $configNCDN = (Get-ADRootDSE).ConfigurationNamingContext
  38:        $sitesContainerDN = (&quot;CN=Sites,&quot; + $configNCDN)
  39:        $newSiteDN = (&quot;CN=&quot; + $newSiteName +&quot;,&quot; + $sitesContainerDN)
  40:   
  41:        $siteLinkContainerDN = (&quot;CN=&quot; + $SiteLinkName + &quot;,CN=IP,CN=Inter-Site Transports,CN=Sites,&quot; + $configNCDN)
  42:        # Проверяем, существует ли связь сайтов
  43:        $siteLinkExists = Test-XADObject -Identity $siteLinkContainerDN
  44:        if ($siteLinkExists -eq $false) {
  45:           throw New-Object System.Management.Automation.RuntimeException(&quot;Указанная связь сайтов не существует. Пожалуйста, укажите имя существующей связи сайтов.&quot;)
  46:        }
  47:   
  48:        # Проверяем, существует ли сайт
  49:        $siteExists = Test-XADObject -Identity $newSiteDN
  50:        if ($siteExists) {
  51:           throw New-Object System.Management.Automation.RuntimeException(&quot;Сайт с таким именем уже существует. Для создания нового сайта, укажите имя сайта, которое не используется.&quot;)
  52:        }
  53:        else {
  54:           $siteObjectCreated = $false
  55:   
  56:           trap [Exception] {
  57:              # Ошибки выводим в конвейер
  58:              Write-Host $_
  59:   
  60:              # Убираем объекты, созданные для совместимости
  61:              if ($siteObjectCreated -eq $true) {
  62:                 Remove-ADObject -Identity $newSiteDN -Recursive -Confirm:$false
  63:              }
  64:   
  65:              # Выдаем новое исключение, куда включаем созданные исключения в качестве внутренних исключений
  66:              throw New-Object System.Management.Automation.RuntimeException(&quot;При создании сайта возникло исключение. Подробности см. во внутренних исключениях.&quot;, $_.Exception)
  67:           }
  68:   
  69:           # Создаем объекты сайта, Параметры NTDS и объекты серверов
  70:           New-ADObject -Name $newSiteName -Path $sitesContainerDN -Type site
  71:           $siteObjectCreated = $true
  72:           New-ADObject -Name &quot;NTDS Site Settings&quot; -Path $newSiteDN -Type nTDSSiteSettings
  73:           New-ADObject -Name &quot;Servers&quot; -Path $newSiteDN -Type serversContainer
  74:   
  75:           $siteLink = Get-ADObject $siteLinkContainerDN -Properties siteList
  76:           $numberOfSitesInSiteLink = $siteLink.siteList.Add($newSiteDN)
  77:           Set-ADObject -Instance $siteLink
  78:   
  79:           # Возвращает объекты службы каталогов, которые создают сайт AD
  80:           Get-ADObject -Identity $newSiteDN
  81:           Get-ADObject -Identity (&quot;CN=NTDS Site Settings,&quot; + $newSiteDN)
  82:           Get-ADObject -Identity (&quot;CN=Servers,&quot; + $newSiteDN)
  83:        }
  84:   
  85:      }
  86:   
  87:      END {
  88:   
  89:      }
  90:  }</pre>

<p></p>

<p></p>

<p>Наслаждайтесь,</p>

<p>Джайро Кадена (Jairo Cadena)</p>

<p>Active Directory</p>

<p>&#160;</p>

<p><strong><a href="https://blogs.msdn.com/adpowershell/archive/2009/05/05/active-directory-powershell-to-manage-sites-part-1-new-xadsite.aspx">Оригинал</a></strong></p>

<p><strong>Перевод:</strong> <a href="https://lushnikov.spaces.live.com/blog/">Илья Лушников</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Используем Active Directory PowerShell для управления контроллерами домена на Windows Server 2003/2008</title>
      <link>https://docs.microsoft.com/archive/blogs/adpowershell_ru/active-directory-powershell-4</link>
      <pubDate>Mon, 30 Nov 2009 05:56:34 GMT</pubDate>
      <dc:creator><![CDATA[Andrey Beshkov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/adpowershell_ru/2009/11/30/active-directory-powershell-4/</guid>
      <description><![CDATA[Многие читатели интересовались возможностью управлять контроллерами на ранних ОС (Windows Server...]]></description>
      <content:encoded><![CDATA[<p>Многие читатели интересовались возможностью управлять контроллерами на ранних ОС (Windows Server 2003/2008) с помощью ADPowershell. Единственным, чего для этого не хватало, были возможности Active Directory Web Service (<a href="https://blogs.msdn.com/adpowershell/archive/2009/04/06/active-directory-web-services-overview.aspx">описание здесь</a>). Итак, представляем вам бета-версию ADWS для контроллеров домена на ранних версиях ОС. С помощью этой бета-версии, вы можете управлять существующими лесами Active Directory с помощью ADPowershell. Далее опишем шаги, необходимые для участия в бета-тестировании:</p>  <ol>   <li>Заходим на сайт <a href="https://connect.microsoft.com">https://connect.microsoft.com</a> и вводим код приглашения <b>ADWS-FDBT-CVJK</b> на главной странице. </li>    <li>Входим под своим live/hotmail ID </li>    <li>Сведения о загрузке Active Directory Management Gateway Service и инструкции доступны на сайте MS Connect - <a href="https://connect.microsoft.com/ADWS/">https://connect.microsoft.com/ADWS/</a> </li> </ol>  <p>Прим. пер. 1: в настоящее время уже выпущена финальная версия Active Directory Management Gateway Service: <a href="https://www.microsoft.com/downloads/details.aspx?displaylang=ru&amp;FamilyID=008940c6-0296-4597-be3e-1d24c1cf0dda">Ссылка для загрузки</a>. Таким образом, необходимости в использовании сайта connect.microsoft.com для загрузки этого продукта сейчас нет. Подробнее об установке читайте в документации - <a href="https://www.microsoft.com/downloads/details.aspx?displaylang=ru&amp;FamilyID=008940c6-0296-4597-be3e-1d24c1cf0dda">здесь.</a></p>  <p>Прим. пер. 2: хотя ADWS и устанавливается на Windows Server 2003/2008, для установки командлетов ADPowerShell потребуется компьютер на Windows 7 или Windows Server 2008 R2.</p>  <p>Обратите внимание, что есть секция для обратной связи, которую нужно использовать :) Пожалуйста, установите эту бету и дайте нам обратную связь. </p>  <p>С благодарностью,</p>  <p>Али</p>  <p>---</p>  <p>Мудассир Али (Mudassir Ali)    <br />Software Development Engineer in Test - Active Directory Powershell Team</p>  <p>&#160;</p>  <p><strong><a href="https://blogs.msdn.com/adpowershell/archive/2009/06/23/use-active-directory-powershell-to-manage-windows-2003-2008-dcs.aspx">Оригинал</a></strong></p>  <p><strong>Перевод: </strong><a href="https://lushnikov.spaces.live.com/blog/">Илья Лушников</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Active Directory Powershell – Расширенный фильтр</title>
      <link>https://docs.microsoft.com/archive/blogs/adpowershell_ru/active-directory-powershell-5</link>
      <pubDate>Mon, 30 Nov 2009 05:44:09 GMT</pubDate>
      <dc:creator><![CDATA[Andrey Beshkov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/adpowershell_ru/2009/11/30/active-directory-powershell-5/</guid>
      <description><![CDATA[Чтение/написание LDAP-фильтров вызывает у вас затруднения? Вы бы хотели писать LDAP-фильтры в более...]]></description>
      <content:encoded><![CDATA[<p>Чтение/написание LDAP-фильтров вызывает у вас затруднения? Вы бы хотели писать LDAP-фильтры в более естественном виде? Вы бы хотели, чтобы парсер LDAP-фильтров указывал вам на ошибочный символ, вместо показа расплывчатого сообщения об ошибке LDAP_FILTER_ERROR (87)? Вам непонятно, как указывать OID в фильтре? Если хотя бы на один из этих вопросов вы ответили &#171;да&#187;, имеет смысл дочитать этот пост до конца...</p>  <p>Active Directory Module for Windows Powershell представляет новую мощную замену LDAP-фильтрам; мы называем это &#171;Расширенный фильтр&#187; (&#171;The Advanced Filter&#187;). Расширенный фильтр поддерживается с помощью параметра <b>&#8211;</b><b>Filter</b><b> </b>во всех командлетах вида Get-AD*. </p>  <p>Так что же такого &#171;расширенного&#187; в этом фильтре?</p>  <p><b>1.</b><b> </b><b>Простота написания</b> &#8211; Новый фильтр удобен в чтении и написании. Он использует <a href="https://en.wikipedia.org/wiki/Infix_notation">инфиксную</a> запись (например: { GivenName &#8211;eq &#8220;John&#8221; &#8211;and SurName &#8211;eq &#8220;Smith&#8221; } ), которая более удобна по сравнению с <a href="https://en.wikipedia.org/wiki/Polish_notation">префиксной записью</a> (например: (&amp;(givenName=john)(sn=smith)) ). </p>  <p>Новый синтаксис фильтров аналогичен языку выражений PowerShell (Powershell Expression Language) и используется в параметре FilterScript командлета Where-Object. Так что для пользователей Powershell становится просто делать запросы к AD без знаний в области Ldap-фильтрации. Большинство используемых операторов стандартны для Powershell (например: -eq, -like, -band и т.п.). Также представлены несколько новых операторов &#8211; таких, как -recursivematch и т.п.</p>  <p><b>2.</b><b> </b><b>Улучшенные сообщения об ошибках парсинга фильтра</b> &#8211; Давайте попробуем задать в параметре &#8211;Filter некорректную строку запроса. </p>  <div class="mycode">   <div class="mycode">     <pre class="prettyprint">PS D:\Users\Administrator&gt; Get-ADUser -Filter { Name -isequal &quot;Administrator&quot; }
Get-ADUser : Error parsing query: ' Name -isequal &quot;Administrator&quot; ' Error Message: 'Operator Not supported: -isequal' at position: '7'.
At line:1 char:11
+ Get-ADUser &lt;&lt;&lt;&lt;  -Filter { Name -isequal &quot;Administrator&quot; }
+ CategoryInfo          : ParserError: (:) [Get-ADUser], ADFilterParsingException
+ FullyQualifiedErrorId : Error parsing query: ' Name -isequal &quot;Administrator&quot; ' Error Message: 'Operator Not supported: -isequal' at position: '7'., Microsoft.ActiveDirectory.Management.Commands.GetADUser</pre>

    <p></p>
  </div>
</div>

<p>Таким образом, сообщение об ошибке для парсера расширенных фильтров корректно указывает, что оператор &#8220;-isequal&#8221; не поддерживается. Возьмем другой пример &#8211; не включим строковое значение в кавычки. </p>

<pre class="prettyprint">PS D:\Users\Administrator&gt; Get-ADUser -Filter { Name -like Administrator }
Get-ADUser : Error parsing query: ' Name -like Administrator ' Error Message: 'syntax error' at position: '13'.
At line:1 char:11
+ Get-ADUser &lt;&lt;&lt;&lt;  -Filter { Name -like Administrator }
+ CategoryInfo          : ParserError: (:) [Get-ADUser], ADFilterParsingException
+ FullyQualifiedErrorId : Error parsing query: ' Name -like Administrator' Error Message: 'syntax error' at position: '13'., Microsoft.ActiveDirecto  ry.Management.Commands.GetADUser</pre>

<p></p>

<p>Здесь сообщение об ошибке для парсера расширенных фильтров указывает на позицию в строке, где синтаксис некорректен. Корректным будет такой фильтр: -Filter { Name -like &quot;Administrator&quot; }</p>

<p><b>3.</b><b> </b><b>Внутри фильтра можно использовать переменные </b><b>Powershell</b><b>!</b> &#8211; Расширенный Фильтр позволяет получать доступ к переменным Powershell внутри фильтра. Вы можете также получать доступ к свойствам переменных Powershell внутри фильтра. </p>

<pre class="prettyprint">PS D:\&gt; $JohnSmith = Get-ADUser JohnSmith
PS D:\&gt; Get-ADUser -Filter { manager -eq $JohnSmith.DistinguishedName }  </pre>

<pre class="prettyprint">## Получаем все учетные записи пользователей, где менеджер - JohnSmith</pre>

<p></p>

<p><b>Внимание:</b> Расширенный Фильтр не поддерживает индексатор (например: $a[0]) и вызов функции (например: $a.ToString()) внутри фильтра.</p>

<p><b>4.</b><b> </b><b>Автоматическое кодирование в </b><b>Ldap</b> &#8211; Ldap-кодирование значений (таких, как байты и т.д.) автоматически обрабатывается конвертерами Расширенных Фильтров. Например, если вы хотите найти пользователей по параметру &#171;Время входа&#187;, не нужно задумываться о кодировании байтового значения Logon Hour в строковый формат LDAP. Расширенный Фильтр сделает это сам. Вы можете просто указать массив байт внутри Расширенного Фильтра.</p>

<pre class="prettyprint">PS D:\&gt; $u = Get-ADUser Administrator -Properties *
PS D:\&gt; $byt  = $u.logonHours
PS D:\&gt; $byt.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Byte[]                                   System.Array</pre>

<p></p>

<p><b>С помощью Расширенного Фильтра:</b></p>

<pre class="prettyprint">PS D:\&gt; Get-ADUser -Filter { logonHours -eq $byt }</pre>

<p></p>

<p><b>С</b><b> </b><b>помощью</b><b> LDAP-</b><b>фильтра</b><b>: </b></p>

<pre class="prettyprint">## Каким-либо образом Ldap-кодируем byte[] в строку и помещаем ее в фильтр.
PS D:\&gt; Get-ADUser -LdapFilter &quot;(logonHours=\00\0B\FF\FF\FF\1F\FB\FF\AF\FF\FF\FC\FF\0A\FF\FF\FF\FF\FF\FF\1B)&quot;</pre>

<p><b>5.</b><b> </b><b>Поддержка значений в расширенном формате</b> &#8211; Расширенный Фильтр поддерживает значения в расширенном формате .NET объектов и подходящих строковых форматах. Он также делает необходимое преобразование в формат поиска Ldap. Например:</p>

<pre class="prettyprint">PS D:\&gt; Get-ADGroup -Filter {isCriticalSystemObject -eq $true } ## Получаем все системные критические группы

PS D:\&gt; $SixtyDaysAgo = (Get-Date).Subtract((New-TimeSpan -Days 60))
PS D:\&gt; Get-ADUser -Filter { lastLogonTimeStamp -notlike &quot;*&quot; -or  lastLogonTimeStamp -le $ SixtyDaysAgo }  </pre>

<pre class="prettyprint">## Получаем объекты всех пользователей, которые не входили в систему за последние 60 дней

PS D:\&gt; Get-ADGroup -filter { groupType -band 0x80000000 } ## Получаем все группы безопасности, представляя целое значение в шестнадцатеричном формате.
                                              ## Аналогичный запрос LDAP выглядел бы так: 
                                              ## (&amp;(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483648)) </pre>

<p>Вот список поддерживаемых типов .NET:</p>

<ul>
  <li>System.Guid, System.Security.Cryptography.X509Certificates.X509Certificate, System.Security.Principal.SecurityIdentifier, System.DirectoryServices.ActiveDirectorySecurity </li>
</ul>

<p>- Значения этих типов конвертируются в byte[] и затем кодируются в строку поиска Ldap.</p>

<ul>
  <li>System.DateTime </li>
</ul>

<p>- Значения этого типа конвертируются в соответствующий формат даты Ldap - Large Integer/Interval, Generalized Time, UTC Coded Time.</p>

<ul>
  <li>System.String, System.Int32, System.Int64, System.UInt32, System.UInt64, System.Boolean, System.Byte, System.SByte, System.Int16, System.UInt16, System.Char, System.Single, System.Single, System.Double, System.Decimal </li>
</ul>

<p>- Значения этих типов конвертируются в строковый формат.</p>

<p><b>На заметку:</b> Все командлеты вида Get-AD* также поддерживают Ldap-фильтрацию через параметр <b>-</b><b>LdapFilter</b>.</p>

<p>Cheers! 
  <br />Swami</p>

<p>-- 
  <br />Swaminathan Pattabiraman [MSFT] 

  <br />Developer &#8211; Active Directory Powershell Team</p>

<p>Filed under: <a href="https://blogs.msdn.com/adpowershell/archive/tags/Filter/default.aspx">Filter</a></p>

<p><b>Оригинал: <a title="https://blogs.msdn.com/adpowershell/archive/2009/04/03/active-directory-powershell-advanced-filter.aspx" href="https://blogs.msdn.com/adpowershell/archive/2009/04/03/active-directory-powershell-advanced-filter.aspx">https://blogs.msdn.com/adpowershell/archive/2009/04/03/active-directory-powershell-advanced-filter.aspx</a></b></p>

<p><b>Перевод:</b> <a href="https://lushnikov.spaces.live.com/blog/">Илья Лушников</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Дополнение по Tab имен атрибутов LDAP внутри Расширенных фильтров</title>
      <link>https://docs.microsoft.com/archive/blogs/adpowershell_ru/tab-ldap-108</link>
      <pubDate>Mon, 30 Nov 2009 03:16:35 GMT</pubDate>
      <dc:creator><![CDATA[Andrey Beshkov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/adpowershell_ru/2009/11/30/tab-ldap-108/</guid>
      <description><![CDATA[В своем предыдщем посте о Расширенных фильтрах я показал, как использовать переменные Powershell...]]></description>
      <content:encoded><![CDATA[<p><b></b></p>  <p>В своем предыдщем посте о <a href="https://blogs.technet.com/adpowershell_ru/archive/2009/11/30/3297140.aspx" target="_blank">Расширенных фильтрах</a> я показал, как использовать переменные Powershell для представления значений внутри фильтров. Например:</p>  <p>PS D:\&gt; $JohnSmith = Get-ADUser JohnSmith</p>  <p>PS D:\&gt; Get-ADUser -Filter { manager -eq $JohnSmith.DistinguishedName }</p>  <p>## Получает все учетные записи пользователей, где менеджером указан JohnSmith</p>  <p>Но я не сказал, что переменные Powershell также могут быть использованы для представления имен свойств. Например:</p>  <p>PS D:\&gt; $SamAccountNameProperty = &quot;SamAccountName&quot;</p>  <p>PS D:\&gt; Get-ADUser -Filter { $SamAccountNameProperty -eq &quot;JohnSmith&quot; }</p>  <p>## Получает объекты пользователей, где samAccountName = JohnSmith</p>  <p>Вы можете спросить: что такого интересного в этой возможности? </p>  <p>А теперь давайте представим, что у вас есть переменная PowerShell, которая содержит все имена атрибутов LDAP и имена свойств объектов AD PowerShell, представленные как свойства .NET, и вы бы хотели использовать эти переменные внутри фильтра. Когда в интерактивном режиме вы вводите строку фильтра в консоли Powershell, вы можете использовать дополнение по Tab для этих свойств. Это означает, что вам не требуется больше запоминать написание ваших любимых атрибутов LDAP!</p>  <p>Скажем, например, вы написали простой класс .NET:</p>  <p>public class ADObjectProp</p>  <p>{</p>  <p>public string ObjectGuid { get { return &quot;objectGuid&quot;; } }</p>  <p>public string Name { get { return &quot;name&quot;; } }</p>  <p>public string DistinguishedName { get { return &quot;DistinguishedName&quot;; } }</p>  <p>public string ObjectClass { get { return &quot;ObjectClass&quot;; } }</p>  <p>}</p>  <p>Теперь вы можете использовать переменные типа ADObjectProp внутри расширенного фильтра. Я называю такие переменные <b>&#8220;</b><b>переменные запросов</b><b>&#8221;</b>.</p>  <p>PS D:\&gt; $queryADObject = new-object &#8211;type ADObjectProp</p>  <p>PS D:\&gt; Get-ADObject -Filter { $queryADObject.Name -eq &quot;JohnSmith&quot; }</p>  <p>В показанном выше примере, если вы нажмете &lt;TAB&gt; после &#8220;$queryAODbject.&#8221;, PowerShell будет циклически перебирать все свойства. Можно также использовать неполное имя свойства и имена с универсальными символами (&#171;*&#187;, &#171;?&#187;), и PowerShell будет циклически перебирать подходящие свойства.</p>  <p>Это отличная возможность, особенно для тех, кому сложно запоминать все имена атрибутов LDAP и/или запоминать новые имена свойств, представленные в объектной модели AD Powershell. Теперь вопрос в том, как создать такой класс .NET, который бы содержал все имена атрибутов LDAP, представленные в вашей схеме? Для этого можно воспользоваться функцией <b>Get</b><b>-</b><b>PossibleLdapAttributes</b><b>,</b> доступной в <a href="https://blogs.msdn.com/adpowershell/archive/2009/03/20/extending-active-directory-powershell.aspx">Active Directory Extensions</a> и командлетом <b>Add</b><b>-</b><b>Type</b><b>,</b> доступном в самом Powershell. </p>  <p>В Powershell можно динамически создавать собственные классы.NET с помощью командлета <b>Add</b><b>-</b><b>Type</b>. Вот команда Powershell, которая создает класс ADObjectProp (показанный выше):</p>  <p>PS D:\&gt; Add-Type &#8211;Name ADObjectProp &#8211;NameSpace &#8220;Microsoft.ActiveDirectoryExtensions&#8221; &#8211;MemberDefinition &#8216; public string ObjectGuid { get { return &#8220;objectGuid&#8221;; } } public string Name { get { return &#8220;name&#8221;; } } public string DistinguishedName { get { return &#8220;DistinguishedName&#8221;; } } public string ObjectClass { get { return &#8220;ObjectClass&#8221;; } }&#8217; &#8211;PassThru</p>  <p>Инициализировать объект этого класса можно командой:</p>  <p>PS D:\&gt; $xADObject = new-object &#8211;type Microsoft.ActiveDirectoryExtensions .ADObjectProp</p>  <p>Я изменил скрипт ActiveDirectoryExtensions для создания группы переменных запросов. Скрипт добавляет расширенные свойства для передаваемого типа объектов и получает список доступных атрибутов LDAP для соответствующего класса объектов, а также добавляет переменные запросов.</p>  <p>Получить список переменных запросов можно следующим образом:</p>  <p>PS C:\&gt; import-module ActiveDirectory</p>  <p>PS C:\&gt; C:\ActiveDirectoryExtension.ps1</p>  <p>PS D:\&gt; dir variable:xad*</p>  <p>Name Value</p>  <p>---- -----</p>  <p>xADObject Microsoft.ActiveDirectoryExtensions.ADObjectProp</p>  <p>xADPrincipal Microsoft.ActiveDirectoryExtensions.ADPrincipalProp</p>  <p>..</p>  <p>Вот таблица, где показаны все переменные запросов, созданные скриптом ActiveDirectoryExtensions и краткое описание каждой из них:    <table border="1" cellspacing="0" cellpadding="0"><tbody>       <tr>         <td valign="top" width="223">           <p>$xADObject </p>         </td>          <td valign="top" width="367">           <p>Содержит все расширенные свойства ADObject и LDAP-атрибуты объекта <b>top</b></p>         </td>       </tr>        <tr>         <td valign="top" width="223">           <p>$xADPrincipal </p>         </td>          <td valign="top" width="367">           <p>Содержит все расширенные свойства ADPrincipal и LDAP-атрибуты объекта <b>top</b></p>         </td>       </tr>        <tr>         <td valign="top" width="223">           <p>$xADAccount </p>         </td>          <td valign="top" width="367">           <p>Содержит все расширенные свойства ADAccount и LDAP-атрибуты объекта <b>top</b></p>         </td>       </tr>        <tr>         <td valign="top" width="223">           <p>$xADGroup </p>         </td>          <td valign="top" width="367">           <p>Содержит все расширенные свойства ADGroup и LDAP-атрибуты для объекта <b>group</b></p>         </td>       </tr>        <tr>         <td valign="top" width="223">           <p>$xADUser </p>         </td>          <td valign="top" width="367">           <p>Содержит все расширенные свойства ADUser и LDAP-атрибуты для объекта <b>user</b></p>         </td>       </tr>        <tr>         <td valign="top" width="223">           <p>$xADComputer </p>         </td>          <td valign="top" width="367">           <p>Содержит все расширенные свойства ADComputer и LDAP-атрибуты для объекта <b>computer</b></p>         </td>       </tr>        <tr>         <td valign="top" width="223">           <p>$xADOrganizationalUnit </p>         </td>          <td valign="top" width="367">           <p>Содержит все расширенные свойства ADOrganizationalUnit и LDAP-атрибуты для объекта <b>organizationalUnit</b></p>         </td>       </tr>        <tr>         <td valign="top" width="223">           <p>$xADFineGrainedPasswordPolicy </p>         </td>          <td valign="top" width="367">           <p>Содержит все расширенные свойства ADFineGrainedPasswordPolicy и LDAP-атрибуты для объекта <b>msDS</b><b>-</b><b>PasswordSettings</b></p>         </td>       </tr>        <tr>         <td valign="top" width="223">           <p>$xADServiceAccount </p>         </td>          <td valign="top" width="367">           <p>Содержит все расширенные свойства ADServiceAccount и LDAP-атрибуты для <b>msDS</b><b>-</b><b>ManagedServiceAccount</b></p>         </td>       </tr>        <tr>         <td valign="top" width="223">           <p>$xADDomainController </p>         </td>          <td valign="top" width="367">           <p>Содержит все расширенные свойства ADDomainController</p>         </td>       </tr>     </tbody></table> </p>  <p>Так как скрипт теперь считывает схему после ее загрузки, это происходит немного медленнее.</p>  <p>Вот примеры того, как можно использовать переменные запросов в консоли Powershell:</p>  <p>Get-ADObject -Filter { $xADUser.SamAccountName -eq &quot;Administrator&quot; }</p>  <p>## Можно набрать $xADUser.Sam&lt;TAB&gt; для дополнения по tab до $xADUser.SamAccountName</p>  <p>## Или можно набрать $xADUser.*Account*&lt;TAB&gt; и циклически перебирать значения для поиска SamAccountName</p>  <p>Get-ADObject -Filter { $xADUser.displayName -like &quot;*Policy*&quot; }</p>  <p>Get-ADObject -Filter { $xADObject.Name -eq &quot;Administrator&quot; }</p>  <p>Небольшое предупреждение об использовании переменных запросов при дополнении по tab:</p>  <p>- Многие LDAP-атрибуты, определенные в схеме AD, содержат дефис (&#8216;-&#8217;). Так как имена свойств .NET не могут содержать дефис, скрипт был изменен для конвертирования дефисов (&#8216;-&#8217;) в символы подчеркивания (&#8216;_&#8217;). Таким образом, для написания фильтра с использованием атрибута &#8220;msDS-LastKnownRDN&#8221;, можно указать $xADUser.msDS_LastKnownRDN.</p>  <p>Get-ADObject -filter { $xADObject.msDS_LastKnownRDN -like &quot;*&quot; } -IncludeDeletedObjects</p>  <p>Наслаждайтесь!</p>  <p>Swami</p>  <p>--</p>  <p>Swaminathan Pattabiraman</p>  <p>Developer &#8211; Active Directory Powershell Team</p>  <p>&#160;</p>  <p><b>Присоединенный файл: </b><a href="https://blogs.msdn.com/adpowershell/attachment/9630101.ashx">ActiveDirectoryExtension.ps1.txt</a></p>  <p><b><a href="https://blogs.msdn.com/adpowershell/archive/2009/05/19/tab-completing-ldap-attribute-names-inside-advanced-filters.aspx">Оригинал</a></b></p>  <p><b>Перевод:</b> <a href="https://lushnikov.spaces.live.com/blog/">Илья Лушников</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Active Directory Administrative Center для Windows Server 2008 R2 реализован с помощью ADPowershell!</title>
      <link>https://docs.microsoft.com/archive/blogs/adpowershell_ru/active-directory-administrative-center-windows-server-2008-r2</link>
      <pubDate>Thu, 26 Mar 2009 20:14:00 GMT</pubDate>
      <dc:creator><![CDATA[Andrey Beshkov]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/adpowershell_ru/2009/03/26/active-directory-administrative-center-windows-server-2008-r2/</guid>
      <description><![CDATA[В Windows Server 2008 R2 добавлен не только ADPowershell – он также содержит Active Directory...]]></description>
      <content:encoded><![CDATA[<P>В Windows Server 2008 R2 добавлен не только ADPowershell – он также содержит Active Directory Administrative Center (или ADAC), новый графический инструмент для администраторов AD. Прочитать об этом можно <A href="https://technet.microsoft.com/en-us/library/dd560651.aspx">здесь</A>. Что нельзя определить, только взглянув на ADAC, - так это что он реализован полностью на Windows PowerShell 2.0 и ADPowershell! Каждое чтение и запись информации в AD происходит с помощью ADPowerShell. Итак, если вы думали, что Windows PowerShell и ADPowershell – это только для авторов сценариев - вы ошибались!&nbsp; Windows PowerShell и ADPowerShell представляют мощный и гибкий API для создания управляемых приложений любого типа. 
<P>С благодарностью,<BR>Джон Ньюман (Jon Newman)<BR>Active Directory Administrative Center<BR>(раньше входил в команду разработки PowerShell 1.0)</P>
<P>Перевод: <A href="https://lushnikov.spaces.live.com/blog/" mce_href="https://lushnikov.spaces.live.com/blog/"><STRONG><FONT color=#006bad>Илья Лушников</FONT></STRONG></A></P>]]></content:encoded>
    </item>
  </channel>
</rss>