Vbs копирование папки с файлами
Обновлено: 03.07.2024
Работа с объектами файловой системы из скрипта VBScript, объектная библиотека ScriptingRuntime, объекты FileSystemObject, Drive, Folder, File, TextStream, просмотр всех каталогов на диске, запись/чтение информации из текстового файла
Основные возможности работы с объектами файловой системы через WSH реализованы при помощи класса FileSystemObject , который физически находится в библиотеке Scrrun . dll . Как правило, работа начинается с создания объекта FSO :
Set fso1 = WScript.CreateObject("Scripting.FileSystemObject")
Далее используем созданный объект для выполнения различных операций.
Наиболее часто используемые возможности:
1) просмотреть/запротоколировать информацию о всех дисках на компьютере (используется свойство Drives , возвращающее набор дисков, и свойства объекта Drive ):
Set oDrives = fso1.Drives
For Each i In oDrives
MsgBox ("Буква диска: " & i.DriveLetter & " Тип диска: " & i.DriveType & "Метка диска: " & i.VolumeName & " Готовность к работе: " & i.IsReady)
Подробнее про объект Drive - ниже.
2) получить список всех подкаталогов данного каталога (используется свойство GetFolder и далее возможности объекта Folder ):
Set oFolders = fso1.GetFolder("C:\")
Set oSubfolders = oFolders.SubFolders
For Each oFolder In oSubFolders
strListFolders = strListFolders & oFolder.Name & vbCrLf
MsgBox strListFolders
3) получить информацию о физическом размере диска (свойство объекта Drive TotalSize ):
Set oDrive1 = fso1.GetDrive("C")
nSize = FormatNumber (oDrive1.TotalSize,0)
MsgBox nSize
4) получить информацию о размере свободного пространства (свойства объекта Drive FreeSpace и AvailableSpace ; FreeSpace выводит информацию об физическом свободном пространстве, AvailableSpace - информацию о свободном пространстве, доступном текущему пользователю - с учетом дисковой квоты)
Set oDrive1 = fso1.GetDrive("C")
nSize = FormatNumber (oDrive1.TotalSize,0)
MsgBox nSize
5) скопировать каталог со всем содержимым (используется метод CopyFolder , true означает - перезаписывать содержимое, используется по умолчанию, поэтому можно не указывать)
fso1.CopyFolder "C:\Diagnostics", "d:\Diagnostics", true
Аналогично производится перемещение и удаление папок.
6) удалить все файлы с определенным именем (например, борьба с вирусами или компьютерными игрушками). Само удаление произвести несложно: для этого используется метод DeleteFile :
fso 1. DeleteFile " C :\ scandisk . log ", True ' true означает, что удаляем в том числе и read - only файлы
Однако обычно нужно решить еще две задачи:
o обеспечить отсутствие run - time error , если проблемы с удаление файла (файл открыт и т.п.)
o подключиться к нужному каталогу
o пройти по всем каталогам и подкаталогам, удаляя данный файл.
Каждую из этих задача удобнее решать при помощи отдельных подпроцедур. Первая решается так:
Sub FileDelete(sFile)
On Error Resume Next
Fso1.DeleteFile (sFile)
If Err.Number <> 0 Then
WScript.Echo "Error deleting file: " & sFile
End If
End Sub
Чтобы подключиться к нужному подкаталогу:
Function GetFolder (sFolder)
On Error Resume Next
Set GetFolder = Fso1.GetFolder (sFolder)
If Err.Number <> 0 Then
WScript.Echo "Error connecting to folder: " & sFolder
WScript.Quit Err.Number
End Function
Чтобы пройтись по всем подкаталогам:
Sub RunSubFolders (objFolder)
If objFolder <> "\System Volume Information" Then
MainSub objFolder
For Each iFolder in objFolder.SubFolders
RunSubFolders iFolder
Проверка на System Volume Information - потому что при обращении к нему возникает ошибка.
Теперь решаем нашу задачу:
sDir = " C :"
Set objDir = GetFolder (sDir)
RunSubFolders (objDir)
Sub MainSub (objDir)
For Each eFile in objDir.Files
If LCase(eFile.Name) = LCase(sFile) Then
FileDelete eFile
Конечно, в реальной работе лучше протоколировать удаление всех файлов.
7) поменять атрибуты файла (например, скрыть важные файлы ил установить для них режим read - only ).
Для подключения к существующему файлу лучше всего использовать специальную подпроцедуру GetFile (аналог GetFolder в предыдущем примере):
Function GetFile(sFile)
On Error Resume Next
Set GetFile = Fso1.GetFile(sFile)
If Err.Number <> 0 Then
WScript.Echo("Error Connecting to: " & sFile
WScript.Quit Err.Number
End Function
Атрибуты файла определяются как битовая маска - значение свойства Attributes . Просмотреть возможные значения можно через справку по WSH 5.6, Attributes property .
Установить проще всего так (в нашем примере устанавливаем значение Read - Only ):
Set gFile = GetFile ("C:\test1.txt")
gFile . Attributes = 1
8) прочесть информацию из текстового файле
Set TxtStream = fso1.OpenTextFile("\\london1\c$\test1.txt")
Do While Not (TxtStream.atEndOfStream)
Text = Text & TxtStream.ReadLine & vbCrlf
MsgBox Text
Большие файлы настоятельно рекомендуется открывать на чтение в окне Internet Explorer тем же методом Navigate .
9) запись / добавление информации к текстовому файлу. Эта возможность используется очень часто - например, для протоколирования хода выполнения скрипта или фиксирования результатов обследования компьютеров пользователей. В некоторых ситуациях файл можно обрабатывать дальше - например, переслать его по электронной почте средствами CDO (об этом в следующих модулях) или средствами DTS положить на сервер баз данных.
Выглядит это так:
If Fso1.FileExists ("C:\test1.txt") Then
Set txtStreamOut = fso1.OpenTextFile("C:\test1.txt",8,True)
' "2" означает "открыть на добавление", True - писать в Unicode
txtStreamOut.WriteLine "Строка 1"
txtStreamOut.WriteLine "Строка 1"
Set MyFile = fso1.CreateTextFile("C:\test1.txt")
MyFile.WriteLine "Строка 1"
MyFile.WriteLine "Строка 2"
End If
Ограничения WSH при работе с файловой системой:
- WSH в принципе не умеет работать с двоичными файлами - только текстовыми;
- при помощи WSH нельзя настроить разрешения и аудит для файлов (это можно сделать средствами WMI ).
Многие дополнительные возможности работы в файловой системе можно получить при помощи утилит командной строки из Resource Kit :
- associate - позволяет создать ассоциацию программы с расширением имени файла;
- diruse - просмотреть информацию о используемом пространстве, включая файлы и каталоги, превышающие определенный размер;
- diskmap - в командой стоке просмотреть информацию о размере физического диска и его геометрии;
- diskuse - показать, сколько места на диске занимают файлы каждого пользователя (по владельцам)
- dupfinder - найти повторяющиеся файлы на дисках;
- fcopy и robocopy - утилиты надежного копирования файлов (даже если проблемы с сетью). fcopy использует Message Queuing, robocopy - свою службу
- freedisk - возвращает объем свободного пространства на диске;
- mcopy / mtc (эквиваленты copy и xcopy ) - копирование с созданием протокола копирования;
- qgrep - аналог Unix grep , поиск строки в указанном файле (файлах)
- perms - выводит разрешения для указанного файла;
- showacls - тоже выводит разрешения, но уже для файла, каталога или дерева каталогов, в более удобном формате;
- subinacl - позволяет выводить информацию о разрешениях на файлы (а также ключи реестра и службы) и переносить разрешения с одного пользователя на другого;
- where - ищет файлы в указанном вами месте;
- xcacls - позволяет менять разрешения на файлы из командной строки.
Скопировать/перенести файлы с сохранением всех разрешений (например, на новый файл-сервер) позволяет обычный FAR (или стандартная утилита Microsoft XCOPY).
Синтаксис метода CopyFolder состоит из следующих частей:
Part | Описание |
---|---|
object | Обязательный. Всегда имя FileSystemObject. |
source | Обязательный. Строка знаков, представляющая спецификацию папки, которая может содержать подстановочные знаки для одной или нескольких копируемых папок. |
destination | Обязательный. Строка знаков, определяющая место назначения, в которое должны быть скопированы папка и вложенные папки из source. Использование подстановочных знаков запрещено. |
переописывание | Необязательное. Значение типа Boolean, показывающее, можно ли перезаписывать существующие папки. При значении True файлы перезаписываются, при значении False перезапись файлов не происходит. По умолчанию используется значение True. |
Примечания
Подстановочные знаки могут использоваться только в последнем компоненте пути аргумента source. Например, можно использовать:
Однако нельзя использовать:
Если источник содержит символы подгруппы или пункт назначения заканчивается сепаратором пути (предполагается, что назначение — это существующая папка, в которой можно скопировать совпадающие папки и ) подмостки. В противном случае предполагается, что destination — это имя создаваемой папки. В любом случае при копировании отдельной папки могут произойти четыре вещи:
Если папка destination не существует, выполняется копирование папки source и всего ее содержимого. Это обычный случай.
Если destination является существующим файлом, происходит ошибка.
Если destination является каталогом, выполняется попытка скопировать папку и все ее содержимое. Если файл, содержащийся в source, уже существует в destination, возникает ошибка, если значение overwrite равно False. В противном случае будет выполнена попытка скопировать файл поверх существующего файла.
Если destination является каталогом только для чтения и значение overwrite равно False, при попытке скопировать в этот каталог существующий файл только для чтения возникает ошибка.
Ошибка также возникает, если значение source, заданное с использованием подстановочных знаков, не соответствует никаким папкам.
Метод CopyFolder останавливается при первой обнаруженной ошибке. Попытка отката изменений, выполненных до появления ошибки, не выполняется.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Ну как-то вот так наверное :
<job>
<runtime>
<description>
XCopy on VBScript
</description>
<named
name = "SRC"
helpstring = "Source directory (/S also possible)"
type = "string"
required = "true"
/>
<named
name = "DST"
helpstring = "Destination directory (/D also possible)"
type = "string"
required = "true"
/>
<named
name = "Good"
helpstring = "file for cood copied files (/G)(default - strout)"
type = "string"
required = "false"
/>
<named
name = "Bad"
helpstring = "file for BAD copied files (/B) (default - strerr)"
type = "string"
required = "false"
/>
<example>
Example: vxcopy.wsf /S:"c:\debug" /D:"c:\release"
</example>
</runtime>
<script language="VBScript">
On Error Resume Next
Const ForReading = 1, ForWriting = 2
Set oFso = CreateObject("Scripting.FileSystemObject")
if WScript.Arguments.Named.Item("SRC") <> "" then
SDir = WScript.Arguments.Named.Item("SRC")
Elseif WScript.Arguments.Named.Item("S") <> "" then
SDir = WScript.Arguments.Named.Item("S")
Else
Wscript.Echo "Source directory must be set."
Wscript.Echo "----------------------------"
WScript.Arguments.ShowUsage
WScript.Quit (1)
end if
if WScript.Arguments.Named.Item("DST") <> "" then
DDir = WScript.Arguments.Named.Item("DST")
Elseif WScript.Arguments.Named.Item("D") <> "" then
DDir = WScript.Arguments.Named.Item("D")
Else
Wscript.Echo "Destination directory must be set."
Wscript.Echo "----------------------------"
WScript.Arguments.ShowUsage
WScript.Quit (2)
end if
if WScript.Arguments.Named.Item("Good") <> "" then
FileName = WScript.Arguments.Named.Item("Good")
elseif WScript.Arguments.Named.Item("G") <> "" then
FileName = WScript.Arguments.Named.Item("G")
Else
FileName = ""
end if
if FileName <> "" Then
Set GoodFile = oFso.OpenTextFile(FileName, ForWriting, True)
if Err Then
Wscript.Echo "Error open Good file = " & FileName
Wscript.Echo "----------------------------"
WScript.Quit (3)
end if
Else
Set GoodFile = Wscript.StdOut
end if
if WScript.Arguments.Named.Item("Bad") <> "" then
FileName = WScript.Arguments.Named.Item("Bad")
elseif WScript.Arguments.Named.Item("B") <> "" then
FileName = WScript.Arguments.Named.Item("B")
Else
FileName = ""
end if
if FileName <> "" Then
Set BadFile = oFso.OpenTextFile(FileName, ForWriting, True)
if Err Then
Wscript.Echo "Error open Badfile = " & FileName
Wscript.Echo "----------------------------"
WScript.Quit (3)
end if
Else
Set BadFile = Wscript.StdErr
end if
if NOT oFso.FolderExists(SDir) Then
Wscript.Echo "Error open source directory" & sDir
Wscript.Echo "----------------------------"
WScript.Quit (3)
Else
CopyDir SDir, DDir
end if
Sub CopyDir ( ByVal Src, ByVal Dst )
If NOT oFSO.FolderExists(Dst) Then
Set Folder = oFSO.CreateFolder(Dst)
if Err Then
Err.Clear
BadFile.Write "Create Folder - " & Dst & vbcrlf
'. Hmmmm Need write other files to Bad log?
Exit Sub
Else
GoodFile.Write "Create folder - " & Dst & vbcrlf
end if
end if
for each Folder in oFSO.GetFolder(Src).Subfolders
CopyDir Src & "\" & Folder.Name , Dst & "\" & Folder.Name
next
for each File in oFSO.GetFolder(Src).Files
oFSO.CopyFile File, Dst & "\" & File.Name
if Err Then
Err.Clear
BadFile.Write "File - " & File.Path & "\" & File.Name & vbcrlf
Else
GoodFile.Write File.Path & "\" & File.Name & vbcrlf
end if
next
Там в одном месте в подпрограмме стоит выход, если создание каталога неудачно. Соответственно всё что глубже этого каталога в логи не пойдет. Если её убрать, то в логах будут ошибки от создания поддеревьев.
Создавая сценарии, позволяющие автоматизировать различные процессы в сети, зачастую необходимо программно управлять файловой системой NTFS, а именно: создавать, удалять, перемещать, копировать файлы и папки; изменять их атрибуты и права доступа к ним. Такие сценарии могут быть созданы с помощью VBScript или JSсript. В данной статье все примеры будут приведены на VBScript.
Основы программного управления файловой системой
Для программного управления файловой системой NTFS с помощью VBScript рекомендуется использовать встроенный объект FileSystem Object, поддерживающий набор методов, перечисленных в таблице 1:
Объект или набор
Набор всех логических, физических и съемных дисков
Объект, методы и свойства которого позволяют обращаться к диску, получать о нем различную информацию
Набор всех подпапок в каталоге
Объект, методы которого используются для создания, перемещения, переименования и удаления папок, а свойства – для получения имен папок, путей и т.д.
Набор всех файлов в папке
Объект, методы которого используются для создания, перемещения, переименования и удаления файлов, а свойства – для получения имен файлов и путей
Главный объект объектной модели. Поддерживает все методы и свойства для доступа к файловой системе
Методы этого объекта позволяют осуществлять различные манипуляции с текстовыми файлами
Для получения доступа к объектам FSO необходимо создать переменную-объект и присвоить ей ссылку на объект FileSystemObject:
После создания объекта становятся доступны его методы, свойства и дочерние объекты. Поскольку в данной статье будут рассмотрены вопросы, касающиеся операций с файлами и папками, то некоторые объекты и наборы, такие как Drive(s) и TextStream, не будут рассмотрены.
Программное получение доступа к папкам
С помощью набора Folders осуществляется формирование списка вложенных файлов и папок в указанном каталоге; просмотр атрибутов каталога; создание, перемещение, переименование и удаление папок.
Доступ к набору Folders можно получить, воспользовавшись следующим шаблоном:
где path – путь к каталогу, например, «C:FolderName» или «ServerShareName».
В качестве обработчика ошибок рекомендуется использовать функцию FolderExists(), с помощью которой можно определить существует ли каталог, по указанному пути:
If fso.FolderExists(path) then
MsgBox "Folder " + path + " Not Exists"
Определение списка подпапок в указанной директории
Формирование списка осуществляется с помощью свойства Name набора SubFolders и Files. С помощью набора SubFolders определяется список папок, вложенных в указанный каталог, а с помощью Files – соответственно список файлов. Приведем пример, в котором будет определены подпапки каталога Windows:
If fso.FolderExists(path) then
For each i In OSubFolders
Temp= "Folder " + path + " Not Exists"
Определение списка всех вложенных подпапок в каталоге
Для чтения всей структуры подкаталогов необходимо вышеописанный механизм поместить в функцию и сделать ее рекурсивной[1]. Функция будет иметь два параметра – путь к абсолютному подкаталогу (PATH) и уровень вложенности подкаталогов (IDX).
Данные, содержащие абсолютные пути к подкаталогам, разумно записывать в динамический одномерный массив. Приведем пример создания и заполнения элементов динамического массива на примере чтения структуры подкаталогов, затем приведем шаблон рекурсивной функции.
Dim Array() 'Объявление динамического массива
' Изменение размера динамического массива
Redim Preserve Array(oFolders.count)
For Each of In oFolders
Array(i)=cstr(oF.Path) ' Запись элементов в массив
'Чтение элементов массива:
For i=Lbound(Array) to Ubound(Array)
Шаблон рекурсивной функции:
' Вызов функции RecFolder в теле сценария
RecFolder index, path
Function Recfolder (idx, path)
Call Recfolder (idx+1, path)
На основе изложенного материала приведем листинг скрипта, который позволяет определить названия всех подпапок, вложенных в указанный каталог (в примере – переменная path):
MsgBox "oFolders_count: "+cstr(detect(q))
For j=0 to cstr(ubound(path_array)-1)
Redim Preserve path_array(oFolders.count)
For Each oF In oFolders
Определение списка файлов, находящихся в директории
Методика определения списка файлов, содержащихся в директории, та же, что и в случае определения списка подкаталогов. Разница заключается в том, что вызывается набор Files, а не SubFolder:
Set WSHShell = WScript.CreateObject("WScript.Shell")
MsgBox "oFiles_count: "+cstr(oFiles.count)
For each oFile in oFiles
temp=temp & oFile.name & chr(13)
Управление атрибутами файлов
Каждый файл имеет набор параметров, которые его характеризуют – название, расширение, размер, даты создания и последнего изменения файла, его атрибуты. О том, как считывать названия файлов и их расширения, было рассказано ранее. Пришло время рассказать о методике чтения дат и атрибутов файлов.
Определение атрибутов файлов
Получив доступ к файлам, как это показано в предыдущем разделе, с помощью свойства Attributes можно определить атрибуты файлов.
Свойство Attributes возвращает двоичное значение, расшифровка которых приведена в таблице:
Файл без установленных атрибутов
Файл с атрибутом «только для чтения»
Файл с атрибутом «архивный», модифицированный со времени последнего резервного копирования
Ярлык (файл с расширением LNK)
Сжатый файл (только для Windows 2k)
Приведем пример чтения атрибута файла boot.ini:
Set WSHShell = WScript.CreateObject("WScript.Shell")
MsgBox oFile.Name&": "& oFile.Attributes
Если атрибуты этого файла никто не изменял, то значение свойства oFile.Attributes будет равно 39, что в соответствии с таблицей обозначает, что boot.ini имеет следующие атрибуты: только для чтения, скрытый, системный, архивный.
Для того чтобы пользователь каждый раз не занимался определением атрибутов файлов, необходимо использовать функцию, с помощью которой будет осуществляться сопоставление кода, возвращаемого функцией атрибутам. Также необходимо осуществлять проверку на существование файла с помощью функции FileExists():
Set WSHShell = WScript.CreateObject("WScript.Shell")
if fso.FileExists(path) then
MsgBox oFile.Name&": "& temp
MggBox "Файл " &path& " не существует"
if (Attr_value and &H01)> 0 Then t=t+"Только для чтения; "
if (Attr_value and &H02)> 0 Then t=t+"Скрытый; "
if (Attr_value and &H04)> 0 Then t=t+"Системный; "
if (Attr_value and &H20)> 0 Then t=t+"Архивный; "
if (Attr_value and &H800)> 0 Then t=t+"Сжатый; "
Изменение атрибутов файлов
Изменение атрибутов файлов с помощью FSO осуществляется присвоением другого значения переменной oFile.Name. Значение может быть присвоено как в шестнадцатеричном, так и в десятеричном виде в (см. таблицу 2):
Set WSHShell = WScript.CreateObject("WScript.Shell")
MsgBox oFile.Name&": "& oFile.Attributes
MsgBox oFile.Name&": "& oFile.Attributes
По умолчанию вновь созданный файл readme.txt имеет атрибут «Архивный»(32). Присвоив параметру oFile.Attributes значение 39, файлу будут назначены следующие атрибуты: только чтение, скрытый, системный, архивный.
Операции над файлами и папками
Над файлами и папками можно производить следующие операции: создание, копирование, перемещение, удаление. Сначала опишем операции, выполняемые с папками, затем файлами.
Создание и удаление папок
Создание и удаление каталогов осуществляется с помощью методов CreateFolder(path) и DeleteFolder(path) объекта FSO. Параметром каждого из этих методов является путь к каталогу – path. Используя эти методы, желательно включать в листинг скрипта обработчик ошибок, который проверяет наличие или отсутствие папки перед осуществлением каких-либо манипуляций с ней. Приведем два примера: первым из них проиллюстрируем процесс создания новой папки C:TempFolder; во втором – процесс удаления этой папки.
If fso.FolderExists(path)=0 then
Temp= "Folder " + path + " Created "
Temp= "Folder " + path + " Already Exists"
If fso.FolderExists(path)<>0 then
Temp= "Folder " + path + " Deleted"
Temp= "Folder " + path + " is Absent "
Переименование, копирование и перемещение папок
Копирование папок осуществляется с помощью метода CopyFolder source, destination, overwrite, перемещение и переименование – с помощью MoveFolder source, destination, overwrite. Каждый их этих методов имеет три параметра:
Source – обязательный параметр, в котором передается строка с именем исходной папки (путем); путь может включать знаки подстановки, такие как «?» или «*». Рекомендуется использовать знаки подстановки для копирования или перемещения нескольких папок, одновременно удовлетворяющих заданному шаблону
Destination – обязательный параметр, задающий путь к папке назначения в виде строки. Значение этого параметра не может содержать символов подстановки. В том случае если путь заканчивается «» и папка-приемник не существует, то она будет создана.
Overwrite – необязательный параметр, который принимает значение False(0) или True(1). Если он равен True, т.е. 1 (по умолчанию), то целевая папка будет перезаписана.
Обратите внимание на то, что параметры указываются без скобок. Приведем примеры копирования и перемещения папок. Копирование папки:
fso.CopyFolder OldPath, NewPath, 1
MsgBox "Папка " + OldPath + " скопирована в " + NewPath
fso.MoveFolder OldPath, NewPath, 1
MsgBox "Папка " + OldPath + " перемещена в " + NewPath
Копирование и перемещение файлов
Копирование и перемещение файлов осуществляются с помощью методов Copy и Move соответственно. Поскольку использование этих методов одинаково, то они будут рассмотрены совместно. Шаблон вызова любого метода следующий:
If (fso.FileExistes(PathOld)) Then
где вместо «****» указывается название метода. Различие в использовании методов заключается в том, что при вызове метода Move после копирования файла осуществляется удаление первоисточника.
Приведем пример копирования файла:
If (fso.FileExistes(PathOld)) Then
Удаление файла осуществляется с помощью метода Delete, вызываемого аналогичным способом. Отличается лишь синтаксис самого метода: у метода Delete, в отличие от Copy или Move, отсутствуют параметры:
If (fso.FileExistes(PathDel)) Then
Управление правами доступа на файлы и папки
Создавая новую папку или файл на жестком диске с файловой системой NTFS, новому объекту присваиваются права доступа по определенным правилам. Если разговор идет о создании общих папок на сервере, то системного администратора, как правило, не устроят права доступа, назначаемые по умолчанию: они должны быть изменены в соответствии с определенными правилами, описываемыми шаблоном. О том, как программно изменить права доступа на папки и файлы, и пойдет разговор в следующем разделе.
Команда регистрации библиотеки выглядит следующим образом:
regsvr32.exe /s ADsSequrity.dll
Доступ к вышеуказанной библиотеке осуществляется с помощью функции CreateObject(«ADsSecurity») по следующему сценарию:
Set sec = CreateObject("ADsSecurity")
Set sd = sec.GetSecurityDescriptor("FILE://c:\folder")
Set dacl = sd.DiscretionaryAcl
For Each ace In dacl
Wscript.Echo cstr(ace.Trustee)+" " + cstr(ace.AccessMask) + " " + cstr(ace.AceType) + chr(13)+chr(10)
Как видно из примера, для управления правами необходимо создать новый экземпляр объекта ADsSecurity и указать к нему путь, который является параметром функции GetSecurityDescriptor(). Таким образом, можно получить доступ к коллекции DiscretionaryAcl, членами которой являются Trustee, AccessMask, AceType, AceCount и не фигурирующий в данном шаблоне RemoveAcl:
Пользователь или группа, которым определяется уровень доступа
Определяет тип доступа (Allow, Deny, Audit)
Определяет уровень доступа к ресурсу ( Full Control , Modify , Read , Execute и т.д.)
Количество объектов, которым назначены права
Удаление существующего объекта (группы или пользователя)
После многочисленных экспериментов были установлены и сведены в таблицы значения различных параметров:
Читайте также: