<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Vadims Podans's blog - PowerShell | ACL</title>
    <link>http://www.sysadmins.lv/</link>
    <description>PowerShell powered</description>
    <image>
      <url>http://www.sysadmins.lv/images/imgusr/bilde.jpg</url>
      <title>Vadims Podans's blog - PowerShell | ACL</title>
      <link>http://www.sysadmins.lv/</link>
    </image>
    <language>en-us</language>
    <copyright>Vadims Podāns</copyright>
    <lastBuildDate>Wed, 04 Mar 2009 14:22:45 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>vpodans@sysadmins.lv</managingEditor>
    <webMaster>vpodans@sysadmins.lv</webMaster>
    <item>
      <trackback:ping>http://www.sysadmins.lv/Trackback.aspx?guid=c8b6b0f3-8cb6-42b3-b91d-e6b15d6ef161</trackback:ping>
      <pingback:server>http://www.sysadmins.lv/pingback.aspx</pingback:server>
      <pingback:target>http://www.sysadmins.lv/PermaLink,guid,c8b6b0f3-8cb6-42b3-b91d-e6b15d6ef161.aspx</pingback:target>
      <dc:creator>Camelot</dc:creator>
      <wfw:comment>http://www.sysadmins.lv/CommentView,guid,c8b6b0f3-8cb6-42b3-b91d-e6b15d6ef161.aspx</wfw:comment>
      <wfw:commentRss>http://www.sysadmins.lv/SyndicationService.asmx/GetEntryCommentsRss?guid=c8b6b0f3-8cb6-42b3-b91d-e6b15d6ef161</wfw:commentRss>
      <title>Управление безопасностью общих папок (сетевых шар) в PowerShell (часть 5)</title>
      <guid isPermaLink="false">http://www.sysadmins.lv/PermaLink,guid,c8b6b0f3-8cb6-42b3-b91d-e6b15d6ef161.aspx</guid>
      <link>http://www.sysadmins.lv/PermaLink,guid,c8b6b0f3-8cb6-42b3-b91d-e6b15d6ef161.aspx</link>
      <pubDate>Wed, 04 Mar 2009 14:22:45 GMT</pubDate>
      <description>&lt;div&gt;&lt;P&gt;По просьбе читателей, а так же с учётом востребованности (судя по сообщениям форумов и ньюсгрупп) я нашёл время переписать скрипт ShareUtils.ps1 с поддержкой работы с удалёнными машинами и попутно пофиксив недочёты, которые были найдены за время эксплуатации предыдущей версии скрипта. Предыдущая версия опубликована здесь: &lt;A title=http://vpodans.spaces.live.com/blog/cns!BB1419A2CFC1E008!188.entry href="http://vpodans.spaces.live.com/blog/cns!BB1419A2CFC1E008!188.entry"&gt;http://vpodans.spaces.live.com/blog/cns!BB1419A2CFC1E008!188.entry&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Технический функционал изменился только возможностью работы с удалёнными компьютерами, но синтаксис был изменён (а так же удалены лишние функции) по аналогии с &lt;A href="http://www.sysadmins.lv/PermaLink,guid,22c0550d-0c46-44ca-97ce-2b0bccbb51de.aspx"&gt;PrinterUtils&lt;/A&gt; и имеет примерно следующий вид:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;New-Share –Computer &amp;lt;Computer&amp;gt; –Name &amp;lt;Name&amp;gt; –Path &amp;lt;Path&amp;gt; –Description &amp;lt;Description&amp;gt;&lt;/FONT&gt; &lt;BR&gt;где &lt;STRONG&gt;Computer&lt;/STRONG&gt; – имя или IP адрес компьютера, на котором необходимо расшарить папку. (не обязательный параметр). Если не указан, используется текущий компьютер. &lt;BR&gt;&lt;STRONG&gt;Name&lt;/STRONG&gt; - сетевое имя для папки; &lt;BR&gt;&lt;STRONG&gt;Path&lt;/STRONG&gt; - путь к физической папке; &lt;BR&gt;&lt;STRONG&gt;Description&lt;/STRONG&gt; описание к сетевой папке. При наличии пробелов -&amp;nbsp; заключить в кавычки (не обязательный параметр); 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Remove-Share –Computer &amp;lt;Computer&amp;gt; –Name &amp;lt;Name&amp;gt;&lt;/FONT&gt; – отменяет расшаривание на папке. Сама папка не удаляется. &lt;BR&gt;где &lt;STRONG&gt;Computer&lt;/STRONG&gt; – имя или IP адрес компьютера, на котором нужно отменить расшаривание папки. (не обязательный параметр). Если не указан, используется текущий компьютер. &lt;BR&gt;&lt;STRONG&gt;Name&lt;/STRONG&gt; - сетевое имя папки; 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Get-Share –Computer &amp;lt;Computer&amp;gt; –Name &amp;lt;Name&amp;gt;&lt;/FONT&gt; – получает основные сведения и списки DACL Share Permissions с указанных или всех сетевых папок. &lt;BR&gt;где &lt;STRONG&gt;Computer&lt;/STRONG&gt; – имя или IP адрес компьютера, с которого нужно получить сведения о сетевых папках. (не обязательный параметр). Если не указан, используется текущий компьютер. &lt;BR&gt;&lt;STRONG&gt;Name&lt;/STRONG&gt; - имя сетевой папки (не обязательный параметр). Если не указан, то выбираются все сетевые папки с типом &lt;STRONG&gt;Disk Drive&lt;/STRONG&gt; (в которые системные шары не входят). 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Set-SharePermission –User &amp;lt;User&amp;gt; –AceType &amp;lt;AceType&amp;gt; –AccessMask &amp;lt;AccessMask&amp;gt;&lt;/FONT&gt; – устанавливает единственный Share Permission ACE для указанного в аргументах пользователя. &lt;BR&gt;&lt;STRONG&gt;User&lt;/STRONG&gt; - имя пользователя/группы, которой предоставляется доступ; &lt;BR&gt;&lt;STRONG&gt;AceType&lt;/STRONG&gt; - тип доступа. Этот параметр должен иметь одно из значений &lt;EM&gt;Allow/Deny; &lt;BR&gt;&lt;/EM&gt;&lt;STRONG&gt;AccessMask&lt;/STRONG&gt; - маска доступа. Этот параметр должен иметь одно из значений &lt;EM&gt;FullControl/Change/Read;&lt;/EM&gt; &lt;BR&gt;&lt;EM&gt;&lt;BR&gt;Функция не может быть вначале строки, а только после конвейера Get-Share или другого источника с подходящими данными (например, если данные были сохранены в CSV/XML файле, то их можно использовать в качестве источника: Import-Csv path.csv | Set-SharePermission Everyone Allow Change). При этом все текущие права на сетевую папку будут удалены и записан только указанный в аргументах пользователь/группа.&lt;/EM&gt; 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Add-SharePermission –User &amp;lt;User&amp;gt; –AceType &amp;lt;AceType&amp;gt; –AccessMask &amp;lt;AccessMask&amp;gt;&lt;/FONT&gt; – добавляет указанного в аргументах пользователя к Share Permissions выбранной сетевой папки (или папок) &lt;BR&gt;&lt;STRONG&gt;User&lt;/STRONG&gt; - имя пользователя/группы, которой предоставляется доступ; &lt;BR&gt;&lt;STRONG&gt;AceType&lt;/STRONG&gt; - тип доступа. Этот параметр должен иметь одно из значений &lt;EM&gt;Allow/Deny;&lt;/EM&gt; &lt;BR&gt;&lt;STRONG&gt;AccessMask&lt;/STRONG&gt; - маска доступа. Этот параметр должен иметь одно из значений &lt;EM&gt;FullControl/Change/Read; &lt;BR&gt;&lt;BR&gt;Функция не может быть вначале строки, а только после конвейера Get-Share или другого источника с подходящими данными (например, если данные были сохранены в CSV/XML файле, то их можно использовать в качестве источника: Import-Csv path.csv | Add-SharePermission Everyone Allow Change).&lt;/EM&gt; 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Remove-SharePermission –User &amp;lt;User&amp;gt;&lt;/FONT&gt; – удаляет указанного пользователя из DACL выбранной сетевой папки (папок). Не может быть вначале строки, а только на выходе конвейера, откуда поступают объекты сетевых папок. Например, Get-Share | Remove-SharePermission Everyone – удалит группу Everyone из всех SharePermissions всех расшаренных папок на локальном компьютере. Разрешения NTFS при этом не изменяются. &lt;BR&gt;где &lt;STRONG&gt;User&lt;/STRONG&gt; - имя пользователя/группы, которого следует удалить из ACL сетевой папки. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Примеры использования практически идентичные, как и в PrinterUtils: &lt;A title=http://www.sysadmins.lv/PermaLink,guid,22c0550d-0c46-44ca-97ce-2b0bccbb51de.aspx href="http://www.sysadmins.lv/PermaLink,guid,22c0550d-0c46-44ca-97ce-2b0bccbb51de.aspx"&gt;http://www.sysadmins.lv/PermaLink,guid,22c0550d-0c46-44ca-97ce-2b0bccbb51de.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;И, собственно, сам код:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#######################################################&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; ShareUtils.ps1&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; Version 0.9&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#
#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; Functions for advanced share management&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#
#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; Note:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; Previous version is published at my former blog:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; &lt;/FONT&gt;&lt;A href="http://vpodans.spaces.live.com/blog/cns!BB1419A2CFC1E008!188.entry" target=_blank&gt;&lt;FONT color=#009500 size=2 face=Verdana&gt;http://vpodans.spaces.live.com/blog/cns!BB1419A2CFC1E008!188.entry&lt;/FONT&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#
#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; Vadims Podans (c) 2009&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; &lt;/FONT&gt;&lt;A href="http://www.sysadmins.lv/"&gt;&lt;FONT color=#009500 size=2 face=Verdana&gt;http://www.sysadmins.lv/&lt;/FONT&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt;####################################################### &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; внутренняя функция, которая преобразовывает числовой код возврата операции записи DACL&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; в текстовое значение.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;_ShareUtils_Get-Code&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$write&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;) {
&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;switch&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$write&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.ReturnValue) {
   &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; {&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Success&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;}
   &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; {&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Access Denied&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;}
   &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;8&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; {&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Unknown Failure&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;}
   &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;9&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; {&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Invalid Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;}
   &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;21&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; {&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Invalid Parameter&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;}
   &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;22&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; {&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Duplicate Share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;}
   &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;23&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; {&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Redirected Path&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;}
   &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;24&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; {&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Unknown Device or Directory&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;}
   &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;25&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; {&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Net Name Not Found&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;}
   &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;default&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; {&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Unknown error $write.ReturnValue&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;}
   }
}

&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; функция для извлечения сведений и DACL с существующих сетевых папок.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; обязательна для использования функций Add-SharePermission и Set-SharePermission&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; если компьютер не указан, то используется текущий. Если имя сетевой паки не указано,&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; то возвращается список сведений и DACL всех сетевых папок на локальном или удалённом компьютере&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;Get-Share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$name&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;) {
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$name&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;) {
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$shares&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;gwmi&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Win32_Share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-ComputerName&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-Filter&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;name = '$name'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    } &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&lt;FONT size=2 face=Verdana&gt;else&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt; {
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$shares&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;gwmi&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Win32_Share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-ComputerName&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-Filter&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;type = 0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    }
    &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt; @()
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;foreach&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;in&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$shares&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;) {
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareSec&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;gwmi&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Win32_LogicalShareSecuritySetting&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-ComputerName&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-filter&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;name='$($share.name)'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt; 
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$shareSec&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;) {
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$SD&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$sharesec&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.GetSecurityDescriptor()
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;+=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$SD&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Descriptor.DACL | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;%&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt; {
                &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;select&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; @{e&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.ClassPath.Server};n&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;},
                @{e&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.name};n&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;},
                @{e&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Path};n&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Path&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;},
                @{e&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Description};n&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Description&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;},
                AccessMask,
                AceFlags,
                AceType,
                @{e&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.trustee.Name};n&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;User&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;},
                @{e&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.trustee.Domain};n&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Domain&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;},
                @{e&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.trustee.SIDString};n&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;SID&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;'&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;}
            }
        } &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;else&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt; {
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Write-Warning&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Specified share not exist or you may not have sufficient rights to access them!&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;        }
&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;&lt;FONT size=2 face=Verdana&gt;$ShareInfo&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    }
}

&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; функция записи обновлённых сведений в сетевые папки. Не может быть первой в строке, а только после&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; конвейера, откуда поступают данные для записи. Если папка не расшарена, то скрипт её расшарит&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; автоматически и запишет необходимые сведения о сетевой папке.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;Set-Share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt; {
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; @(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$input&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;select&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-unique&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Path&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Description&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;%&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt; {
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.Computer
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.name
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$SD&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; ([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;WMIClass&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Win32_SecurityDescriptor&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;).CreateInstance()
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ace&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; ([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;WMIClass&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Win32_Ace&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;).CreateInstance()
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Trustee&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; ([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;WMIClass&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Win32_Trustee&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;).CreateInstance()
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$sd&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.DACL &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt; @()
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;?&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; {&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Computer &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;-eq&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;-and&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.name &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;-eq&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;} | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;%&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt; {
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$SID&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;new-object&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;security.principal.securityidentifier&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.SID)
            [&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;byte&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;[]] &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$SIDArray&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; ,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$SID&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.BinaryLength
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$SID&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.GetBinaryForm(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$SIDArray&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Trustee&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Name &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.user
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Trustee&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.SID &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$SIDArray&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;            &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$ace&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.AccessMask &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.AccessMask
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ace&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.AceType &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.AceType
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ace&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.AceFlags &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.AceFlags
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ace&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.trustee &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Trustee&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;            &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$SD&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.DACL &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;+=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ace&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.psObject.baseobject
        }
&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; проверяется наличие расшаренной папки. Если папка есть, то в неё записывается только SecurityDescriptor&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; в противном случае она расшаривается и в неё производится полная запись всех данных&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;gwmi&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Win32_Share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-ComputerName&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-Filter&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;name = '$name'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;        &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;) {
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$inParams&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.psbase.GetMethodParameters(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;SetShareInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$inParams&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Access &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$SD&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;            &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$write&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.psbase.invokemethod(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;SetShareInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$inParams&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Write-Host&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Setting DACL on current share: $name on server $computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-ForegroundColor&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;green&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;            &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;_ShareUtils_Get-Code&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Write&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;        } &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&lt;FONT size=2 face=Verdana&gt;else&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt; {
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$shareobject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; [&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;wmiClass&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;\\$computer\root\cimv2:win32_Share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;            &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$inParams&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$shareobject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.psbase.GetMethodParameters(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Create&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$inParams&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.name &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.name
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$inParams&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.path &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.path
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$inParams&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Description &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.Description
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$inParams&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Type &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;            &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$inParams&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Access &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$SD&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;            &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$write&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$shareobject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.psbase.invokemethod(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Create&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$inParams&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Write-Host&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Processing current share: $name on server $computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-ForegroundColor&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;green&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;            &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;_ShareUtils_Get-Code&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Write&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;        }
    }
}

&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;_Create-SDObject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$user&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AceType&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AccessMask&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;) {
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; преобразование текстового вида прав в числовые значения&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$masks&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; @{FullControl &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;2032127&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;; Change &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1245631&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;; Read &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1179817&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;}
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$types&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; @{Allow &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;; Deny &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;}
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; создание необходимых свойств для объекта. Для поддержки удалённого управления&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; было добавлено свойство Computer, которое будет принимать от Get-Share аналогичное&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; значение. Тем самым обеспечивается сквозная трансляция имени компьютера, где&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; находится сетевая папка, по конвейеру для последующей записи&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;New-Object&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;System.Management.Automation.PSObject&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Add-Member&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;NoteProperty&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;  ([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;PSObject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Add-Member&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;NoteProperty&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;  ([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;PSObject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Add-Member&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;NoteProperty&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Path&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;  ([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;PSObject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Add-Member&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;NoteProperty&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Description&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;  ([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;PSObject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Add-Member&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;NoteProperty&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;AccessMask&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;  ([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;uint32&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Add-Member&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;NoteProperty&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;AceFlags&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;  ([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;uint32&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Add-Member&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;NoteProperty&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;AceType&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;  ([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;uint32&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Add-Member&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;NoteProperty&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;User&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;  ([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;PSObject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Add-Member&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;NoteProperty&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Domain&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;  ([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;PSObject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Add-Member&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;NoteProperty&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;SID&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;  ([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;PSObject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;]&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$null&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; заполнение объекта данными, которые были указаны в качестве аргументов вызова функции и возврат&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; объекта в вызывающую функцию&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Name &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$name&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.User &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$user&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.SID &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;new-object&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;security.principal.ntaccount&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$user&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;).translate([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;security.principal.securityidentifier&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;])
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.AccessMask &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$masks&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AccessMask&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.AceType &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$types&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AceType&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;&lt;FONT size=2 face=Verdana&gt;$AddInfo&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;}

&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;Set-SharePermission&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$user&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AceType&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AccessMask&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;) {
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; принимаются данные с конвейера &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; @(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$input&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;_Create-SDObject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$user&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AceType&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AccessMask&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; в этом цикле перебираются по именам все имена расшаренных папок и для каждой из них&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; записывается указанный в аргументах пользователь с удалением текущих ACE из ACL шары&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; это видно по тому, что никакая часть $ShareInfo не передаётся по конвейеру на запись&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;foreach&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;in&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;select&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-Unique&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Name&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)) {
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Computer &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.Computer
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Name &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.name
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Description &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.Description
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;SPAN style="COLOR: #5f9ea0"&gt;Set-Share&lt;/SPAN&gt;
    }
}

&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; просто добавляет нового участника безопасности к текущему DACL расшаренной папки.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; NTFS Acl не изменяется.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;Add-SharePermission&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$user&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AceType&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AccessMask&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;) {
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; @(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$input&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;); &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfoNew&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt; @()
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;_Create-SDObject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$user&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AceType&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AccessMask&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #0000ff"&gt;foreach&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;in&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;select&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-Unique&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Name&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)) {
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Name &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.name
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Computer &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.Computer
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Description &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.Description
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; вот этой строкой мы из списка всех сетевых папок итеративно перебираем каждую шару&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfoNew&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; @(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;?&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.name &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;-eq&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.name})
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; в хвост списка ACL каждой сетевой шары добавляем новый ACE&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfoNew&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;+=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;        &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; и подаём на запись&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$ShareInfoNew&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;Set-Share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    }
}

&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; основная функция для удаления единичного ACE из ACL сетевой папки. Процесс сводится к извлечению&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; текущего списка (или списков) ACL и фильтрации ACE в этом списке по методу Not Equal. Всё, что не подпадает под&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; это действие записываются обратно в переменную, а всё, что подпало (указанный пользователь) обратно&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; в переменную $ShareInfo не записывается.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;Remove-SharePermission&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$user&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;) {
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$shares&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; @(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$input&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; просто берём списки ACL, которые пришли по конвейеру и выкидываем оттуда все ACE,&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; в которых фигурирует указанный в аргументах пользователь/группа и записывем ACE обратно в ACL&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$shares&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;?&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; {&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000080"&gt;$_&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.user &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;-ne&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$user&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;} | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;Set-Share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;}

&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; основная функция для создания новых сетевых папок на локальном компьютере. Здесь я использую упрощённый&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; вариант создания сетевой папки, но учитывая один большой нюанс я добавил одно действие. Суть проблемы&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; изложена тут: &lt;/FONT&gt;&lt;A href="http://vpodans.spaces.live.com/blog/cns!BB1419A2CFC1E008!170.entry" target=_blank&gt;&lt;FONT color=#009500 size=2 face=Verdana&gt;http://vpodans.spaces.live.com/blog/cns!BB1419A2CFC1E008!170.entry&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; поэтому при создании новой сетевой папки я вручную создаю с нуля список ACL, который содержит&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;FONT size=2 face=Verdana&gt;#&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;FONT size=2 face=Verdana&gt; только группу Everyone и с правом Allow Read.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;New-Share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$env:COMPUTERNAME&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$name&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$path&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Description&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;) {
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$user&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;new-object&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;security.principal.securityidentifier&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;S-1-1-0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;).translate([&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;security.principal.ntaccount&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;])
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;_Create-SDObject&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$user&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.Value Allow Read
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Computer &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$computer&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Path &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$path&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.Description &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$Description&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #800080"&gt;$AddInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; | &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;Set-Share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;}

&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #008000"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; отменяет расшаривание сетевой папки. Сама же физическая папка не изменяется.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;Remove-Share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$name&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;) {
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;gwmi&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Win32_Share&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-ComputerName&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$computer&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-STYLE: italic; COLOR: #5f9ea0"&gt;-Filter&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;name = '$name'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;!&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;) {
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Write-Warning&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Specified network share doesn't exist!&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    } &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;&lt;FONT size=2 face=Verdana&gt;else&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt; {
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$write&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$share&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #000000"&gt;.delete()
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #5f9ea0; FONT-WEIGHT: bold"&gt;Write-Host&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;Deleting network share $name on computer $computer:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #800000"&gt;"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;        &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="COLOR: #5f9ea0"&gt;_ShareUtils_Get-Code&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #800080"&gt;$write&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #000000"&gt;
&lt;FONT size=2 face=Verdana&gt;    }
}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;img width="0" height="0" src="http://www.sysadmins.lv/aggbug.ashx?id=c8b6b0f3-8cb6-42b3-b91d-e6b15d6ef161"/&gt;&lt;br/&gt;&lt;hr/&gt;PowerShell Powered - http://www.sysadmins.lv&lt;/div&gt;</description>
      <comments>http://www.sysadmins.lv/CommentView,guid,c8b6b0f3-8cb6-42b3-b91d-e6b15d6ef161.aspx</comments>
      <category>PowerShell</category>
      <category>PowerShell / ACL</category>
      <category>PowerShell / WMI</category>
    </item>
    <item>
      <trackback:ping>http://www.sysadmins.lv/Trackback.aspx?guid=bcf4e2a2-5706-432c-97e7-efb4c710277e</trackback:ping>
      <pingback:server>http://www.sysadmins.lv/pingback.aspx</pingback:server>
      <pingback:target>http://www.sysadmins.lv/PermaLink,guid,bcf4e2a2-5706-432c-97e7-efb4c710277e.aspx</pingback:target>
      <dc:creator>Camelot</dc:creator>
      <wfw:comment>http://www.sysadmins.lv/CommentView,guid,bcf4e2a2-5706-432c-97e7-efb4c710277e.aspx</wfw:comment>
      <wfw:commentRss>http://www.sysadmins.lv/SyndicationService.asmx/GetEntryCommentsRss?guid=bcf4e2a2-5706-432c-97e7-efb4c710277e</wfw:commentRss>
      <slash:comments>14</slash:comments>
      <title>Странности Set-Acl</title>
      <guid isPermaLink="false">http://www.sysadmins.lv/PermaLink,guid,bcf4e2a2-5706-432c-97e7-efb4c710277e.aspx</guid>
      <link>http://www.sysadmins.lv/PermaLink,guid,bcf4e2a2-5706-432c-97e7-efb4c710277e.aspx</link>
      <pubDate>Sun, 01 Mar 2009 20:44:06 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Наткнулся на него когда готовил ответ для ньюсгрупп. Как известно, владелец объекта может спокойно изменять списки ACL объектов минуя все их ограничения пользуясь неоткланяемым правом владения объектом. Поэтому, если из ACL объекта удалить все ACE и сохранить, то мы из проводника можем в любой момент вызвать вкладку Security объекта и задать требуемые ACE. Однако, это возможно только из графического интерфейса проводника сделать. При использовании скрипта и командлета &lt;strong&gt;Set-Acl&lt;/strong&gt; мы этого сделать не сможем. Продемонстрирую проблему:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre style="background-color: black; font: 9pt courier new; color: #fff"&gt;&lt;font color="#009500"&gt;&lt;span black? background-color: #009500?;&gt;&lt;p&gt;[C:\] whoami
contoso\administrator
[C:\] Get-Acl C:\Test | fl


Path   : Microsoft.PowerShell.Core\FileSystem::C:\Test
Owner  : CONTOSO\administrator
Group  : CONTOSO\Domain Users
Access :
Audit  :
Sddl   : O:LAG:DUD:PAI



[C:\] $acl = Get-Acl C:\Test
[C:\] $accessrule = New-Object System.Security.AccessControl.FileSystemAccessRule(&amp;quot;Administrator&amp;quot;,&amp;quot;FullControl&amp;quot;, &amp;quot;Allow&amp;quot;
)
[C:\] $acl.AddAccessRule($accessRule)
[C:\] $acl | Set-Acl C:\Test
&lt;font color="#ff0000"&gt;Set-Acl : Attempted to perform an unauthorized operation.
At line:1 char:15
+ $acl | Set-Acl &amp;lt;&amp;lt;&amp;lt;&amp;lt;  C:\Test
    + CategoryInfo          : PermissionDenied: (C:\Test:String) [Set-Acl], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetAclCommand&lt;/font&gt;

[C:\]&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как видите, текущий пользователь (администратор) является владельцем папки. Но все ACE в ACL пустые (секция Access). Пользуясь правами владельца, всё же, я не могу ничего сделать с этим списком. Как выяснилось в процессе исследования, пользователю-владельцу, который собирается менять ACL &lt;u&gt;необходимо иметь явно назначенное или унаследованное разрешение &lt;strong&gt;TakeOwnership&lt;/strong&gt;&lt;/u&gt;. Никаких Read/ChangePermissions и прочих не надо. Теперь я из проводника добавлю себе право TakeOwnership и попробую снова исполнить код:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="background-color: black; font: 9pt courier new; color: #fff"&gt;&lt;font color="#009500"&gt;&lt;span black? background-color: #009500?;&gt;&lt;p&gt;[C:\] Get-Acl C:\Test | fl


Path   : Microsoft.PowerShell.Core\FileSystem::C:\Test
Owner  : CONTOSO\administrator
Group  : CONTOSO\Domain Users
Access : CONTOSO\administrator Allow  TakeOwnership, Synchronize
Audit  :
Sddl   : O:LAG:DUD:PAI(A;OICI;0x180000;;;LA)



[C:\] $acl = Get-Acl C:\Test
[C:\] $accessrule = New-Object System.Security.AccessControl.FileSystemAccessRule(&amp;quot;Administrator&amp;quot;,&amp;quot;FullControl&amp;quot;, &amp;quot;Allow&amp;quot;
)
[C:\] $acl.AddAccessRule($accessRule)
[C:\] $acl | Set-Acl C:\Test
[C:\] Get-Acl C:\Test | fl


Path   : Microsoft.PowerShell.Core\FileSystem::C:\Test
Owner  : CONTOSO\administrator
Group  : CONTOSO\Domain Users
Access : CONTOSO\Administrator Allow  TakeOwnership, Synchronize
         CONTOSO\Administrator Allow  FullControl
Audit  :
Sddl   : O:LAG:DUD:PAI(A;OICI;0x180000;;;LA)(A;;FA;;;LA)



[C:\]&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как видите, теперь всё получилось. Я не понимаю, зачем мне нужно иметь право TakeOwnership, чтобы изменить ACL, если я являюсь владельцем. В реальной среде это может вызвать определённые трудности, как неадекватное поведение скрипта, который будет сыпать ошибками (в связи с чем появился вопрос на ньюсгруппах).&lt;/p&gt;

&lt;p&gt;Зато мною не очень любимый WMI справился с задачей на ура, израсходовав кода при этом во много раз больше, чем с использованием командлетов. И в итоге получилось вот:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$path&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000"&gt;C:\Test&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$user&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000"&gt;Administrator&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$path&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$path&lt;/span&gt;&lt;span style="color: #000000"&gt;.replace(&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000"&gt;\&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000"&gt;\\&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #000000"&gt;)
&lt;/span&gt;&lt;span style="color: #800080"&gt;$SD&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; ([&lt;/span&gt;&lt;span style="color: #008080"&gt;WMIClass&lt;/span&gt;&lt;span style="color: #000000"&gt;] &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000"&gt;Win32_SecurityDescriptor&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #000000"&gt;).CreateInstance()
&lt;/span&gt;&lt;span style="color: #800080"&gt;$ace&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; ([&lt;/span&gt;&lt;span style="color: #008080"&gt;WMIClass&lt;/span&gt;&lt;span style="color: #000000"&gt;] &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000"&gt;Win32_ace&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #000000"&gt;).CreateInstance()
&lt;/span&gt;&lt;span style="color: #800080"&gt;$Trustee&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; ([&lt;/span&gt;&lt;span style="color: #008080"&gt;WMIClass&lt;/span&gt;&lt;span style="color: #000000"&gt;] &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000"&gt;Win32_Trustee&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #000000"&gt;).CreateInstance()
&lt;/span&gt;&lt;span style="color: #800080"&gt;$SID&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;security.principal.ntaccount&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$user&lt;/span&gt;&lt;span style="color: #000000"&gt;).translate([&lt;/span&gt;&lt;span style="color: #008080"&gt;security.principal.securityidentifier&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #000000"&gt;])
[&lt;/span&gt;&lt;span style="color: #008080"&gt;byte&lt;/span&gt;&lt;span style="color: #000000"&gt;[]] &lt;/span&gt;&lt;span style="color: #800080"&gt;$SIDArray&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; ,&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$SID&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #000000"&gt;.BinaryLength
&lt;/span&gt;&lt;span style="color: #800080"&gt;$SID&lt;/span&gt;&lt;span style="color: #000000"&gt;.GetBinaryForm(&lt;/span&gt;&lt;span style="color: #800080"&gt;$SIDArray&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #000000"&gt;)
&lt;/span&gt;&lt;span style="color: #800080"&gt;$Trustee&lt;/span&gt;&lt;span style="color: #000000"&gt;.Name &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$user&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$Trustee&lt;/span&gt;&lt;span style="color: #000000"&gt;.SID &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$SIDArray&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$ace&lt;/span&gt;&lt;span style="color: #000000"&gt;.AccessMask &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; [&lt;/span&gt;&lt;span style="color: #008080"&gt;System.Security.AccessControl.FileSystemRights&lt;/span&gt;&lt;span style="color: #000000"&gt;]&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000"&gt;FullControl&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$ace&lt;/span&gt;&lt;span style="color: #000000"&gt;.AceFlags &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000"&gt;0x3&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$ace&lt;/span&gt;&lt;span style="color: #000000"&gt;.AceType &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$ace&lt;/span&gt;&lt;span style="color: #000000"&gt;.Trustee &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$trustee&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; читаем текущий ACL с объекта&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$oldDACL&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;gwmi&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;Win32_LogicalFileSecuritySetting&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="font-style: italic; color: #5f9ea0"&gt;-filter&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000"&gt;path='$path'&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #000000"&gt;).GetSecurityDescriptor().Descriptor.DACL
&lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; добавляем его к пустому объекту DACL&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$SD&lt;/span&gt;&lt;span style="color: #000000"&gt;.DACL &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$oldDACL&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; и добавляем новый ACE&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$SD&lt;/span&gt;&lt;span style="color: #000000"&gt;.DACL &lt;/span&gt;&lt;span style="color: #ff0000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt; @(&lt;/span&gt;&lt;span style="color: #800080"&gt;$ace&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #000000"&gt;.psobject.baseobject)
&lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; устанавливаем флаг SE_DACL_PRESENT&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$SD&lt;/span&gt;&lt;span style="color: #000000"&gt;.ControlFlags &lt;/span&gt;&lt;span style="color: #ff0000"&gt;= &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000"&gt;0x4&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$folder&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;gwmi&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;Win32_LogicalFileSecuritySetting&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="font-style: italic; color: #5f9ea0"&gt;-filter&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000"&gt;path='$path'&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;span style="color: #800080"&gt;$folder&lt;/span&gt;&lt;span style="color: #000000"&gt;.setsecuritydescriptor(&lt;/span&gt;&lt;span style="color: #800080"&gt;$SD&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Я больше склонен доверять WMI и констатировать факт, что он работает честно – даёт мне делать с объектом что угодно и как угодно признавая мои права владения.&lt;/p&gt;

&lt;p&gt;Я считаю, что Set-Acl был сильно не прав, отказав мне в изменении пустых ACE, поэтому отрепортил это дело на connect:&lt;/p&gt;

&lt;p&gt;&lt;a title="https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=418906&amp;amp;SiteID=99" href="https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=418906&amp;amp;SiteID=99"&gt;https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=418906&amp;amp;SiteID=99&lt;/a&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.sysadmins.lv/aggbug.ashx?id=bcf4e2a2-5706-432c-97e7-efb4c710277e"/&gt;&lt;br/&gt;&lt;hr/&gt;PowerShell Powered - http://www.sysadmins.lv&lt;/div&gt;</description>
      <comments>http://www.sysadmins.lv/CommentView,guid,bcf4e2a2-5706-432c-97e7-efb4c710277e.aspx</comments>
      <category>PowerShell</category>
      <category>PowerShell / ACL</category>
    </item>
    <item>
      <trackback:ping>http://www.sysadmins.lv/Trackback.aspx?guid=22c0550d-0c46-44ca-97ce-2b0bccbb51de</trackback:ping>
      <pingback:server>http://www.sysadmins.lv/pingback.aspx</pingback:server>
      <pingback:target>http://www.sysadmins.lv/PermaLink,guid,22c0550d-0c46-44ca-97ce-2b0bccbb51de.aspx</pingback:target>
      <dc:creator>Camelot</dc:creator>
      <wfw:comment>http://www.sysadmins.lv/CommentView,guid,22c0550d-0c46-44ca-97ce-2b0bccbb51de.aspx</wfw:comment>
      <wfw:commentRss>http://www.sysadmins.lv/SyndicationService.asmx/GetEntryCommentsRss?guid=22c0550d-0c46-44ca-97ce-2b0bccbb51de</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <title>Управление принтерами в PowerShell (часть 3, заключительная)</title>
      <guid isPermaLink="false">http://www.sysadmins.lv/PermaLink,guid,22c0550d-0c46-44ca-97ce-2b0bccbb51de.aspx</guid>
      <link>http://www.sysadmins.lv/PermaLink,guid,22c0550d-0c46-44ca-97ce-2b0bccbb51de.aspx</link>
      <pubDate>Sat, 22 Nov 2008 18:11:28 GMT</pubDate>
      <description>&lt;div&gt;&lt;P&gt;Вот и пришло время закрыть тему управления принтерами и их списками ACL в PowerShell с использованием WMI. Я в блоге уже расписывал решение частных задач по основным задачам управления принтеров и по управлению их ACL списками. В этом посте я сложу все наработки по этому вопросу в единый концептуальный скрипт, который будет называться PrinterUtils.ps1 с достаточно объёмным набором функций, которые нацелены на упрощение для администраторов автоматизации принтеров с использованием PowerShell. Если кто-то захочет разобраться в работе скрипта и понять используемые приёмы, то предлагаю ознакомиться с следующими ссылками:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.sysadmins.lv/PermaLink,guid,41226cf5-e524-446f-85c0-4a958c6c769a.aspx"&gt;Управление принтерами в PowerShell (часть 1)&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://www.sysadmins.lv/PermaLink,guid,54cfbd81-dff6-4391-8ba0-13a17df9bc5f.aspx"&gt;Управление принтерами в PowerShell (часть 2)&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://www.sysadmins.lv/PermaLink,guid,4c56b6d6-b4d1-4d84-963e-a10d37140e9a.aspx"&gt;Странности метода SetSecurityDescriptor класса Win32_Printer (часть 1)&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://www.sysadmins.lv/PermaLink,guid,249809ac-0d9e-4b60-8109-5b756fba4496.aspx"&gt;Странности метода SetSecurityDescriptor класса Win32_Printer (часть 2)&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;В качестве основы я использовал свои предыдущие наработки с SecurityDescriptor в предыдущем блоге, когда разбирал вопрос управления SharePermissions из PowerShell:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://vpodans.spaces.live.com/blog/cns!BB1419A2CFC1E008!170.entry"&gt;Управление безопасностью общих папок (сетевых шар) в PowerShell (часть 1)&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://vpodans.spaces.live.com/blog/cns!BB1419A2CFC1E008!177.entry"&gt;Управление безопасностью общих папок (сетевых шар) в PowerShell (часть 2)&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://vpodans.spaces.live.com/blog/cns!BB1419A2CFC1E008!186.entry"&gt;Управление безопасностью общих папок (сетевых шар) в PowerShell (часть 3)&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://vpodans.spaces.live.com/blog/cns!BB1419A2CFC1E008!188.entry"&gt;Управление безопасностью общих папок (сетевых шар) в PowerShell (часть 4)&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Материала у меня на эту тему набралось достаточно много, чтобы проникнуться в идею работы классов WMI и SecurityDescriptor, который не раз пытался посадить меня в лужу :) Однако версия скрипта ShareUtils чётко говорит о том, что скрипт далеко не идеален и не оптимален, имеет свои недостатки, т.к. это был мой первый опыт работы с функциями. Сейчас я значительно переработал структуру работы скрипта (оставив только Core работы с SecurityDescriptor), добавив удалённое управление (в разумных пределах) и, главное (как мне кажется), реализовал работу функций в конвейере. Примеры использования скрипта распишу чуть ниже. Итак, представляю набор функций, которые реализованы в скрипте:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Подключение (маппинг) сетевого принтера к пользователю; 
&lt;LI&gt;Отключение маппинга сетевого принтера от пользователя; 
&lt;LI&gt;Получение сведений о принтерах; 
&lt;LI&gt;Установка принтера по умолчанию; 
&lt;LI&gt;Установка принтера для общего пользования (расшаривание принтера); 
&lt;LI&gt;Отмена принтера для общего пользования;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Данная секция представляет собой базовые возможности по управлению принтерами и полностью работоспособна в среде Windows XP/Windows Server 2003. А вот секция управления ACL списками принтеров доступна только в среде Windows Vista/Windows Server 2008. Сюда входят следующие функции:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Получение сведений о правах доступа на конкретный принтер, конкретный принтсервер или по списку компьютеров; 
&lt;LI&gt;Импорт сведений о правах доступа из внешнего источника. Это может быть и CSV и XML или другой формат; 
&lt;LI&gt;Добавление пользователя или группы в ACL список принтера или всех принтеров, которые подключены к принтсерверу; 
&lt;LI&gt;Удаление пользователя или группы из ACL списка принтера или всех принтеров, которые подключены к принтсерверу; 
&lt;LI&gt;Установка пользователя или группы в ACL список принтера или всех принтеров, которые подключены к принтеру. При этом все имеющиеся права доступа будут удалены и заменены только одним ACE с правом ManagePrinters.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Для этих функций полностью реализована поддержка удалённой работы и работа в конвейере. Синтаксис команд используется примерно следующий:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;New-NetworkPrinter -Computer &amp;lt;name&amp;gt; -name &amp;lt;name&amp;gt;&lt;BR&gt;&lt;/FONT&gt;где &lt;STRONG&gt;Computer&lt;/STRONG&gt; - имя компьютера, к которому подключён сетевой принтер&lt;BR&gt;&lt;STRONG&gt;Name&lt;/STRONG&gt; - сетевое имя принтера, который следует подключить к пользователю 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Remove-NetworkPrinter -Name &amp;lt;name&amp;gt;&lt;BR&gt;&lt;/FONT&gt;где &lt;STRONG&gt;Name&lt;/STRONG&gt; - имя примапленного сетевого принтера (не обязательный параметр). Если параметр Name не указан, то будут отключены все примапленные сетевые принтеры. 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Get-PrinterInfo -Computer &amp;lt;name&amp;gt; -Name &amp;lt;name&amp;gt;&lt;BR&gt;&lt;/FONT&gt;где &lt;STRONG&gt;Computer&lt;/STRONG&gt; - имя компьютера, к которому подключён принтер (не обязательный параметр. Если не указан, то будет использоваться локальная машина),&lt;BR&gt;&lt;STRONG&gt;Name&lt;/STRONG&gt; - имя принтера на удалённой или локальной машине, зависит от предыдущего параметра (не обязательный параметр. Если не указан, то будет выведена краткая справка о всех принтерах указанного компьютера. Если указан, то будет выведена подробная информация о принтере). Вывод данной команды не будет содержать сведений о правах доступа на принтер.&amp;nbsp; 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Set-DefaultPrinter -Name &amp;lt;name&amp;gt;&lt;BR&gt;&lt;/FONT&gt;где &lt;STRONG&gt;Name&lt;/STRONG&gt; - имя (или путь) принтера, который должен стать для пользователя принтером по умолчанию. 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;New-PrinterShare -Computer &amp;lt;name&amp;gt; -Name &amp;lt;name&amp;gt; -ShareName &amp;lt;name&amp;gt;&lt;BR&gt;&lt;/FONT&gt;где &lt;STRONG&gt;Computer&lt;/STRONG&gt; - имя компьютера, к которому подключён принтер (не обязательный параметр. Если не указан, будет использоваться локальная машина)&lt;BR&gt;&lt;STRONG&gt;Name&lt;/STRONG&gt; - имя принтера, который требуется предоставить для общего доступа&lt;BR&gt;&lt;STRONG&gt;ShareName&lt;/STRONG&gt; - сетевое имя принтера, т.е. имя, под которым принтер будет виден из сети 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Remove-PrinterShare -Computer &amp;lt;name&amp;gt; -Name &amp;lt;name&amp;gt;&lt;BR&gt;&lt;/FONT&gt;где &lt;STRONG&gt;Computer&lt;/STRONG&gt; - имя компьютера, к которому подключён принтер (не обязательный параметр. Если не указан, будет использоваться локальная машина)&lt;BR&gt;&lt;STRONG&gt;Name&lt;/STRONG&gt; - имя принтера, для которого необходимо отключить общий доступ (не обязательный параметр. Если не указан, то общий доступ будет отменён для всех расшаренных принтеров на выбранном предыдущим параметром компьютере) 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Get-Printer -Computer &amp;lt;name&amp;gt; -Name &amp;lt;name&amp;gt;&lt;BR&gt;&lt;/FONT&gt;где &lt;STRONG&gt;Computer&lt;/STRONG&gt; - имя компьютера, к которому подключён принтер (не обязательный параметр. Если не указан, будет использоваться локальная машина)&lt;BR&gt;&lt;STRONG&gt;Name&lt;/STRONG&gt; - имя принтера, для которого следует получить сведения о правах доступа (не обязательный параметр. Если не указан, то будут получены сведения об ACL всех принтеров на выбранном предыдущим параметром компьютере)&lt;BR&gt;Генерирует на выходе массив объектов с необходимыми сведениями о каждом ACE. Данный массив можно использовать как для изменения прав доступа, так и просто для экспорта во внешний файл. 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Set-Printer&lt;BR&gt;&lt;/FONT&gt;не принимает никаких аргументов, а только получает данные по конвейеру. В качестве входных данных должны использоваться объекты, которые по свойствам соответствуют объектам, которые генерирует команда Get-Printer. Команда не может быть в начале строки, а только на выходе конвейера, с которого поступают объекты. Так же по конвейеру можно передавать объекты из внешних файлов (например, CSV, XML) 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Add-PrinterPermission -User &amp;lt;name&amp;gt; -AceType &amp;lt;name&amp;gt; -AccessMask &amp;lt;name&amp;gt;&lt;BR&gt;&lt;/FONT&gt;где &lt;STRONG&gt;User&lt;/STRONG&gt; - имя пользователя/группы, которого следует добавить в ACL список принтера&lt;BR&gt;&lt;STRONG&gt;AceType&lt;/STRONG&gt; - тип доступа. Может быть &lt;STRONG&gt;Allow&lt;/STRONG&gt; или &lt;STRONG&gt;Deny&lt;/STRONG&gt;&lt;BR&gt;&lt;STRONG&gt;AccessMask&lt;/STRONG&gt; - маска доступа. Может иметь следующие значения: &lt;STRONG&gt;ManagePrinters&lt;/STRONG&gt;, &lt;STRONG&gt;ManageDocuments&lt;/STRONG&gt;, &lt;STRONG&gt;Print&lt;/STRONG&gt;, &lt;STRONG&gt;TakeOwnership&lt;/STRONG&gt;, &lt;STRONG&gt;ReadPermissions&lt;/STRONG&gt;, &lt;STRONG&gt;ChangePermissions&lt;/STRONG&gt;&lt;BR&gt;&lt;U&gt;Данная команда так же не может быть в начале строки, а должна находиться на выходе конвейера&lt;/U&gt;, с которого поступают объекты. В качестве входных данных должны использоваться объекты, которые по свойствам соответствуют объектам, которые генерирует команда Get-Printer. Команда не может быть в начале строки, а только на выходе конвейера, с которого поступают объекты. Так же по конвейеру можно передавать объекты из внешних файлов (например, CSV, XML) 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Remove-PrinterPermission -User &amp;lt;name&amp;gt;&lt;BR&gt;&lt;/FONT&gt;где &lt;STRONG&gt;User&lt;/STRONG&gt; - имя пользователя/группы, которого следует удалить из списка ACL принтера&lt;BR&gt;&lt;U&gt;Данная команда так же не может быть в начале строки, а должна находиться на выходе конвейера&lt;/U&gt;, с которого поступают объекты. В качестве входных данных должны использоваться объекты, которые по свойствам соответствуют объектам, которые генерирует команда Get-Printer. Команда не может быть в начале строки, а только на выходе конвейера, с которого поступают объекты. Так же по конвейеру можно передавать объекты из внешних файлов (например, CSV, XML) 
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Set-PrinterPermission -User &amp;lt;name&amp;gt;&lt;/FONT&gt;&lt;BR&gt;где &lt;STRONG&gt;User&lt;/STRONG&gt; - имя пользователя/группы, для которого следует предоставить привилегированный доступ.&lt;BR&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;Важно:&lt;/FONT&gt;&lt;/STRONG&gt; &lt;EM&gt;&lt;U&gt;при использовании команды Set-PrinterPermission следует помнить, что указанный пользователь/группа будут иметь единственный доступ к принтеру с правом ManagePrinters. При этом вероятно, что вы после исполнения команды потеряете доступ к принтеру&lt;/U&gt;&lt;/EM&gt;&lt;BR&gt;&lt;U&gt;Данная команда так же не может быть в начале строки, а должна находиться на выходе конвейера&lt;/U&gt;, с которого поступают объекты. В качестве входных данных должны использоваться объекты, которые по свойствам соответствуют объектам, которые генерирует команда Get-Printer. &lt;BR&gt;&lt;BR&gt;Команда не может быть в начале строки, а только на выходе конвейера, с которого поступают объекты. Так же по конвейеру можно передавать объекты из внешних файлов (например, CSV, XML) &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;и несколько примеров использования:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Get-Printer PrintSrv "MyPrinter" | export-csv C:\LaserJet.csv&lt;/FONT&gt; - экспортирует ACL списки принтера MyPrinter в CSV файл&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Get-Printer PrintSrv | Remove-PrinterPermission Everyone&lt;/FONT&gt; - удаляет группу Everyone из списков ACL всех принтеров сервера PrintSrv&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Import-Clixml C:\Printers.xml | Set-Printer&lt;/FONT&gt; - восстанавливает права для принтеров на те, которые содержатся в XML файле. При этом текущие списки ACL указанных в файле принтеров будут полностью перезаписаны списком ACL из файла.&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;Get-Content C:\Computers.txt | %{Get-printer $_ | Add-Printerpermission NewPrinterWorkers Allow Print}&lt;/FONT&gt; - даёт право печати на всех принтерах, которые подключены к компьютерам из списка computers.txt&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;New-NetworkPrinter PrintSrv "HP LaserJet 2100"&lt;/FONT&gt; - подключает пользователю в контексте котрого исполняется скрипт сетевой принтер HP LaserJet 2100, который физически подключен к компьютеру PrintSrv&lt;/P&gt;
&lt;P&gt;Это далеко не все варианты использования :) Вобщем, я старался создать достаточно широким функционалом, который обычно требуется в скриптах для принтменеджмента. Безусловно, он не охватывает все задачи и в нём реализованы только те функции, которые я посчитал актуальными. А вот, собственно и скрипт с небольшими комментариями по ходу дела:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT color=#009500&gt;########################################################&lt;BR&gt;# PrinterUtils.ps1&lt;BR&gt;# Version 0.1.0.0&lt;BR&gt;#&lt;BR&gt;# Functions for advanced printer management&lt;BR&gt;#&lt;BR&gt;# Vadims Podans (c) 2008&lt;BR&gt;# &lt;/FONT&gt;&lt;A href="http://www.sysadmins.lv/"&gt;&lt;FONT color=#009500&gt;http://www.sysadmins.lv/&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT color=#009500&gt;########################################################&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT color=#009500&gt;# внутренняя функция, которая преобразовывает числовой код возврата операции записи ACL&lt;BR&gt;# в текстовое значение.&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;function _PrinterUtils_Get-Code&lt;/STRONG&gt; ($Write) {&lt;BR&gt;switch ($Write.ReturnValue) {&lt;BR&gt;&amp;nbsp;&amp;nbsp; "0" {"Success"}&lt;BR&gt;&amp;nbsp;&amp;nbsp; "2" {"Access Denied"}&lt;BR&gt;&amp;nbsp;&amp;nbsp; "8" {"Unknown Error"}&lt;BR&gt;&amp;nbsp;&amp;nbsp; "9" {"The user does not have adequate privileges to execute the method"}&lt;BR&gt;&amp;nbsp;&amp;nbsp; "21" {"A parameter specified in the method call is invalid"}&lt;BR&gt;&amp;nbsp;&amp;nbsp; default {"Unknown error $Write.ReturnValue"}&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;} &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#009500&gt;# функция получения списка (списков) ACL принтера или всех принтеров&lt;BR&gt;&lt;/FONT&gt;&lt;STRONG&gt;function Get-Printer&lt;/STRONG&gt; ($Computer = ".", $name) {&lt;BR&gt;&lt;FONT color=#009500&gt;# Если переменная $name пустая, то возвращается список всех локальных принтеров&lt;/FONT&gt;&lt;BR&gt;if ($name) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Printers = gwmi&amp;nbsp; Win32_Printer -ComputerName&amp;nbsp; $Computer -Filter "name = '$name'"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Printers = gwmi Win32_Printer -ComputerName $Computer -Filter "local = '$True'"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;FONT color=#009500&gt;# объявление массива списков ACL&lt;BR&gt;&lt;/FONT&gt;$PrinterInfo = @()&lt;BR&gt;&lt;FONT color=#009500&gt;# извлечение списка ACL из каждого элемента массива списков ACL&lt;BR&gt;&lt;/FONT&gt;foreach ($Printer in $Printers) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($printer) {&lt;BR&gt;&lt;FONT color=#009500&gt;# в переменную $SD получаем дескриптор безопасности для каждого принтера и каждый элемент ACE (DACL)&lt;BR&gt;# и добавляем в $PrinterInfo&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $SD = $Printer.GetSecurityDescriptor()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $PrinterInfo += $SD.Descriptor.DACL | %{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $_ | Select @{e = {$Printer.SystemName}; n = 'Computer'},&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @{e = {$Printer.name}; n = 'Name'},&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccessMask,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AceFlags,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AceType,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @{e = {$_.trustee.Name}; n = 'User'},&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @{e = {$_.trustee.Domain}; n = 'Domain'},&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @{e = {$_.trustee.SIDString}; n = 'SID'}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Warning "Specified printer not found!"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;FONT color=#009500&gt;# выдача сведений об ACL на выход функции для последующей подачи на конвейер&lt;/FONT&gt;&lt;BR&gt;$PrinterInfo&lt;BR&gt;} &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#009500&gt;# функция записи в ACL принтера. Она не принимает никаких аргументов,&lt;BR&gt;# а только принимает данные с конвейера&lt;/FONT&gt;&lt;BR&gt;&lt;STRONG&gt;function Set-Printer&lt;/STRONG&gt; {&lt;BR&gt;&lt;FONT color=#009500&gt;# по конвейеру получаем массив ACE из внешнего источника&lt;/FONT&gt;&lt;BR&gt;$PrinterInfo = @($input)&lt;BR&gt;&lt;FONT color=#009500&gt;# расшиваем полученный массив по имени принтера и дальше по циклу подаём на&lt;BR&gt;# обработку только ACL одного принтера&lt;BR&gt;&lt;/FONT&gt;$PrinterInfo | Select -Unique Computer, Name | % {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Computer = $_.Computer&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $name = $_.name&lt;BR&gt;&lt;FONT color=#009500&gt;# создаём новые объекты необходимых классов&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ace = ([WMIClass] "Win32_Ace").CreateInstance()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()&lt;BR&gt;&lt;FONT color=#009500&gt;# теперь расшиваем каждый ACE уже отфильтрованного списка ACL из PrinterInfo и&lt;BR&gt;# заполняем форму SecurityDescriptor&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $PrinterInfo | ? {$_.Computer -eq $Computer -and $_.name -eq $name} | % {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $SID = new-object security.principal.securityidentifier($_.SID)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [byte[]] $SIDArray = ,0 * $SID.BinaryLength&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $SID.GetBinaryForm($SIDArray,0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Trustee.Name = $_.user&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Trustee.SID = $SIDArray&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ace.AccessMask = $_.AccessMask&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ace.AceType = $_.AceType&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ace.AceFlags = $_.AceFlags&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ace.trustee = $Trustee&lt;BR&gt;&lt;FONT color=#009500&gt;# набор ACE поэтапно добавляем в DACL дескриптора безопасности&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $SD.DACL += @($ace.psobject.baseobject)&lt;BR&gt;&lt;FONT color=#009500&gt;# устанавливаем флаг SE_DACL_PRESENT, что будет говорить о том, что мы изменяем&lt;BR&gt;# только DACL и ничего более&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $SD.ControlFlags = 0x0004&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;FONT color=#009500&gt;# когда полный список ACL для текущего принтера собран, выбираем имя текущего принтера&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Printer = gwmi Win32_Printer -ComputerName $Computer -Filter "name = '$name'"&lt;BR&gt;&lt;FONT color=#009500&gt;# проверяется, что принтер для записи ACL найден и производится запись.&lt;BR&gt;# В противном случае запись ACL пропускается&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($Printer) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Write = $Printer.SetSecurityDescriptor($SD)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Processing current printer: $name"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _PrinterUtils_Get-Code $Write&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Warning "Skipping non-present printer: $name"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;} &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#009500&gt;# внутренняя функция, которая только формирует объект пользователя с набором прав&lt;BR&gt;# и возвращает объект в вызывающую функцию для последующих преобразований&lt;/FONT&gt;&lt;BR&gt;&lt;STRONG&gt;function _Create-SDObject&lt;/STRONG&gt; ( $user, $AceType, $AccessMask) {&lt;BR&gt;&lt;FONT color=#009500&gt;# преобразование текстового вида прав в числовые значения&lt;/FONT&gt;&lt;BR&gt;$masks = @{ManagePrinters = 983052; ManageDocuments = 983088; Print = 131080;&lt;BR&gt;TakeOwnership = 524288; ReadPermissions = 131072; ChangePermissions = 262144}&lt;BR&gt;$types = @{Allow = 0; Deny = 1}&lt;BR&gt;&lt;FONT color=#009500&gt;# создание необходимых свойств для объекта. Для поддержки удалённого управления&lt;BR&gt;# было добавлено свойство Computer, которое будет принимать от Get-Printer аналогичное&lt;BR&gt;# значение. Тем самым обеспечивается сквозная трансляция имени компьютера, где&lt;BR&gt;# подключен принтер, по конвейеру для последующей записи&lt;BR&gt;&lt;/FONT&gt;$AddInfo = New-Object System.Management.Automation.PSObject&lt;BR&gt;$AddInfo | Add-Member NoteProperty Computer&amp;nbsp; ([PSObject]$null)&lt;BR&gt;$AddInfo | Add-Member NoteProperty Name&amp;nbsp; ([PSObject]$null)&lt;BR&gt;$AddInfo | Add-Member NoteProperty AccessMask&amp;nbsp; ([uint32]$null)&lt;BR&gt;$AddInfo | Add-Member NoteProperty AceFlags&amp;nbsp; ([uint32]$null)&lt;BR&gt;$AddInfo | Add-Member NoteProperty AceType&amp;nbsp; ([uint32]$null)&lt;BR&gt;$AddInfo | Add-Member NoteProperty User&amp;nbsp; ([PSObject]$null)&lt;BR&gt;$AddInfo | Add-Member NoteProperty Domain&amp;nbsp; ([PSObject]$null)&lt;BR&gt;$AddInfo | Add-Member NoteProperty SID&amp;nbsp; ([PSObject]$null)&lt;BR&gt;&lt;FONT color=#009500&gt;# заполнение объекта данными, которые были указаны в качестве аргументов вызова функции и возврат&lt;BR&gt;# объекта в вызывающую функцию&lt;BR&gt;&lt;/FONT&gt;$AddInfo.Name = $name&lt;BR&gt;$AddInfo.User = $user&lt;BR&gt;$AddInfo.SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])&lt;BR&gt;$AddInfo.AccessMask = $masks.$AccessMask&lt;BR&gt;$AddInfo.AceType = $types.$AceType&lt;BR&gt;$AddInfo&lt;BR&gt;} &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#009500&gt;# функция для установки разрешений на принтер. При её использовании, текущий ACL очищается&lt;BR&gt;# от всех записей и устанавливается только один ползователь/группа с правом ManagePrinters&lt;BR&gt;&lt;/FONT&gt;&lt;STRONG&gt;function Set-PrinterPermission&lt;/STRONG&gt; ($user) {&lt;BR&gt;&lt;FONT color=#009500&gt;# принимаются данные с конвейера&lt;/FONT&gt; &lt;BR&gt;$PrinterInfo = @($input)&lt;BR&gt;$AddInfo = _Create-SDObject $user Allow ManagePrinters&lt;BR&gt;&lt;FONT color=#009500&gt;# в этом цикле перебираются по именам все имена принтеров и для каждого из них&lt;BR&gt;# записывается указанный в аргументах пользователь с удалением текущих ACE из ACL принтера&lt;BR&gt;# это видно по тому, что никакая часть $PrinterInfo не передаётся по конвейеру на запись&lt;BR&gt;&lt;/FONT&gt;foreach ($Printer in ($PrinterInfo | select -Unique Computer, Name)) {&lt;BR&gt;$AddInfo.Computer = $Printer.Computer&lt;BR&gt;$AddInfo.Name = $Printer.name&lt;BR&gt;$AddInfo | Set-Printer&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;} &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#009500&gt;# функция добавления пользователя/группу в имеющийся список ACL принтера. Основное отличие от&lt;BR&gt;# предыдущего варианта, что для каждого принтера ACE не устанавливается, а добавляется&lt;BR&gt;&lt;/FONT&gt;&lt;STRONG&gt;function Add-PrinterPermission&lt;/STRONG&gt; ($user, $AceType, $AccessMask) {&lt;BR&gt;$PrinterInfo = @($input)&lt;BR&gt;$AddInfo = _Create-SDObject $user $AceType $AccessMask&lt;BR&gt;foreach ($Printer in ($PrinterInfo | select -Unique Computer, Name)) {&lt;BR&gt;$AddInfo.Name = $Printer.name&lt;BR&gt;$AddInfo.Computer = $Printer.Computer&lt;BR&gt;&lt;FONT color=#009500&gt;# вот этой строкой мы из списка всех принтеров итеративно перебираем каждый принтер&lt;BR&gt;&lt;/FONT&gt;$PrinterInfoNew = $PrinterInfo | ?{$_.name -eq $Printer.name}&lt;BR&gt;&lt;FONT color=#009500&gt;# и в хвост списка ACL добавляем новый ACE&lt;BR&gt;&lt;/FONT&gt;$PrinterInfoNew += $AddInfo&lt;BR&gt;&lt;FONT color=#009500&gt;# и подаём на запись&lt;/FONT&gt;&lt;BR&gt;$PrinterInfoNew | Set-Printer&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;} &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#009500&gt;# функция для удаления ACE пользователя/группы из ACL&lt;/FONT&gt;&lt;BR&gt;&lt;STRONG&gt;function Remove-PrinterPermission&lt;/STRONG&gt; ($user) {&lt;BR&gt;$Printers = @($input)&lt;BR&gt;&lt;FONT color=#009500&gt;# просто берём списки ACL, которые пришли по конвейеру и выкидываем оттуда все ACE,&lt;BR&gt;# в которых фигурирует указанный в аргументах пользователь/группа и записывем ACE обратно в ACL&lt;BR&gt;&lt;/FONT&gt;$printers | ? {$_.user -ne $user} | Set-Printer&lt;BR&gt;} &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;function New-NetworkPrinter&lt;/STRONG&gt; ($Computer, $name) {&lt;BR&gt;([wmiclass]'Win32_Printer').AddPrinterConnection("\\$Computer\$name")&lt;BR&gt;} &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;function Remove-NetworkPrinter&lt;/STRONG&gt; ($name) {&lt;BR&gt;if ($name) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (gwmi Win32_Printer -Filter "sharename='$name'").delete()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (gwmi Win32_Printer -Filter "local='$false'").delete()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;} &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;function Set-DefaultPrinter&lt;/STRONG&gt; ($name) {&lt;BR&gt;if (!$name) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Warning "You must to specify printer name. Operation aborted!"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (gwmi win32_Printer -Filter "name='$name'") {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $SetDefault = (gwmi win32_Printer -Filter "name='$name'").SetDefaultPrinter()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch ($SetDefault.ReturnValue) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "0" {Write-Host "Now your default printer is $name"}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default {Write-Warning "Some error occur"}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Warning "Specified printer not exist!"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;} &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;function Get-PrinterInfo&lt;/STRONG&gt; ($Computer = ".", $name) {&lt;BR&gt;&lt;FONT color=#009500&gt;# здесь я предлагаю получить как полный набор свойств, так и упрощённый вывод сведений.&lt;/FONT&gt; &lt;BR&gt;if ($name) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gwmi Win32_Printer -ComputerName $Computer -Filter "name='$name'" | select *&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gwmi Win32_Printer -ComputerName $Computer&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;} &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;function New-PrinterShare&lt;/STRONG&gt; ($Computer = ".", $name, $ShareName) { &lt;BR&gt;$Printer = gwmi win32_Printer -ComputerName $Computer -Filter "name='$name'"&lt;BR&gt;if ($Printer) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Printer.shared = $True&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Printer.ShareName = $ShareName&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Printer.put()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Warning "Specified printer not exist!"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;} &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;function Remove-PrinterShare&lt;/STRONG&gt; ($Computer = ".", $name) {&lt;BR&gt;if ($name) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $filter = "name = '$name'"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $filter = "local = '$false'"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;gwmi Win32_Printer -ComputerName $Computer -Filter $filter | % {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $_.shared = $false&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $_.put()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;многовато, конечно же, но ничего космически сложного для разбора я тут не вижу. Главное - чёткое понимание структуры SecurityDescriptor и хотя бы базовые навыки работы с ним.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;Важно:&lt;/FONT&gt;&lt;/STRONG&gt; &lt;U&gt;если не указываете необязательные параметры, то указание последующих параметров в виде именованных (не позиционных) обязательна!&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Даже не знаю, что ещё добавить сюда. Вроде все вопросы разобрал ранее, сейчас просто это всё собрал воедино. Вобщем, как обычно, если есть вопросы, замечания - кнопка Comments вам в помощь &lt;img alt=";)" src="/smilies/wink.gif"&gt;&lt;/P&gt;&lt;img width="0" height="0" src="http://www.sysadmins.lv/aggbug.ashx?id=22c0550d-0c46-44ca-97ce-2b0bccbb51de"/&gt;&lt;br/&gt;&lt;hr/&gt;PowerShell Powered - http://www.sysadmins.lv&lt;/div&gt;</description>
      <comments>http://www.sysadmins.lv/CommentView,guid,22c0550d-0c46-44ca-97ce-2b0bccbb51de.aspx</comments>
      <category>PowerShell</category>
      <category>PowerShell / ACL</category>
      <category>PowerShell / WMI</category>
    </item>
    <item>
      <trackback:ping>http://www.sysadmins.lv/Trackback.aspx?guid=249809ac-0d9e-4b60-8109-5b756fba4496</trackback:ping>
      <pingback:server>http://www.sysadmins.lv/pingback.aspx</pingback:server>
      <pingback:target>http://www.sysadmins.lv/PermaLink,guid,249809ac-0d9e-4b60-8109-5b756fba4496.aspx</pingback:target>
      <dc:creator>Camelot</dc:creator>
      <wfw:comment>http://www.sysadmins.lv/CommentView,guid,249809ac-0d9e-4b60-8109-5b756fba4496.aspx</wfw:comment>
      <wfw:commentRss>http://www.sysadmins.lv/SyndicationService.asmx/GetEntryCommentsRss?guid=249809ac-0d9e-4b60-8109-5b756fba4496</wfw:commentRss>
      <title>Странности метода SetSecurityDescriptor класса Win32_Printer (часть 2)</title>
      <guid isPermaLink="false">http://www.sysadmins.lv/PermaLink,guid,249809ac-0d9e-4b60-8109-5b756fba4496.aspx</guid>
      <link>http://www.sysadmins.lv/PermaLink,guid,249809ac-0d9e-4b60-8109-5b756fba4496.aspx</link>
      <pubDate>Wed, 19 Nov 2008 16:36:47 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Итак, как я и обещал, я вернулся к вопросу изменения ACL принтеров в PowerShell. В первой части (&lt;a title="Странности метода SetSecurityDescriptor класса Win32_Printer" href="http://www.sysadmins.lv/PermaLink,guid,4c56b6d6-b4d1-4d84-963e-a10d37140e9a.aspx"&gt;Странности метода SetSecurityDescriptor класса Win32_Printer&lt;/a&gt;) я изложил проблематику вопроса. В конечном итоге я сегодня смог найти решение, которое оказалось не совсем понятным, но относительно предсказуемым.&lt;/p&gt; &lt;p&gt;Вернёмся снова к документации MSDN: &lt;a href="http://msdn.microsoft.com/en-us/library/aa393594(VS.85).aspx" target="_blank"&gt;SetSecurityDescriptor Method of the Win32_Printer Class&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Это, конечно же, было моим попустительством, что не указал флаг управления &lt;strong&gt;SE_DACL_PRESENT&lt;/strong&gt; и не включил привилегии &lt;strong&gt;SeSecurityPrivilege&lt;/strong&gt; ("&lt;em&gt;&lt;u&gt;умение читать - первое умение системного администратора&lt;/u&gt;&lt;/em&gt;" (c) &lt;strong&gt;Peter.G&lt;/strong&gt;). Понимание этого факта пришло после очередного прочтения поста о смене владельца папки (&lt;a href="http://www.sysadmins.lv/PermaLink,guid,243d77ee-4975-4335-9abf-ce8660e9439c.aspx"&gt;Смена владельца папки или файла в PowerShell (часть 2)&lt;/a&gt;). Что касается флагов управления, то выложу здесь значения флагов:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;SE_OWNER_DEFAULTED = 0x0001  &lt;li&gt;SE_GROUP_DEFAULTED = 0x0002  &lt;li&gt;&lt;strong&gt;SE_DACL_PRESENT = 0x0004&lt;/strong&gt;  &lt;li&gt;SE_DACL_DEFAULTED =&amp;nbsp; 0x0008  &lt;li&gt;SE_SACL_PRESENT = 0x0010  &lt;li&gt;SE_SACL_DEFAULTED = 0x0020  &lt;li&gt;SE_DACL_AUTO_INHERIT_REQ = 0x0100  &lt;li&gt;SE_SACL_AUTO_INHERIT_REQ =0x0200  &lt;li&gt;SE_DACL_AUTO_INHERITED = 0x0400  &lt;li&gt;SE_SACL_AUTO_INHERITED = 0x0800  &lt;li&gt;SE_DACL_PROTECTED = 0x1000  &lt;li&gt;SE_SACL_PROTECTED = 0x2000  &lt;li&gt;SE_RM_CONTROL_VALID = 0x4000  &lt;li&gt;SE_SELF_RELATIVE = 0x8000&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Здесь я выделил жирным тот флаг, который нам нужен.&lt;/p&gt; &lt;p&gt;Добавим эту строчку к скрипту и добавим включение привилегий. И мы должны будем получить примерно такой скрипт:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#0000ff"&gt;$user = "everyone"&lt;br&gt;$SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()&lt;br&gt;$ace = ([WMIClass] "Win32_Ace").CreateInstance()&lt;br&gt;$Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()&lt;br&gt;$SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])&lt;br&gt;[byte[]] $SIDArray = ,0 * $SID.BinaryLength&lt;br&gt;$SID.GetBinaryForm($SIDArray,0)&lt;br&gt;$Trustee.Name = $user&lt;br&gt;$Trustee.SID = $SIDArray&lt;br&gt;$ace.AccessMask = 393224&lt;br&gt;$ace.AceType = 0&lt;br&gt;$ace.AceFlags = 0&lt;br&gt;$ace.Trustee = $Trustee&lt;br&gt;$SD.DACL = $ace&lt;br&gt;&lt;strong&gt;$SD.ControlFlags = 0x0004&lt;/strong&gt;&lt;br&gt;$Printer = gwmi win32_printer -filter "name='CutePDF Writer'"&lt;br&gt;&lt;strong&gt;$Printer.psbase.Scope.Options.EnablePrivileges = $true&lt;/strong&gt;&lt;br&gt;$inParams = $Printer.psbase.GetMethodParameters("SetSecurityDescriptor")&lt;br&gt;$inParams.Descriptor = $SD&lt;br&gt;$Printer.SetSecurityDescriptor($inParams)&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Пробуем запустить его:&lt;/p&gt; &lt;blockquote&gt;&lt;pre style="font: 9pt courier new; color: #fff; background-color: black"&gt;&lt;font color="#009500"&gt;&lt;span  #009500?; background-color: black?&gt;&lt;p&gt;
[System32] $user = "everyone"
[System32] $SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()
[System32] $ace = ([WMIClass] "Win32_Ace").CreateInstance()
[System32] $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()
[System32] $SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])
[System32] [byte[]] $SIDArray = ,0 * $SID.BinaryLength
[System32] $SID.GetBinaryForm($SIDArray,0)
[System32] $Trustee.Name = $user
[System32] $Trustee.SID = $SIDArray
[System32] $ace.AccessMask = 393224
[System32] $ace.AceType = 0
[System32] $ace.AceFlags = 0
[System32] $ace.Trustee = $Trustee
[System32] $SD.DACL = $ace
[System32] $SD.ControlFlags = 0x0004
[System32] $Printer = gwmi win32_printer -filter "name='CutePDF Writer'"
[System32] $Printer.psbase.Scope.Options.EnablePrivileges = $true
[System32] $inParams = $Printer.psbase.GetMethodParameters("SetSecurityDescriptor")
[System32] $inParams.Descriptor = $SD
[System32] $Printer.SetSecurityDescriptor($inParams)


__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ReturnValue      : 2147749896



[System32]&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;И снова мы получаем ошибку, которая указывает, что какой-то параметр вызова неверный. Снова посмотрев предыдущую статью, я стал понимать в чём тут дело. А дело в том, что метод &lt;strong&gt;SetSecurityDescripto&lt;/strong&gt;r в этом классе не принимает параметр &lt;strong&gt;Descriptor&lt;/strong&gt; (хотя он есть в выдаче команды &lt;strong&gt;GetSecurityDescriptor&lt;/strong&gt;) и в MSDN чётко указано:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;uint32 SetSecurityDescriptor( 
&lt;p&gt;[in] Win32_SecurityDescriptor &lt;em&gt;&lt;strong&gt;Descriptor&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;); &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;При этом, в методе &lt;a href="http://msdn.microsoft.com/en-us/library/aa393598(VS.85).aspx" target="_blank"&gt;SetShareInfo&lt;/a&gt; класса Win32_Share параметр Access я указывал и всё проходило на "ура". Здесь мы сталкиваемся с отсутствием единого формата использования метода SetSecurityDescriptor (отсутствие единого формата параметров я уже указывал в первой части) для различных WMI классов. И если один приём работает для одного класса, то, увы, далеко не гарантия, что этот же приём сработает для другого. Поэтому выкинем 2 предпоследние строчки из скрипта и в последней строке вместо аргумента &lt;strong&gt;$inParams&lt;/strong&gt; заменим на &lt;strong&gt;$SD&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="font: 9pt courier new; color: #fff; background-color: black"&gt;&lt;font color="#009500"&gt;&lt;span  #009500?; background-color: black?&gt;&lt;p&gt;[System32] $user = "everyone"
[System32] $SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()
[System32] $ace = ([WMIClass] "Win32_Ace").CreateInstance()
[System32] $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()
[System32] $SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])
[System32] [byte[]] $SIDArray = ,0 * $SID.BinaryLength
[System32] $SID.GetBinaryForm($SIDArray,0)
[System32] $Trustee.Name = $user
[System32] $Trustee.SID = $SIDArray
[System32] $ace.AccessMask = 393224
[System32] $ace.AceType = 0
[System32] $ace.AceFlags = 0
[System32] $ace.Trustee = $Trustee
[System32] $SD.DACL = $ace
[System32] $SD.ControlFlags = 0x0004
[System32] $Printer = gwmi win32_printer -filter "name='CutePDF Writer'"
[System32] $Printer.psbase.Scope.Options.EnablePrivileges = $true
[System32] $Printer.SetSecurityDescriptor($SD)


__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ReturnValue      : 0



[System32]&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Вуаля! Мы получили ReturnValue=0, что означает успешное выполнение команды. Давайте убедимся, что группа Everyone имеет маску доступа 393224 (это &lt;strong&gt;ReadPermissions&lt;/strong&gt;, &lt;strong&gt;ChangePermissions&lt;/strong&gt; и &lt;strong&gt;Print&lt;/strong&gt;). Для этого снова вызовем метод GetSecurityDescriptor для нового образца класса Win32_Printer:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="font: 9pt courier new; color: #fff; background-color: black"&gt;&lt;font color="#009500"&gt;&lt;span  #009500?; background-color: black?&gt;&lt;p&gt;[System32] $a = (gwmi win32_Printer -filter "name='cutepdf writer'").getsecuritydescriptor()
[System32] $a.descriptor.dacl[0]


__GENUS                 : 2
__CLASS                 : Win32_ACE
__SUPERCLASS            : __ACE
__DYNASTY               : __SecurityRelatedClass
__RELPATH               :
__PROPERTY_COUNT        : 7
__DERIVATION            : {__ACE, __SecurityRelatedClass}
__SERVER                :
__NAMESPACE             :
__PATH                  :
AccessMask              : 393224
AceFlags                : 0
AceType                 : 0
GuidInheritedObjectType :
GuidObjectType          :
TIME_CREATED            :
Trustee                 : System.Management.ManagementBaseObject



[System32] $a.descriptor.dacl[0].trustee


__GENUS          : 2
__CLASS          : Win32_Trustee
__SUPERCLASS     : __Trustee
__DYNASTY        : __SecurityRelatedClass
__RELPATH        :
__PROPERTY_COUNT : 6
__DERIVATION     : {__Trustee, __SecurityRelatedClass}
__SERVER         :
__NAMESPACE      :
__PATH           :
Domain           :
Name             : Everyone
SID              : {1, 1, 0, 0...}
SidLength        : 12
SIDString        : S-1-1-0
TIME_CREATED     :



[System32]&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Вот теперь мы видим нашу маску доступа (&lt;strong&gt;AccessMask=393224&lt;/strong&gt;) в корне &lt;strong&gt;DACL&lt;/strong&gt; и нашего уважаемого &lt;strong&gt;everyone&lt;/strong&gt; в &lt;strong&gt;Trustee&lt;/strong&gt;. &lt;img alt="Rock" src="/smilies/blush.gif"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Примечание:&lt;/font&gt;&lt;/strong&gt; &lt;u&gt;данный скрипт удаляет все имеющиеся ACE из ACL принтера и записывает новый единственный ACE. Не забывайте об этом.&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Теперь я закрываю этот вопрос. Что же дальше? А дальше будет вот что: я напишу готовый набор функций для управления ACL списками принтеров. Какой это будет набор - я пока в процессе разработки его структуры, но однозначно будут функции вида Get- Set- Add- Remove- PrinterPermission. Возможно будут добавлены функции для владельцев. Но об этом уже в следующий раз, так что продолжение следует однозначно &lt;img alt="happy" src="/smilies/veryhappy.gif"&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.sysadmins.lv/aggbug.ashx?id=249809ac-0d9e-4b60-8109-5b756fba4496"/&gt;&lt;br/&gt;&lt;hr/&gt;PowerShell Powered - http://www.sysadmins.lv&lt;/div&gt;</description>
      <comments>http://www.sysadmins.lv/CommentView,guid,249809ac-0d9e-4b60-8109-5b756fba4496.aspx</comments>
      <category>PowerShell</category>
      <category>PowerShell / ACL</category>
      <category>PowerShell / WMI</category>
    </item>
    <item>
      <trackback:ping>http://www.sysadmins.lv/Trackback.aspx?guid=243d77ee-4975-4335-9abf-ce8660e9439c</trackback:ping>
      <pingback:server>http://www.sysadmins.lv/pingback.aspx</pingback:server>
      <pingback:target>http://www.sysadmins.lv/PermaLink,guid,243d77ee-4975-4335-9abf-ce8660e9439c.aspx</pingback:target>
      <dc:creator>Camelot</dc:creator>
      <wfw:comment>http://www.sysadmins.lv/CommentView,guid,243d77ee-4975-4335-9abf-ce8660e9439c.aspx</wfw:comment>
      <wfw:commentRss>http://www.sysadmins.lv/SyndicationService.asmx/GetEntryCommentsRss?guid=243d77ee-4975-4335-9abf-ce8660e9439c</wfw:commentRss>
      <title>Смена владельца папки или файла в PowerShell (часть 2)</title>
      <guid isPermaLink="false">http://www.sysadmins.lv/PermaLink,guid,243d77ee-4975-4335-9abf-ce8660e9439c.aspx</guid>
      <link>http://www.sysadmins.lv/PermaLink,guid,243d77ee-4975-4335-9abf-ce8660e9439c.aspx</link>
      <pubDate>Mon, 17 Nov 2008 00:19:53 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;Как-то давно &lt;a href="http://stanky2.spaces.live.com/"&gt;Александр Станкевич&lt;/a&gt; просил у меня вариант скрипта, который бы менял владельца файла или папки из PowerShell. В своё время я занимался этим вопросом и результат моих исследований:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://vpodans.spaces.live.com/blog/cns!BB1419A2CFC1E008!155.entry" target="_blank"&gt;Управление ACL в PowerShell (часть 3)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://vpodans.spaces.live.com/blog/cns!BB1419A2CFC1E008!161.entry" target="_blank"&gt;Смена владельца (Owner) папки или файла&lt;/a&gt; (часть 1) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Что-то меня натолкнуло снова вернуться к этому вопросу. Учитывая проблематику, изложенных в предыдущих статьях, я перестал искать нативный способ изменения владельца в PowerShell через .NET и решил поискать его в WMI (что означает очередные мучения многострадального SecurityDescriptor &lt;img alt=":'(" src="/smilies/unhappy.gif"&gt; ). Итак, у WMI есть несколько классов для работы с &lt;strong&gt;ACL&lt;/strong&gt; (&lt;em&gt;AccessControlList&lt;/em&gt;) файлов и папок. Например:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa394130(VS.85).aspx" target="_blank"&gt;Win32_Directory&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa394180(VS.85).aspx" target="_blank"&gt;Win32_LogicalFileSecuritySetting&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Я для решения данной задачи решил использовать класс &lt;strong&gt;Win32_LogicalFileSecuritySetting&lt;/strong&gt; (хотя, можно и Win32_Directory использовать но после мелкой доработки. Но об этом я выскажусь в конце статьи).&lt;/p&gt;  &lt;p&gt;Итак, класс &lt;strong&gt;Win32_LogicalFileSecuritySetting&lt;/strong&gt; имеет те же методы, что и остальные классы, работающие со списками ACL - &lt;a href="http://msdn.microsoft.com/en-us/library/aa390773(VS.85).aspx" target="_blank"&gt;GetSecurityDescriptor&lt;/a&gt; и &lt;a href="http://msdn.microsoft.com/en-us/library/aa393592(VS.85).aspx" target="_blank"&gt;SetSecurityDescriptor&lt;/a&gt;. Я уже неоднократно поднимал вопрос работы с &lt;a href="http://msdn.microsoft.com/en-us/library/aa394577.aspx" target="_blank"&gt;SecurityDescriptor&lt;/a&gt; в PowerShell, поэтому приступим сразу к решению задачи.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.sysadmins.lv/content/binary/WindowsLiveWriter/PowerShell_F12F/SecurityDescriptor%20Structure_2.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" border="0" alt="SecurityDescriptor Structure" src="http://www.sysadmins.lv/content/binary/WindowsLiveWriter/PowerShell_F12F/SecurityDescriptor%20Structure_thumb.png" width="477" height="369" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Как видно из картинки, нас будет интересовать объект &lt;strong&gt;Owner&lt;/strong&gt; и &lt;strong&gt;ControlFlags&lt;/strong&gt;. Объект &lt;strong&gt;DACL&lt;/strong&gt; нас не будет интересовать совсем, поэтому работать с Win32_Ace нам не придётся, а только с Trustee:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;&lt;span style="color: #800080"&gt;$SD&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; ([&lt;/span&gt;&lt;span style="color: #008080"&gt;WMIClass&lt;/span&gt;&lt;span style="color: #000000"&gt;] &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Win32_SecurityDescriptor&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;).CreateInstance()
&lt;/span&gt;&lt;span style="color: #800080"&gt;$Trustee&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; ([&lt;/span&gt;&lt;span style="color: #008080"&gt;WMIClass&lt;/span&gt;&lt;span style="color: #000000"&gt;] &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Win32_Trustee&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;).CreateInstance()&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Далее следует стандартная процедура преобразования имени пользователя в SID и получение байтового массива из SID'а:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;&lt;span style="color: #800080"&gt;$SID&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;security.principal.ntaccount&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$user&lt;/span&gt;&lt;span style="color: #000000"&gt;).translate([&lt;/span&gt;&lt;span style="color: #008080"&gt;security.principal.securityidentifier&lt;/span&gt;&lt;span style="color: #000000"&gt;])
[&lt;/span&gt;&lt;span style="color: #008080"&gt;byte&lt;/span&gt;&lt;span style="color: #000000"&gt;[]] &lt;/span&gt;&lt;span style="color: #800080"&gt;$SIDArray&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; ,&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$SID&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #8b4513"&gt;BinaryLength&lt;/span&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;span style="color: #800080"&gt;$SID&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #8b4513"&gt;GetBinaryForm&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800080"&gt;$SIDArray&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Теперь $SIDArray и имя пользователя запишем в Trustee и поместим этот объект в свойство Owner дескриптора безопасности:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;&lt;span style="color: #800080"&gt;$Trustee&lt;/span&gt;&lt;span style="color: #000000"&gt;.Name &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$user&lt;/span&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;span style="color: #800080"&gt;$Trustee&lt;/span&gt;&lt;span style="color: #000000"&gt;.SID &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$SIDArray&lt;/span&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;span style="color: #800080"&gt;$SD&lt;/span&gt;&lt;span style="color: #000000"&gt;.Owner &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$Trustee&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Для того, чтобы заменить владельца папки нужно заполнить объект Control Flags, которые описаны здесь: &lt;a title="http://msdn.microsoft.com/en-us/library/aa394402(VS.85).aspx" href="http://msdn.microsoft.com/en-us/library/aa394402(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/aa394402(VS.85).aspx&lt;/a&gt;. Не уверен, что стоит углубляться в этот момент (на практике очень редко приходится им пользоваться), поэтому скажу, что нас заинтересует флаг &lt;strong&gt;SE_SELF_RELATIVE&lt;/strong&gt;. Заполняется он одной строчкой:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;&lt;span style="color: #800080"&gt;$SD&lt;/span&gt;&lt;span style="color: #000000"&gt;.ControlFlags&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&lt;strong&gt;0x8000&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Его можно записывать как десятичное число (&lt;strong&gt;32768&lt;/strong&gt;), так и в HEX нотации. Я использую HEX. Вот и всё, дескриптор безопасности у нас готов. Теперь самое время получить ACL в формате SecurityDescriptor из имеющейся папки:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;&lt;span style="color: #800080"&gt;$wPrivilege&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;gwmi&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;Win32_LogicalFileSecuritySetting&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="font-style: italic; color: #5f9ea0"&gt;-filter&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;path='$path'&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Вот теперь мы вплотную подошли к нашей проблеме. К слову говоря, если этот скрипт использовать в Windows Vista/Windows Server 2008 с повышенными привилегиями (запустив консоль в привилегированном режиме), то можно добавлять последнюю строчку с записью нового владельца в папку. В системах, где есть UAC нету такой проблемы, которая описана в ссылках, которые приведены в начале поста, поскольку при запуске консоли с повышенными привилегиями UAC включает для нас все необходимые привилегии (в частности &lt;strong&gt;SeRestorePrivilege&lt;/strong&gt; и &lt;strong&gt;SeTakeOwnershipPrivilege&lt;/strong&gt;, которые необходимы для этой операции). Но в более ранних ОС при запуске консоли PowerShell эти права не включаются и их нужно включать отдельно. Если в .NET нету нативного метода включения этих привилегий, то в WMI они есть и вот они:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;&lt;span style="color: #800080"&gt;$wPrivilege&lt;/span&gt;&lt;span style="color: #000000"&gt;.psbase.Scope.Options.EnablePrivileges &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$true&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;В Options помимо включения привилегий можно указывать имперсонализацию пользователя (Impersonate) и другие параметры. Чтобы посмотреть доступные свойства достаточно набрать в консоли:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;&lt;span style="color: #800080"&gt;$wPrivilege&lt;/span&gt;&lt;span style="color: #000000"&gt;.psbase.scope.options | &lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;Get-Member&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Когда привилегии включены, можно уже записывать дескриптор в папку при помощи метода &lt;a href="http://msdn.microsoft.com/en-us/library/aa393592(VS.85).aspx" target="_blank"&gt;SetSecurityDescriptor&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;&lt;span style="color: #800080"&gt;$wPrivilege&lt;/span&gt;&lt;span style="color: #000000"&gt;.setsecuritydescriptor(&lt;/span&gt;&lt;span style="color: #800080"&gt;$SD&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Если имя папки указано верно, то в выводе &lt;strong&gt;ReturnValue&lt;/strong&gt; должен вернуть значение &lt;strong&gt;0&lt;/strong&gt;, что означает, что владелец сменён! &lt;img alt="Rock" src="/smilies/blush.gif"&gt; и мы небольшим (но для PowerShell'а это уже много, учитывая что многие вещи в нём делаются в одну строчку &lt;img alt=";)" src="/smilies/wink.gif"&gt; ) увеличением объёма кода можем полноценно изменять владельца файла или папки без установки дополнительных расширений, как PSCX или отдельных консольных утилит, как SubInAcl или SetAcl.&lt;/p&gt;

&lt;p&gt;Теперь это всё окультурим в готовый скрипт:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;Set-Owner&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #800080"&gt;$user&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #800080"&gt;$Path&lt;/span&gt;&lt;span style="color: #000000"&gt;) {
    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #ff0000"&gt;!&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;Test-Path&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="font-style: italic; color: #5f9ea0"&gt;-LiteralPath&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$Path&lt;/span&gt;&lt;span style="color: #000000"&gt;)) {&lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;Write-Warning&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Указан неверный путь к папке&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;}
    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt; {
        &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; преобразовываем путь вида C:\Folder в C:\\Folder (к слешу пути добавляем ещё один&lt;/span&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; для корректной работы класса Win32_LogicalFileSecuritySetting и эскейпим другие символы&lt;/span&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;/span&gt;&lt;span style="color: #800080"&gt;$path&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$path&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;\\|'&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;\$0&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;
        &lt;/span&gt;&lt;span style="color: #800080"&gt;$Path&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$Path&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;\[&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;$([char]91)&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;
        &lt;/span&gt;&lt;span style="color: #800080"&gt;$Path&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$Path&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;-replace&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;\]&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;$([char]93)&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;
&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; т.к. DACL мы не записываем, то объявляем только классы SecurityDescriptor и Trustee&lt;/span&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;/span&gt;&lt;span style="color: #800080"&gt;$SD&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; ([&lt;/span&gt;&lt;span style="color: #008080"&gt;WMIClass&lt;/span&gt;&lt;span style="color: #000000"&gt;] &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Win32_SecurityDescriptor&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;).CreateInstance()
        &lt;/span&gt;&lt;span style="color: #800080"&gt;$Trustee&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; ([&lt;/span&gt;&lt;span style="color: #008080"&gt;WMIClass&lt;/span&gt;&lt;span style="color: #000000"&gt;] &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Win32_Trustee&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;).CreateInstance()
        &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; преобразовываем имя пользователя в SID и заполняем необходимые поля в Trustee&lt;/span&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;/span&gt;&lt;span style="color: #800080"&gt;$SID&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;security.principal.ntaccount&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$user&lt;/span&gt;&lt;span style="color: #000000"&gt;).translate([&lt;/span&gt;&lt;span style="color: #008080"&gt;security.principal.securityidentifier&lt;/span&gt;&lt;span style="color: #000000"&gt;])
        [&lt;/span&gt;&lt;span style="color: #008080"&gt;byte&lt;/span&gt;&lt;span style="color: #000000"&gt;[]] &lt;/span&gt;&lt;span style="color: #800080"&gt;$SIDArray&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; ,&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$SID&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #8b4513"&gt;BinaryLength&lt;/span&gt;&lt;span style="color: #000000"&gt;
        &lt;/span&gt;&lt;span style="color: #800080"&gt;$SID&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #8b4513"&gt;GetBinaryForm&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800080"&gt;$SIDArray&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)
        &lt;/span&gt;&lt;span style="color: #800080"&gt;$Trustee&lt;/span&gt;&lt;span style="color: #000000"&gt;.Name &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$user&lt;/span&gt;&lt;span style="color: #000000"&gt;
        &lt;/span&gt;&lt;span style="color: #800080"&gt;$Trustee&lt;/span&gt;&lt;span style="color: #000000"&gt;.SID &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$SIDArray&lt;/span&gt;&lt;span style="color: #000000"&gt;
        &lt;/span&gt;&lt;span style="color: #800080"&gt;$SD&lt;/span&gt;&lt;span style="color: #000000"&gt;.Owner &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$Trustee&lt;/span&gt;&lt;span style="color: #000000"&gt;
        &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; здесь мы добавляем флаг управления&lt;/span&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;/span&gt;&lt;span style="color: #800080"&gt;$SD&lt;/span&gt;&lt;span style="color: #000000"&gt;.ControlFlags&lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;0x8000&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;
        &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; выбираем сведения о безопасности необходимой папки&lt;/span&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;/span&gt;&lt;span style="color: #800080"&gt;$wPrivilege&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;gwmi&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;Win32_LogicalFileSecuritySetting&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="font-style: italic; color: #5f9ea0"&gt;-filter&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;path='$path'&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;
        &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; включаем привилегия для WMI. Для Windows Vista/Windows Server 2008,&lt;/span&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; при запуске скрипта с повышенными привилегиями данная строка не обязательна&lt;/span&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;/span&gt;&lt;span style="color: #800080"&gt;$wPrivilege&lt;/span&gt;&lt;span style="color: #000000"&gt;.psbase.Scope.Options.EnablePrivileges &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$true&lt;/span&gt;&lt;span style="color: #000000"&gt;
        &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; записываем SecurityDescriptor с новым владельцем в папку&lt;/span&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;/span&gt;&lt;span style="color: #800080"&gt;$Return&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$wPrivilege&lt;/span&gt;&lt;span style="color: #000000"&gt;.setsecuritydescriptor(&lt;/span&gt;&lt;span style="color: #800080"&gt;$SD&lt;/span&gt;&lt;span style="color: #000000"&gt;)
        &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; преобразовываем возвращаемый код в текстовое значение&lt;/span&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;span style="color: #000000"&gt;        &lt;/span&gt;&lt;span style="color: #0000ff"&gt;switch&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #800080"&gt;$Return&lt;/span&gt;&lt;span style="color: #000000"&gt;.ReturnValue) {
            &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;0&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Успешно&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;}
            &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;2&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;Write-Warning&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Отказано в доступе&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;}
            &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;8&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;Write-Warning&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Неизвестная ошибка&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;}
            &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;9&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;Write-Warning&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Отсутствуют привилегии&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;}
            &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;21&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;Write-Warning&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Указан неправильный параметр&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;}
            &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;1307&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;Write-Warning&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Указанный пользователь не может быть владельцем данного объекта&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;}
            &lt;/span&gt;&lt;span style="color: #0000ff"&gt;default&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;Write-Warning&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Произошла неизвестная ошибка с кодом:&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$Return&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #800000"&gt;Value&lt;/span&gt;&lt;span style="color: #000000"&gt;}
        }
    }
}

&lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; эта часть совсем необязательна, я её включил лишь для наглядности &lt;/span&gt;&lt;span style="color: #008000"&gt;
#&lt;/span&gt;&lt;span style="color: #008000"&gt; и полноты скрипта &lt;/span&gt;&lt;span style="color: #008000"&gt;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;Get-Owner&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #800080"&gt;$path&lt;/span&gt;&lt;span style="color: #000000"&gt;) {(&lt;/span&gt;&lt;span style="color: #5f9ea0; font-weight: bold"&gt;Get-Acl&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$path&lt;/span&gt;&lt;span style="color: #000000"&gt;).owner}&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;div&gt;
  &lt;p style="border-bottom: silver 1px solid; position: relative; border-left: silver 1px solid; width: 240px; height: 66px; border-top: silver 1px solid; border-right: silver 1px solid"&gt;&lt;span style="font-family: verdana,arial,sans-serif; cursor: pointer"&gt;&lt;a style="border-right-width: 0px; width: 240px; border-top-width: 0px; border-bottom-width: 0px; height: 66px; border-left-width: 0px" href="http://www.sysadmins.lv/content/scripts/Set-Owner.ps1" target="_self"&gt;&lt;img style="border-right-width: 0px; width: 240px; border-top-width: 0px; border-bottom-width: 0px; height: 66px; border-left-width: 0px" alt="Download File" src="http://www.sysadmins.lv/images/buttons/transparent.gif" /&gt; &lt;/a&gt;&lt;a style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" href="http://www.sysadmins.lv/content/scripts/Set-Owner.ps1" target="_self"&gt;&lt;img style="position: absolute; top: 6px; left: 5px" alt="Download File" src="http://www.sysadmins.lv/images/buttons/pgui.png" width="48" height="45" /&gt; &lt;/a&gt;&lt;a style="text-decoration: none" href="http://www.sysadmins.lv/content/scripts/Set-Owner.ps1" target="_self"&gt;&lt;span style="position: absolute; width: 167px; white-space: nowrap; color: #555555; overflow: hidden; top: 7px; margin-right: 5px; left: 67px"&gt;&lt;span style="display: block; visibility: hidden"&gt;1&lt;/span&gt; &lt;span style="line-height: 1.25em; display: block; cursor: pointer; text-decoration: none; padding-top: 1px" title="Download file"&gt;PS1 file 
            &lt;br /&gt;8,62 KB &lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a style="position: absolute; width: 167px; white-space: nowrap; color: #0066a7; overflow: hidden; top: 7px; margin-right: 5px; text-decoration: none; left: 67px" href="http://www.sysadmins.lv/content/scripts/Set-Owner.ps1" target="_self" alt="Download File"&gt;Download File.ps1&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Примечание:&lt;/font&gt;&lt;/strong&gt; &lt;u&gt;При указании пути, который содержит пробелы, путь нужно заключать в кавычки!&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;и немного о стандартности использования методов SetSecurityDescriptor для различных объектов. Мне не понятно, почему в различных классах WMI используются различные именования свойств дескриптора безопасности, когда в этом явных причин нету? Например:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa394435(VS.85).aspx" target="_blank"&gt;Win32_Share&lt;/a&gt; для дескриптора использует свойство &lt;strong&gt;Access&lt;/strong&gt; метода &lt;em&gt;SetShareInfo&lt;/em&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa394363.aspx" target="_blank"&gt;Win32_Printer&lt;/a&gt; использует свойство &lt;strong&gt;Descriptor&lt;/strong&gt; метода &lt;em&gt;SetSecurityDescriptor&lt;/em&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa394130(VS.85).aspx" target="_blank"&gt;Win32_Directory&lt;/a&gt; использует &lt;strong&gt;SecurityDescriptor&lt;/strong&gt; метода &lt;em&gt;SetSecurityDescriptor&lt;/em&gt; (и для &lt;em&gt;SetSecurityDescrptorEx&lt;/em&gt;) &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa394180(VS.85).aspx" target="_blank"&gt;Win32_LogicalFileSecuritySetting&lt;/a&gt; использует &lt;strong&gt;Descriptor&lt;/strong&gt; метода &lt;em&gt;SetSecurityDescriptor&lt;/em&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Вот 4 WMI класса управления ACL списками различных объектов, с которыми я недавно работал и имеем 3 различных именования свойства дескриптора безопасности и Win32_Share использует даже другое название метода (SetShareInfo), хотя этот метод использует тот же Win32_SecurityDescriptor. Но это уже оффтопик и личные размышления. Вот :)&lt;/p&gt;&lt;img width="0" height="0" src="http://www.sysadmins.lv/aggbug.ashx?id=243d77ee-4975-4335-9abf-ce8660e9439c"/&gt;&lt;br/&gt;&lt;hr/&gt;PowerShell Powered - http://www.sysadmins.lv&lt;/div&gt;</description>
      <comments>http://www.sysadmins.lv/CommentView,guid,243d77ee-4975-4335-9abf-ce8660e9439c.aspx</comments>
      <category>PowerShell</category>
      <category>PowerShell / ACL</category>
      <category>PowerShell / WMI</category>
    </item>
    <item>
      <trackback:ping>http://www.sysadmins.lv/Trackback.aspx?guid=4c56b6d6-b4d1-4d84-963e-a10d37140e9a</trackback:ping>
      <pingback:server>http://www.sysadmins.lv/pingback.aspx</pingback:server>
      <pingback:target>http://www.sysadmins.lv/PermaLink,guid,4c56b6d6-b4d1-4d84-963e-a10d37140e9a.aspx</pingback:target>
      <dc:creator>Camelot</dc:creator>
      <wfw:comment>http://www.sysadmins.lv/CommentView,guid,4c56b6d6-b4d1-4d84-963e-a10d37140e9a.aspx</wfw:comment>
      <wfw:commentRss>http://www.sysadmins.lv/SyndicationService.asmx/GetEntryCommentsRss?guid=4c56b6d6-b4d1-4d84-963e-a10d37140e9a</wfw:commentRss>
      <title>Странности метода SetSecurityDescriptor класса Win32_Printer (часть 1)</title>
      <guid isPermaLink="false">http://www.sysadmins.lv/PermaLink,guid,4c56b6d6-b4d1-4d84-963e-a10d37140e9a.aspx</guid>
      <link>http://www.sysadmins.lv/PermaLink,guid,4c56b6d6-b4d1-4d84-963e-a10d37140e9a.aspx</link>
      <pubDate>Fri, 14 Nov 2008 19:21:45 GMT</pubDate>
      <description>&lt;div&gt;&lt;p&gt;В &lt;a href="http://www.sysadmins.lv/PermaLink,guid,41226cf5-e524-446f-85c0-4a958c6c769a.aspx" target="_blank"&gt;первой&lt;/a&gt; и &lt;a href="http://www.sysadmins.lv/PermaLink,guid,54cfbd81-dff6-4391-8ba0-13a17df9bc5f.aspx" target="_blank"&gt;второй&lt;/a&gt; части я рассказал про основные моменты управления принтерами в PowerShell и теперь хочу поговорить о правах на принтеры. Т.к. принтеры управляются с помощью классов WMI, то управление правами доступа к ним будет превращаться в очередную эпохальную эпопею, которую я исследовал при изучении безопасности Share Permissions (вот ссылка на эти статьи в моём прежнем блоге: &lt;a title="http://vpodans.spaces.live.com/lists/cns!BB1419A2CFC1E008!178" href="http://vpodans.spaces.live.com/lists/cns!BB1419A2CFC1E008!178"&gt;http://vpodans.spaces.live.com/lists/cns!BB1419A2CFC1E008!178&lt;/a&gt;). Однако, с принтерами оказалось всё печальней &lt;img alt=":'(" src="/smilies/unhappy.gif"&gt; Мне так и не удалось заставить работать метод &lt;a href="http://msdn.microsoft.com/en-us/library/aa393594(VS.85).aspx" target="_blank"&gt;SetSecurityDescriptor&lt;/a&gt;. Итак, я расскажу о своих кратких исследованиях и в чём же мы имеем проблему.&lt;/p&gt; &lt;p&gt;Для чтения прав доступа принтера потребуется метод &lt;a href="http://msdn.microsoft.com/en-us/library/aa390778(VS.85).aspx" target="_blank"&gt;GetSecurityDescriptor&lt;/a&gt;: &lt;/p&gt; &lt;blockquote&gt;&lt;pre style="font: 9pt courier new; color: #fff; background-color: black"&gt;&lt;font color="#009500"&gt;&lt;span black? background-color: #009500?;&gt;&lt;p&gt;[System32] $a=(gwmi win32_printer -filter "name='cutepdf writer'").getsecuritydescriptor()
[System32] $a 

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 2
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
Descriptor       : System.Management.ManagementBaseObject
ReturnValue      : 0 


[System32] $a.Descriptor | fl [a-z]* 

ControlFlags     : 32780
DACL             : {System.Management.ManagementBaseObject, System.Management.ManagementBaseObject,System.Mana
gement.ManagementBaseObject, System.Management.ManagementBaseObject...}
Group            : System.Management.ManagementBaseObject
Owner            : System.Management.ManagementBaseObject
SACL             :
TIME_CREATED     : 

[System32] $a.descriptor.dacl[0] | fl [a-z]* 
AccessMask              : 983052
AceFlags                : 0
AceType                 : 0
GuidInheritedObjectType :
GuidObjectType          :
TIME_CREATED            :
Trustee                 : System.Management.ManagementBaseObject 


[System32] $a.descriptor.dacl[0].trustee | fl [a-z]* 

Domain       : Thor
Name         : Admin
SID          : {1, 5, 0, 0...}
SidLength    : 28
SIDString    : S-1-5-21-3020384060-3247076327-363933757-1000
TIME_CREATED : 
 
[System32]&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Как видите, метод &lt;strong&gt;GetSecurityDescriptor&lt;/strong&gt; вернул нам единственный параметр - &lt;strong&gt;Descriptor&lt;/strong&gt;. Заглянув в &lt;strong&gt;Descriptor&lt;/strong&gt;, нам нужно было найти параметр &lt;strong&gt;DACL&lt;/strong&gt;, который уже содержит все пермишены. Подробнее материал изложен тут: &lt;a href="http://msdn.microsoft.com/en-us/library/aa394577.aspx" target="_blank"&gt;WMI Security Descriptor Objects&lt;/a&gt;. 
&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Примечание:&lt;/font&gt;&lt;/strong&gt; &lt;u&gt;методы &lt;strong&gt;GetSecurityDescriptor&lt;/strong&gt; и &lt;strong&gt;SetSecurityDescriptor&lt;/strong&gt; доступны только в ОС начиная от &lt;strong&gt;Windows Vista/Windows Server 2008&lt;/strong&gt; и выше.&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Структура &lt;strong&gt;DACL&lt;/strong&gt; содержит в себе как права доступа (&lt;strong&gt;AccessMask&lt;/strong&gt;), так и сведения о пользователе, который имеет указаную AccessMask маску доступа (&lt;strong&gt;Trustee&lt;/strong&gt;). Я попробовал создать идентичную структуру &lt;strong&gt;SecurityDescriptor&lt;/strong&gt; (как описано в ссылке: &lt;a href="http://msdn.microsoft.com/en-us/library/aa394577.aspx" target="_blank"&gt;WMI Security Descriptor Objects&lt;/a&gt;) и получил вот такой скрипт:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;&lt;font color="#009500"&gt;# задаём пользователя, которому хотим предоставить доступ&lt;/font&gt;&lt;br&gt;$user = "everyone"&lt;br&gt;&lt;font color="#009500"&gt;# объявляем необходимые классы, которые описывают дескриптор безопасности&lt;/font&gt;&lt;br&gt;$SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()&lt;br&gt;$ace = ([WMIClass] "Win32_Ace").CreateInstance()&lt;br&gt;$Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()&lt;br&gt;&lt;font color="#009500"&gt;# преобразовываем имя пользователя в строковый SID и массив байтов для Win32_Trustee&lt;br&gt;&lt;/font&gt;$SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])&lt;br&gt;[byte[]] $SIDArray = ,0 * $SID.BinaryLength&lt;br&gt;$SID.GetBinaryForm($SIDArray,0)&lt;br&gt;&lt;font color="#009500"&gt;# заполняем необходимыми данными класс Win32_Trustee&lt;/font&gt;&lt;br&gt;$Trustee.Name = $user&lt;br&gt;$Trustee.SID = $SIDArray&lt;br&gt;&lt;font color="#009500"&gt;# заполняем поля класса Win32_Ace, которые описывают права доступа и заворачиваем&lt;br&gt;# пользователя в лице класса Win32_Trustee&lt;br&gt;# AccessMask в контексте принтера может принимать значения:&lt;br&gt;# 524288 - Take ownership&lt;br&gt;# 131072 - read permissions&lt;br&gt;# 262144 - change permissions&lt;br&gt;# 983088 - manage documents&lt;br&gt;# 983052 - manage printers&lt;br&gt;# 131080 - print + read permissions&lt;/font&gt;&lt;br&gt;$ace.AccessMask = 983052&lt;br&gt;$ace.AceType = 0&lt;br&gt;$ace.AceFlags = 0&lt;br&gt;$ace.Trustee = $Trustee&lt;br&gt;&lt;font color="#009500"&gt;# заворачиваем полученный объект Win32_Ace в параметр DACL класса Win32_SecurityDescriptor&lt;br&gt;&lt;/font&gt;$SD.DACL = $ace&lt;br&gt;&lt;font color="#009500"&gt;# получаем объект принтера, с которым собираемся работать&lt;br&gt;&lt;/font&gt;$Printer = gwmi win32_printer -filter "name='CutePDF Writer'"&lt;br&gt;&lt;font color="#009500"&gt;# получаем свойства метода SetSecurityDescriptor, чтобы в соответствии с ними&lt;br&gt;# завернуть туда SecurityDescriptor&lt;br&gt;&lt;/font&gt;$inParams = $Printer.psbase.GetMethodParameters("SetSecurityDescriptor")&lt;br&gt;&lt;font color="#009500"&gt;# заворачиваем SecurityDescriptor в параметр Descriptor метода SetSecurityDescriptor&lt;/font&gt;&lt;br&gt;$inParams.Descriptor = $SD&lt;br&gt;&lt;font color="#009500"&gt;# применяем метод SetSecurityDescriptor&lt;/font&gt;&lt;br&gt;$Printer.SetSecurityDescriptor($inParams)&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;И попробуем его запустить:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="font: 9pt courier new; color: #fff; background-color: black"&gt;&lt;font color="#009500"&gt;&lt;span black? background-color: #009500?;&gt;[System32] $user = "everyone"
[System32] $SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()
[System32] $ace = ([WMIClass] "Win32_Ace").CreateInstance()
[System32] $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()
[System32] $SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])
[System32] [byte[]] $SIDArray = ,0 * $SID.BinaryLength[System32] $SID.GetBinaryForm($SIDArray,0)
[System32] $Trustee.Name = $user
[System32] $Trustee.SID = $SIDArray
[System32] $ace.AccessMask = 983052
[System32] $ace.AceType = 0
[System32] $ace.AceFlags = 0
[System32] $ace.Trustee = $Trustee
[System32] $SD.DACL = $ace
[System32] $Printer = gwmi win32_printer -filter "name='CutePDF Writer'"
[System32] $inParams = $Printer.psbase.GetMethodParameters("SetSecurityDescriptor")
[System32] $inParams.Descriptor = $SD
[System32] $Printer.SetSecurityDescriptor($inParams)   

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT :
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ReturnValue      : 2147749896


[System32]&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Как видно, ни одна строка не вернула ошибок, а последняя строка вернула значение &lt;strong&gt;2147749896&lt;/strong&gt;. Прогулявшись по MSDN нашёл описание этой ошибки: &lt;a title="Win32SDToSDDL Method of the Win32_SecurityDescriptorHelper Class" href="http://msdn.microsoft.com/en-us/library/Aa394056(VS.85).aspx"&gt;Win32SDToSDDL Method of the Win32_SecurityDescriptorHelper Class&lt;/a&gt; (практически везде данное значение в контексте SecurityDescriptor интерпретируются так):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One of the parameters to the call is not correct. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;один из параметров вызова указан неверно. Давайте попробуем проанализировать, что мы сформировали и сравним с данными, которые получили методом GetSecurityDescriptor:&lt;/p&gt;
&lt;p&gt;
&lt;blockquote&gt;&lt;pre style="font: 9pt courier new; color: #fff; background-color: black"&gt;&lt;font color="#009500"&gt;&lt;span black? background-color: #009500?;&gt;[System32] $inparams 

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
Descriptor       : System.Management.ManagementBaseObject


[System32] $inparams.Descriptor | fl [a-z]* ControlFlags :

DACL         : {System.Management.ManagementBaseObject}
Group        :
Owner        :
SACL         :
TIME_CREATED : 


[System32] $inparams.Descriptor.dacl[0] | fl [a-z]* 

AccessMask              : 983052
AceFlags                : 0
AceType                 : 0
GuidInheritedObjectType :
GuidObjectType          :
TIME_CREATED            :
Trustee                 : System.Management.ManagementBaseObject 


[System32] $inparams.Descriptor.dacl[0].trustee | fl [a-z]* 

Domain       :
Name         : everyone
SID          : {1, 1, 0, 0...}
SidLength    :
SIDString    :
TIME_CREATED : 
[System32]&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Если сравнивать с первым листингом, где мы получали текущий SecurityDescriptor, то мы сохранили структуру SecurityDescriptor и в соответствующие поля записали нужные данные. При этом я также пытался для Trustee записать строковый &lt;strong&gt;SIDString&lt;/strong&gt; и &lt;strong&gt;SIDLength&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;$Trustee.SIDString = $SID.Value &lt;br&gt;$Trustee.SIDLength = $SID.BinaryLength&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;и получил уже такой Trustee:&lt;/p&gt;
&lt;p&gt;
&lt;blockquote class="postsub"&gt;&lt;pre style="font: 9pt courier new; color: #fff; background-color: black"&gt;&lt;font color="#009500"&gt;&lt;span black? background-color: #009500?;&gt;[System32] $inparams.Descriptor.dacl[0].trustee | fl [a-z]* 

Domain       :
Name         : everyone
SID          : {1, 1, 0, 0...}
SidLength    : 12
SIDString    : S-1-1-0
TIME_CREATED : 


[System32]&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;От этого результат не изменился. Попробовал вызвать несколько иначе метод SetSecurityDescriptor:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;$Printer.psbase.invokemethod("SetSecurityDescriptor", $inParams, $null)&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;и всё по старому. Я попытался нагуглить этот вопрос поисковой фразой "setsecuritydescriptor win32_printer powershell" (да-да, каюсь, я пользуюсь гуглем, как это ни прискорбно). И он мне выдал меньше одной страницы и 2 вменяемые ссылки, одна из которых ведёт на MSDN, а вторая на какой-то французский сайт (в котором я без переводчика плохо понимаю, а жаль) - &lt;a href="http://powershell-scripting.com/index.php?option=com_joomlaboard&amp;amp;Itemid=76&amp;amp;func=view&amp;amp;id=2292&amp;amp;catid=6"&gt;http://powershell-scripting.com/index.php?option=com_joomlaboard&amp;amp;Itemid=76&amp;amp;func=view&amp;amp;id=2292&amp;amp;catid=6&lt;/a&gt;, но человек там творил что-то страшное и я понял, что там помощи не ждать.&lt;/p&gt;
&lt;p&gt;Вобщем, этот вопрос пока остаётся открытым. Что ему не нравится, я пока не могу понять. Управление SecurityDescriptor в WMI - это не самая удачная модель управления безопасностью в WMI, но пока это почти единственный способ добиться результата - приходится с этим работать. Хотя, на первый взгляд может показаться, что там всё страшно и ужасно, но на самом деле, если разобрать предметно вопрос и поупражняться, всё оказывается вполне понятным, хоть и не совсем логичным и не всегда это хочет работать как положено :)&lt;/p&gt;&lt;img width="0" height="0" src="http://www.sysadmins.lv/aggbug.ashx?id=4c56b6d6-b4d1-4d84-963e-a10d37140e9a"/&gt;&lt;br/&gt;&lt;hr/&gt;PowerShell Powered - http://www.sysadmins.lv&lt;/div&gt;</description>
      <comments>http://www.sysadmins.lv/CommentView,guid,4c56b6d6-b4d1-4d84-963e-a10d37140e9a.aspx</comments>
      <category>PowerShell</category>
      <category>PowerShell / ACL</category>
      <category>PowerShell / WMI</category>
    </item>
  </channel>
</rss>