<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: Отключить наследование NTFS у сетевой папки (файла)]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=12314</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=12314&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: Отключить наследование NTFS у сетевой папки (файла)».]]></description>
		<lastBuildDate>Tue, 17 Jan 2017 13:20:30 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: Отключить наследование NTFS у сетевой папки (файла)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111185#p111185</link>
			<description><![CDATA[<p><strong>Flasher</strong>, та же картина, к сожалению.</p>]]></description>
			<author><![CDATA[null@example.com (dementor5)]]></author>
			<pubDate>Tue, 17 Jan 2017 13:20:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111185#p111185</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Отключить наследование NTFS у сетевой папки (файла)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111173#p111173</link>
			<description><![CDATA[<p><strong>dementor5</strong><br />А если так попробовать?:</p><div class="codebox"><pre><code>	oSD.Control = oSD.Control And _
	Not SE_DACL_AUTO_INHERIT_REQ And Not SE_SACL_AUTO_INHERIT_REQ And _
	Not SE_DACL_AUTO_INHERITED   And Not SE_SACL_AUTO_INHERITED
	oADsSecurityUtility.SetSecurityDescriptor sFile, ADS_PATH_FILE, oSD, ADS_SD_FORMAT_IID
	oSD.Control = oSD.Control Or SE_DACL_PROTECTED Or SE_SACL_PROTECTED
	oADsSecurityUtility.SetSecurityDescriptor sFile, ADS_PATH_FILE, oSD, ADS_SD_FORMAT_IID</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Tue, 17 Jan 2017 08:24:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111173#p111173</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Отключить наследование NTFS у сетевой папки (файла)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111172#p111172</link>
			<description><![CDATA[<p><strong>Flasher</strong>, я уже пробовал снимать-ставить галочки и смотреть на то, на сколько меняется значение.<br />Как раз эти злополучные 4096 единиц. Вот только прибавлением-убавлением разницы между снятой галочкой и установленной не достаточно. Так же попробовал сумму флагов на вроде DENY_INHERIT или ALLOW_INHERIT. На windows 7 работает, на windows 2012r2 нет. В общем третья функция рабочая с оглядкой на то, что её надо применять на ос не старше windows 7. Что там Microsoft накрутила - непонятно, но факт.</p><p>P.S. Ваш вариант тоже не работает, результат аналогичный моему - добавляются явные копии унаследованных прав (которые можно удалить), но само наследование и наследованные права не удаляются.</p>]]></description>
			<author><![CDATA[null@example.com (dementor5)]]></author>
			<pubDate>Tue, 17 Jan 2017 08:21:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111172#p111172</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Отключить наследование NTFS у сетевой папки (файла)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111150#p111150</link>
			<description><![CDATA[<p><strong>dementor5</strong><br />Не всё. Я там ещё кавычки добавил.<br />Имеем <a href="http://www.translate.ru/siteTranslation/autolink/?direction=en-ru&amp;template=Computer&amp;sourceURL=https://msdn.microsoft.com/en-us/library/windows/desktop/aa379566(v=vs.85).aspx">битовые флаги</a>:<br /></p><div class="codebox"><pre><code>Const SE_OWNER_DEFAULTED       = 1
Const SE_GROUP_DEFAULTED       = 2
Const SE_DACL_PRESENT          = 4
Const SE_DACL_DEFAULTED        = 8
Const SE_SACL_DEFAULTED        = 8
Const SE_SACL_PRESENT          = 16

Const SE_DACL_AUTO_INHERIT_REQ = 256
Const SE_SACL_AUTO_INHERIT_REQ = 512
Const SE_DACL_AUTO_INHERITED   = 1024
Const SE_SACL_AUTO_INHERITED   = 2048
Const SE_DACL_PROTECTED        = 4096
Const SE_SACL_PROTECTED        = 8192

Const SE_RM_CONTROL_VALID      = 16384
Const SE_SELF_RELATIVE         = 32768</code></pre></div><p>Нужно плясать вокруг того, что в середине. Поснимать AUTO_INHERIT и добавить 4096/8192. Т.е.:<br /></p><div class="codebox"><pre><code>  oSD.Control = oSD.Control And _
                Not SE_DACL_AUTO_INHERIT_REQ And _
                Not SE_SACL_AUTO_INHERIT_REQ And _
                Not SE_DACL_AUTO_INHERITED   And _
                Not SE_SACL_AUTO_INHERITED    Or _
                SE_DACL_PROTECTED Or SE_SACL_PROTECTED</code></pre></div><p>Мысли пока такие.</p><p>На локальной же машине с Win 7 3-й скрипт отрабатывает.</p><p>Чтобы разобраться в деталях, можно поковырять <a href="https://support.microsoft.com/ru-ru/kb/825751">Xcacls.vbs</a> (см. ключ /I) на 4300 строк.</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Mon, 16 Jan 2017 12:47:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111150#p111150</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Отключить наследование NTFS у сетевой папки (файла)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111145#p111145</link>
			<description><![CDATA[<p><strong>Flasher</strong>, поправил, спасибо.</p><p>Вы не могли бы глянуть третий вариант с ADsSecurityUtility</p><p>Может я просто как-то не так пытаюсь использовать свойство .Control?</p>]]></description>
			<author><![CDATA[null@example.com (dementor5)]]></author>
			<pubDate>Mon, 16 Jan 2017 10:25:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111145#p111145</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Отключить наследование NTFS у сетевой папки (файла)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111144#p111144</link>
			<description><![CDATA[<p><strong>dementor5</strong><br />Ну, а куда деваться? Я бы помог, но у меня нет 2012r2. Да и такой вариант в любом случае быстрее того, что с WMI.</p><p>Поправьте вторую строчку в коде.</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Mon, 16 Jan 2017 09:49:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111144#p111144</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Отключить наследование NTFS у сетевой папки (файла)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111143#p111143</link>
			<description><![CDATA[<p>В итоге получилось так. Некрасиво, но возложенную задачу выполняет:</p><div class="codebox"><pre><code>Option Explicit
Dim sFolder
sFolder = &quot;\\server\documents\testfolder&quot;

&#039;Вызов функции с проверкой кода возврата:
If DisableInheritance(sFolder) Then MsgBox &quot;There is a problem with disabling inheritance&quot; : Wscript.Quit

&#039;Сама функция:
Function DisableInheritance(sPath)
	Dim sCalCls
	sCalCls= &quot;icacls.exe &quot; &amp; sPath &amp; &quot; /inheritance:d&quot;
	DisableInheritanceIcaCls = CreateObject(&quot;Wscript.Shell&quot;).Run(sCalCls, 0, True)
End Function
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (dementor5)]]></author>
			<pubDate>Mon, 16 Jan 2017 09:42:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111143#p111143</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Отключить наследование NTFS у сетевой папки (файла)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111053#p111053</link>
			<description><![CDATA[<p><strong>Flasher</strong>, вообще не хотелось бы, только если иначе нельзя...<br />Основная идея реализовать эту задачу на vbs, по возможности, не используя других утилит.</p>]]></description>
			<author><![CDATA[null@example.com (dementor5)]]></author>
			<pubDate>Sun, 15 Jan 2017 07:04:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111053#p111053</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Отключить наследование NTFS у сетевой папки (файла)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111052#p111052</link>
			<description><![CDATA[<p><strong>dementor5</strong><br />А с <em>WSHShell.Run &quot;cacls/icacls &lt;keys&gt;&quot;, 0</em> нет желания поиграться?</p>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Sun, 15 Jan 2017 05:22:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111052#p111052</guid>
		</item>
		<item>
			<title><![CDATA[VBS: Отключить наследование NTFS у сетевой папки (файла)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111048#p111048</link>
			<description><![CDATA[<p>Доброго времени суток!<br />Задача.<br />Почистить список acl ntfs у сетевой папки.</p><p>Есть код:<br /></p><div class="codebox"><pre><code>Option Explicit
Call ClearACL()
Sub ClearACL()
	Const ADS_PATH_FILE = 1
	Const ADS_SD_FORMAT_IID = 1
	Dim sFile, oADsSecurityUtility, oSD, oDacl, oAce
	sFile = &quot;\\fileserver\Documents\testfolder&quot;
	Set oADsSecurityUtility = CreateObject(&quot;ADsSecurityUtility&quot;)
	Set oSD = oADsSecurityUtility.GetSecurityDescriptor(sFile, ADS_PATH_FILE, ADS_SD_FORMAT_IID)
	Set oDacl = oSD.DiscretionaryAcl
	For Each oAce In oDacl
		 if (InStr(oAce.Trustee, &quot;Administrators&quot;) = 0) and (InStr(oAce.Trustee, &quot;SYSTEM&quot;) = 0) and _
			(InStr(oAce.Trustee, &quot;Администраторы&quot;) = 0) and (InStr(oAce.Trustee, &quot;СИСТЕМА&quot;) = 0) then
		  oDacl.RemoveAce oAce
		 End If
		Next
		oSD.DiscretionaryAcl = oDacl
		oADsSecurityUtility.SetSecurityDescriptor sFile, ADS_PATH_FILE, oSD, ADS_SD_FORMAT_IID
end Sub</code></pre></div><p>Он работает, на windows xp, windows 7 - удаляются все лишние acl, при этом наследование выключается автоматически.</p><p>А вот на 2012r2 наследование автоматом не выключается и унаследованные группы не удаляются. Если выключить наследование вручную (снять галочку в свойствах папки),<br />то скрипт отрабатывает как и положено.</p><p>Я подумал, что проблему можно решить просто - снять наследование, а затем уже удалять acl.<br />Решил пойти по пути наименьшего сопротивления и написал процедуру, использующую wmi, как в соседних темах в примерах:</p><div class="codebox"><pre><code>Option Explicit
Call DisableInheritanceWMI()
Sub DisableInheritanceWMI()
	Const SE_DACL_PROTECTED = 4096
	Dim sFile, oWMI, oSec, oSD
	sFile = &quot;u:\Documents\testfolder&quot;
	On Error Resume Next
	Set oWMI = GetObject(&quot;WinMgmts:\\.&quot;)
	If Err.Number &lt;&gt; 0 Then MsgBox &quot;Ошибка &quot; &amp; CStr(Err.Number) &amp; vbNewLine &amp; Err.Description : Wscript.Exit
	Set oSec = oWMI.Get(&quot;Win32_LogicalFileSecuritySetting.Path=&#039;&quot; &amp; sFile &amp; &quot;&#039;&quot;)
	If Err.Number &lt;&gt; 0 Then MsgBox &quot;Ошибка2 &quot; &amp; CStr(Err.Number) &amp; vbNewLine &amp; Err.Description : Wscript.Exit
	If oSec.GetSecurityDescriptor(oSD) &lt;&gt; 0 Then MsgBox &quot;Не удалось прочитать дескриптор безопасности каталога &quot; &amp; UCase(strDir) : Wscript.Exit
		If Not CBool(oSD.ControlFlags And SE_DACL_PROTECTED) Then
			oSD.ControlFlags = oSD.ControlFlags + SE_DACL_PROTECTED
			If oSec.SetSecurityDescriptor(oSD) &lt;&gt; 0 Then MsgBox &quot;Не удалось применить настройки&quot; : Wscript.Exit
		End If
End Sub</code></pre></div><p>Процедура работает, но только с локальными папками.<br />Заставить её работать с сетевой к сожалению не удалось.</p><p>Я не сдался и попробовал сделать иначе:<br />Вот третья процедура, которая должна выключать наследование, перед запуском первой:<br /></p><div class="codebox"><pre><code>Option Explicit
Call DisableInheritance()
Sub DisableInheritance()
	Const ADS_PATH_FILE = 1
	Const ADS_SD_FORMAT_IID = 1
	Const SE_DACL_PROTECTED = 4096
	Dim sFile, oADsSecurityUtility, oSD
	sFile = &quot;\\fileserver\Documents\testfolder&quot;
	Set oADsSecurityUtility = CreateObject(&quot;ADsSecurityUtility&quot;)
	Set oSD = oADsSecurityUtility.GetSecurityDescriptor(sFile, ADS_PATH_FILE, ADS_SD_FORMAT_IID)
	oSD.Control = oSD.Control + SE_DACL_PROTECTED
	oADsSecurityUtility.SetSecurityDescriptor sFile, ADS_PATH_FILE, oSD, ADS_SD_FORMAT_IID
End Sub
</code></pre></div><p>И вот, вроде бы всё должно работать, но к сожалению нет.<br />Такое ощущение, что галочка снимается, acl переделываются в неунаследованные,<br />а после галка мгновенно ставится на место.</p><p>Ребята, подскажите, что я делаю не так или что не то сделала Microsoft с vbs в 2012r2?</p>]]></description>
			<author><![CDATA[null@example.com (dementor5)]]></author>
			<pubDate>Sun, 15 Jan 2017 00:43:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111048#p111048</guid>
		</item>
	</channel>
</rss>
