<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: смена владельца папки]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=1492</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=1492&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: смена владельца папки».]]></description>
		<lastBuildDate>Wed, 28 May 2008 05:55:05 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[VBScript: смена владельца папки]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=11110#p11110</link>
			<description><![CDATA[<p>Скрипт назначает владельцем заданной папки (в примере - &quot;C:\Test&quot;) текущего пользователя. <br /></p><div class="codebox"><pre><code>Dim objFS, objWSNet, strDomain, strComputer, strUser
Dim objWMI, objCollection, objItem, strUserSID
Dim objSecSettings, objSD, intResult
Const strPath = &quot;C:\Test&quot;
Const strPathWMI = &quot;C:\\Test&quot;
Set objFS = CreateObject(&quot;Scripting.FileSystemObject&quot;)
If objFS.FolderExists(strPath) Then
    Set objWSNet = CreateObject(&quot;WScript.Network&quot;)
    strDomain = objWSNet.UserDomain
    strComputer = objWSNet.ComputerName
    strUser = objWSNet.UserName
    Set objWSNet = Nothing
    Set objWMI = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\&quot; &amp; strComputer &amp; &quot;\root\CIMV2&quot;)
    Set objCollection = objWMI.ExecQuery(&quot;SELECT SID FROM Win32_Account WHERE Name=&#039;&quot; &amp; strUser &amp; &quot;&#039; AND Domain=&#039;&quot; &amp; strDomain &amp; &quot;&#039;&quot;)
    If objCollection.Count &gt; 0 Then
        For Each objItem In objCollection
            strUserSID = objItem.SID
        Next
        Set objItem = Nothing
        Set objSecSettings = objWMI.Get(&quot;Win32_LogicalFileSecuritySetting.Path=&#039;&quot; &amp; strPathWMI &amp; &quot;&#039;&quot;)
        If objSecSettings.GetSecurityDescriptor(objSD) = 0 Then
            If StrComp(strUserSID, objSD.Owner.SIDString, vbTextCompare) = 0 Then
                WScript.Echo &quot;Пользователь &quot; &amp; UCase(strUser) &amp; &quot; - уже владелец папки &quot; &amp; UCase(strPath)
            Else
                &#039;WScript.Echo &quot;Пользователь &quot; &amp; UCase(strUser) &amp; &quot; - не владелец папки &quot; &amp; UCase(strPath)
                Set objSID = objWMI.Get(&quot;Win32_SID.SID=&#039;&quot; &amp; strUserSID &amp; &quot;&#039;&quot;)
                objSD.Owner.Domain = strDomain
                objSD.Owner.Name = strUser
                objSD.Owner.SID = objSID.BinaryRepresentation
                objSD.Owner.SidLength = objSID.SidLength
                objSD.Owner.SIDString = strUserSID
                Set objSID = Nothing
                intResult = objSecSettings.SetSecurityDescriptor(objSD)
                Select Case intResult
                    Case 0: WScript.Echo &quot;Успешная смена владельца.&quot;
                    Case 2: WScript.Echo &quot;Отсутствует доступ к необходимой информации.&quot;
                    Case 9: WScript.Echo &quot;Для выполнения операции нет достаточных прав.&quot;
                    Case 21: WScript.Echo &quot;Заданы недопустимые значения параметров.&quot;
                    Case Else: WScript.Echo &quot;Неизвестная ошибка.&quot;
                End Select
                &#039;If StrComp(strUserSID, objSD.Owner.SIDString, vbTextCompare) = 0 Then
                &#039;    WScript.Echo &quot;Пользователь &quot; &amp; UCase(strUser) &amp; &quot; - теперь владелец папки &quot; &amp; UCase(strPath)
                &#039;Else
                &#039;    WScript.Echo &quot;Пользователь &quot; &amp; UCase(strUser) &amp; &quot; - опять не владелец папки &quot; &amp; UCase(strPath)
                &#039;End If
            End If
        Else
            WScript.Echo &quot;Не удалось прочитать дескриптор безопасности объекта.&quot;
        End If
        Set objSD = Nothing
        Set objSecSettings = Nothing
    Else
        WScript.Echo &quot;Не обнаружена учётная запись пользователя &quot; &amp; UCase(strUser)
    End If
    Set objCollection = Nothing
    Set objWMI = Nothing
Else
    WScript.Echo &quot;Объект &quot; &amp; UCase(strPath) &amp; &quot; не обнаружен.&quot;
End If
Set objFS = Nothing</code></pre></div><p>Примечания:<br />- для нормальной работы сценария необходимо, чтобы ни политика безопасности домена, ни безопасность NTFS не препятствовали заданному пользователю становиться владельцем объекта;<br />- работоспособность сценария проверена для Windows 2000 Pro/XP Pro/2003.<br />Автор скрипта - <strong>Dmitrii</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Wed, 28 May 2008 05:55:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=11110#p11110</guid>
		</item>
	</channel>
</rss>
