#powershell #registry
Вопрос:
Я не очень хорошо знаком с созданием команд PowerShell. Я нуждаюсь в помощи. Чтобы передать некоторые данные приложения в EventViewer в качестве аудита безопасности, я включил его через реестр. Я стараюсь не вносить это изменение вручную на все устройства компании. Любая помощь будет очень признательна.
Что я сделал — ComputerHKEY_USERSSIDSOFTWAREApplicationNameApp
Под Advanced
вкладкой ( Advanced Security Settings for App
) Auditing
Вкладка включена для всех пользователей.
(Тип: Все, Принципал: Everyone
, Доступ: Full Control
, Применяется к: This key and subkeys
)
Заранее благодарю вас за любую помощь.
Комментарии:
1. Я бы рекомендовал задать этот вопрос на serverfault.com , но вы можете использовать объекты групповой политики для развертывания изменений реестра на некоторых или всех серверах, присоединенных к домену.
2. Я знаю, но в настоящее время я нахожусь в облачной инфраструктуре, и мне нужно развернуть только Intune. Профили конфигурации там для Windows очень ограничены.
Ответ №1:
Разделы реестра имеют свои собственные типы правил аудита по сравнению с правилами аудита файловой системы, но могут быть установлены довольно аналогичным образом:
$RegPath = "PrintersConnections"
# example to get the currently logged-on user: (in DOMAINUsername format).
# note: returns nothing if multiple users logged in (through RDP etc)
$LoggedOnUser = (Get-CimInstance -class Win32_ComputerSystem).username
# split the domain section of the username off:
$Username = ($LoggedOnUser -split '\')[1]
# Get user SID
$SID = ([System.Security.Principal.NTAccount]($LoggedOnUser)).Translate([System.Security.Principal.SecurityIdentifier]).Value
# Check if user registry loaded already and use it:
if (Test-Path Registry::HKEY_USERS$SID) {
$UserReg = "Registry::HKEY_USERS$SID"
}
# Otherwise load it manually (may not work if user is logged in)
else {
# load the user's registry hive to an easy to find path:
REG LOAD "HKEY_USERS$Username" "C:Users$UsernameNTUSER.DAT"
# Now you can search their registry
$UserReg = "Registry::HKEY_USERS$Username"
}
# Read the current ACL
$acl = Get-ACL "$UserReg$RegPath" -Audit
# Set the rule parameters as needed
$Identity = "Everyone"
$Rights = 'FullControl'
$InheritanceFlags = "ContainerInherit"
$PropogationFlags = "None"
$AuditFlags = "Success"
$NewRule = [System.Security.AccessControl.RegistryAuditRule]::new($Identity,$Rights,$InheritanceFlags,$PropogationFlags,$AuditFlags)
$ACL.SetAuditRule($NewRule)
$ACL | Set-Acl "$UserReg$RegPath"
Комментарии:
1. Смогу ли я использовать $SID, как это применимо к любому пользователю, вошедшему в систему?
2. @Mknight Вы хотите установить его для всех профилей пользователей, только для текущего пользователя, вошедшего в систему, или для определенного имени пользователя? Я добавил, как получить SID для конкретного пользователя в свой ответ, но вы также можете
$SIDs = Get-ChildItem 'Registry::HKEY_USERS' | Where Name -NotLike '*Classes'
заменить пути реестра наForeach ($SID in $SIDs) { $RegPath = Join-Path $SID.PSPath 'SoftwareAppNameApp'; #rest of script }
3. Как работает эта подпапка приложения, она отображается только для текущего пользователя, вошедшего в систему. Так что, если бы это можно было применить к любому вошедшему в систему в данный момент пользователю, было бы удивительно. Большое вам спасибо за все общение.
4. @Mknight Я отредактировал свой ответ, чтобы использовать текущего пользователя, вошедшего в систему. (Однако он ожидает только одного пользователя, поэтому он не сработает, если, например, у вас есть другой пользователь, вошедший в систему через удаленный рабочий стол). Если это даст вам то, что вам нужно, не забудьте отметить это как ответ, спасибо!
5. Я попробовал этот код и добавил туда название приложения. Следующая ошибка, которую я получил. Get-ACL : Не удается найти путь «Registry::HKEY_USERS\SOFTWAREAppNameApp», потому что он не существует. В строке:1 символ:8 $acl = Get-ACL $RegPath -Аудит ~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo : ObjectNotFound: (:) [Get-Acl], Исключение ItemNotFoundException Полностью квалифицированный идентификатор ошибки : GetAcl_PathNotFound_Exception,Microsoft. PowerShell. Команды. GetAclCommand