Обновление текущего зарегистрированного пользователя, реестра кустов HKEY_USERS, с системной учетной записью - PullRequest
0 голосов
/ 17 сентября 2018

Этот скрипт вносит изменения во все профили пользователей.

Вот сценарий:

# Get each user profile SID and Path to the profile
$UserProfiles = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*" |
                Where {$_.PSChildName -match "S-1-5-21-(\d+-?){4}$" } |
                Select-Object @{Name="SID"; Expression={$_.PSChildName}}, @{Name="UserHive";Expression={"$($_.ProfileImagePath)\NTuser.dat"}}

# Loop through each profile on the machine
foreach ($UserProfile in $UserProfiles) {
    # Load User ntuser.dat if it's not already loaded
    if (($ProfileWasLoaded = Test-Path Registry::HKEY_USERS\$($UserProfile.SID)) -eq $false) {
        Start-Process -FilePath "CMD.EXE" -ArgumentList "/C REG.EXE LOAD HKU\$($UserProfile.SID) $($UserProfile.UserHive)" -Wait -WindowStyle Hidden
    }
}

# Manipulate the registry
$key = "Registry::HKEY_USERS\$($UserProfile.SID)\Software\SomeArchaicSoftware\Configuration"

New-Item -Path $key -Force | Out-Null

New-ItemProperty -Path $key -Name "LoginURL" -Value "https://www.myCompany.local" -PropertyType String -Force | Out-Null
New-ItemProperty -Path $key -Name "DisplayWelcome" -Value 0x00000001 -PropertyType DWORD -Force | Out-Null

$key = "$key\UserInfo"

New-Item -Path $key -Force | Out-Null

New-ItemProperty -Path $key -Name "LoginName" -Value "$($ENV:USERDOMAIN)\$($ENV:USERNAME)" -PropertyType STRING -Force | Out-Null

# Unload NTuser.dat 
if ($ProfileWasLoaded -eq $false) {
    [GC]::Collect()

    Start-Sleep 1
    Start-Process -FilePath "CMD.EXE" -ArgumentList "/C REG.EXE UNLOAD HKU\$($UserProfile.SID)" -Wait -WindowStyle Hidden| Out-Null
}

Мне нужны только изменения в текущем зарегистрированном кусте пользователя HKEY_USERS.Может кто-нибудь помочь мне изменить скрипт, так что только текущий зарегистрированный пользователь получает изменения?

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете определить SID текущего пользователя, вошедшего в систему через WMI. Проверьте владельца запущенного процесса explorer.exe, затем разрешите имя учетной записи в SID:

$user = (Get-WmiObject Win32_Process -Filter "Name='explorer.exe'").GetOwner()
$fltr = "Name='{0}' AND Domain='{1}'" -f $user.User, $user.Domain
$sid  = (Get-WmiObject Win32_UserAccount -Filter $fltr).SID

Тем не менее, я думаю, что сценарий входа в систему будет лучшим местом для изменения настроек реестра пользователя.

...