Тема: VBScript: смена владельца папки
Скрипт назначает владельцем заданной папки (в примере - "C:\Test") текущего пользователя.
Dim objFS, objWSNet, strDomain, strComputer, strUser
Dim objWMI, objCollection, objItem, strUserSID
Dim objSecSettings, objSD, intResult
Const strPath = "C:\Test"
Const strPathWMI = "C:\\Test"
Set objFS = CreateObject("Scripting.FileSystemObject")
If objFS.FolderExists(strPath) Then
Set objWSNet = CreateObject("WScript.Network")
strDomain = objWSNet.UserDomain
strComputer = objWSNet.ComputerName
strUser = objWSNet.UserName
Set objWSNet = Nothing
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\CIMV2")
Set objCollection = objWMI.ExecQuery("SELECT SID FROM Win32_Account WHERE Name='" & strUser & "' AND Domain='" & strDomain & "'")
If objCollection.Count > 0 Then
For Each objItem In objCollection
strUserSID = objItem.SID
Next
Set objItem = Nothing
Set objSecSettings = objWMI.Get("Win32_LogicalFileSecuritySetting.Path='" & strPathWMI & "'")
If objSecSettings.GetSecurityDescriptor(objSD) = 0 Then
If StrComp(strUserSID, objSD.Owner.SIDString, vbTextCompare) = 0 Then
WScript.Echo "Пользователь " & UCase(strUser) & " - уже владелец папки " & UCase(strPath)
Else
'WScript.Echo "Пользователь " & UCase(strUser) & " - не владелец папки " & UCase(strPath)
Set objSID = objWMI.Get("Win32_SID.SID='" & strUserSID & "'")
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 "Успешная смена владельца."
Case 2: WScript.Echo "Отсутствует доступ к необходимой информации."
Case 9: WScript.Echo "Для выполнения операции нет достаточных прав."
Case 21: WScript.Echo "Заданы недопустимые значения параметров."
Case Else: WScript.Echo "Неизвестная ошибка."
End Select
'If StrComp(strUserSID, objSD.Owner.SIDString, vbTextCompare) = 0 Then
' WScript.Echo "Пользователь " & UCase(strUser) & " - теперь владелец папки " & UCase(strPath)
'Else
' WScript.Echo "Пользователь " & UCase(strUser) & " - опять не владелец папки " & UCase(strPath)
'End If
End If
Else
WScript.Echo "Не удалось прочитать дескриптор безопасности объекта."
End If
Set objSD = Nothing
Set objSecSettings = Nothing
Else
WScript.Echo "Не обнаружена учётная запись пользователя " & UCase(strUser)
End If
Set objCollection = Nothing
Set objWMI = Nothing
Else
WScript.Echo "Объект " & UCase(strPath) & " не обнаружен."
End If
Set objFS = Nothing
Примечания:
- для нормальной работы сценария необходимо, чтобы ни политика безопасности домена, ни безопасность NTFS не препятствовали заданному пользователю становиться владельцем объекта;
- работоспособность сценария проверена для Windows 2000 Pro/XP Pro/2003.
Автор скрипта - Dmitrii.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.