Требуется помощь в создании команды PowerShell для реестра

#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