Мы пытаемся реализовать запись некоторых данных в файлы CSV с помощью набора сборщиков данных в PerfMon (в системе Windows Server 2008R2).
Проблема, с которой мы сталкиваемся, заключается в том, что мы (по-видимому) не можем контролировать разрешения, устанавливаемые для файлов журнала, созданных с помощью perfmon.
Мы хотим, чтобы файлы журнала, созданные perfmon, имели разрешения «Все: F» («Полный доступ для всех»). Итак, у нас есть настройка структуры каталогов, в которой все журналы помещаются в папку:
c: \ vms \ PerfMonLogs \% MACHINENAME% (например, c: \ vms \ PerfMonLogs \ EvaluationG2)
В приведенном выше примере c: \ vms \ PerfMonLogs \ EvaluationG2 имеет права доступа Все: F (ниже icacls для этого каталога)
ОЦЕНКА G2 / Все: (OI) (CI) (F) NT AUTHORITY \ SYSTEM: (OI) (CI) (F) BUILTIN \ Administrators: (OI) (CI) (F) BUILTIN \ Пользователи журнала производительности: (OI) ( Р)
Когда набор сборщиков данных запускается, он создает новые подпапки и файлы в c: \ vms \ PerfMonLogs \ EvaluationG2, например (C: \ vms \ PerfMonLogs \ EVALUATIONG2 \ M11d26y2012N3)
Каждый из этих каталогов и файлов имеет следующие разрешения:
M11d26y2012N3 NT AUTHORITY \ SYSTEM: (OI) (CI) (F) BUILTIN \ Administrators: (OI) (CI) (F) BUILTIN \ Пользователи журнала производительности: (OI) (R)
Итак, эти новые папки, а не просто наследуют разрешения от родительской папки (не знаю почему).
Теперь мы попробовали добавить «Все: F», используя вкладку «Безопасность» в наборе сборщиков (без кубиков).
Любые идеи? Как мы можем контролировать права доступа к файлам журнала, создаваемым набором сборщиков данных perfmon?
Наборы сборщиков данных могут содержать конфиденциальную информацию о компьютере, поэтому для доступа к ним обычно требуется, чтобы пользователь был хотя бы членом группы «Пользователи журнала производительности». Я не верю, что вы можете создать DCS с автоматически изменяемыми разрешениями (Everyone FullControl), как вы говорите.
Как это обходное решение:
Запустите этот сценарий PS как запланированную задачу:
$Path = "C:\PerfLogs\Admin\New Data Collector Set"
$ACL = (Get-Item $Path).GetAccessControl("Access")
$ACE = New-Object System.Security.AccessControl.FileSystemAccessRule("Everyone", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$ACL.AddAccessRule($ACE)
ForEach($_ In Get-ChildItem $Path -Recurse)
{
Set-Acl -ACLObject $ACL $_.FullName
}
Я протестировал это в Windows 7 с PS 2.0 (такой же, как 2008R2) и подтвердил, что он действительно размещает ACE «Все с полным доступом» для каждого объекта рекурсивно в каталоге, определенном в переменной $ Path.
edit: Сначала я подумал использовать вкладку «Задача» на странице «Свойства» DCS «Запускать эту запланированную задачу, когда набор сборщиков данных останавливается», но это не для запланированных задач, а скорее для задач WMI.
edit # 2: Хорошо, это становится довольно сумасшедшим, но вы можете создать новую запланированную задачу, и ее триггер будет запускать «По событию». Затем нажмите «Пользовательский» и нажмите «Новый фильтр событий». Затем вручную отредактируйте XML-фильтр:
<QueryList>
<Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
<Select Path="Microsoft-Windows-TaskScheduler/Operational">
*[System[TimeCreated[timediff(@SystemTime) <= 3600000]]]
and
*[System[(EventID='102')]]
and
*[EventData[Data and (Data='YOUR DATA COLLECTOR SET NAME')]]
</Select>
</Query>
</QueryList>
Теперь вы создали запланированную задачу, которая будет запускаться, когда ваш набор сборщиков данных завершит работу, и он рекурсивно изменит списки управления доступом в структуре каталогов на «Все, полный доступ».