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 и т.д.)

Количество объектов, которым назначены права

Удаление существующего объекта (группы или пользователя)

После многочисленных экспериментов были установлены и сведены в таблицы значения различных параметров:

Читайте также: