0
votes

PowerShell: Vérifiez la valeur de HEKY UTILISATEUR

J'ai besoin d'une petite aide.

Certains paramètres de registre ont été effectués par script de lots dans le passé sur plusieurs périphériques. Maintenant, j'ai besoin de vérifier que ces paramètres existent toujours ou non. P>

Je crée un script PowerShell et essaye d'obtenir la valeur de ce chemin. P>

ci-dessous sont les valeurs configurées dans le passé. Par script de lots. p> xxx pré>

Vous pouvez voir que ces paramètres sont créés sous les utilisateurs de Hey et ont créé ntatuser.dat. P>

PowerShell Command que j'essaie. P>

Get-ItemPropertyValue : Cannot find path 'HKEY_USERS\defuser\Software\Policies\Microsoft\Internet Explorer\Control Panel ' because it does not exist.
At line:6 char:1
+ Get-ItemPropertyValue 'Registry::HKEY_USERS\defuser\Software\Policies ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (HKEY_USERS\defu...\Control Panel :String) [Get-ItemPropertyValue], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyValueCommand
 


3 commentaires

Vous devez utiliser le SID de l'utilisateur et utiliser cela au lieu de défact lors de la recherche de la ruche HKEY_USERS.


@Theo merci pour le commentaire. Il pourrait y avoir plusieurs utilisateurs avec différents SID. Est-ce qu'il y a un autre moyen.


Nous n'avons jamais entendu parler de vous .. L'une des réponses données a-t-elle résolu votre problème? Si oui, veuillez considérer accepter en cliquant sur le ✓ Icône à gauche. Cela aidera les autres avec une question similaire la trouvant plus facilement.


3 Réponses :


0
votes

La ruche HKEY_USERS n'est pas montée par défaut dans PowerShell. Essayez ceci avant votre ligne de code: xxx pré>

Il devrait faire le tour p>

et corriger votre ligne de code avec: p>

New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS

$SIDs = Get-ChildItem -Path HKU:\ -Name | Where-Object { ($_.Length -gt 8) -and ($_ -NotLike '*Classes*')}

ForEach($user in ($SIDs))
{
    If((Get-ItemPropertyValue "HKU:\$($user)\Software\Policies\Microsoft\Internet Explorer\Control Panel" -Name HomePage -ErrorAction SilentlyContinue) -Eq 1)
    {
        Write-Host 'HomePage is OK'
    }
    Else
    {
        Write-Host 'HomePage is not OK'
    }
}

Remove-PSDrive -Name HKU


3 commentaires

Je reçois toujours l'erreur. Get-itemPropertyValue: Impossible de trouver le chemin 'HKU: \ DÉFUSER \ Software \ Stratégies \ Microsoft \ Internet Explorer \ Control Panel' Parce qu'il n'existe pas. À la ligne: 4 Char: 1 + get-itemPropertyvalue 'HKU: \ DÉFUSER \ Software \ Stratégies \ Microsoft \ Inter ... + ~~~~~~~~~~~~~~~~~~~~


J'ai supposé que vous savez ce qu'était défapeur. Alors qu'est-ce que vous voulez faire? Vérifiez cette valeur pour chaque utilisateur?


J'ai édité ma réponse afin d'analyser chaque SIDS sur le système et de vérifier si la page d'accueil de la propriété est égale à 1 ou non.



0
votes

Ceci est un très bel article sur les utilisateurs HIVE: https://www.lifewire.com / HKEY-UTILANS-2625903

Ne pensez pas que la clé de défapeur existe dans cette ruche. Sauf si vous créez le vôtre, vous devez changer le chemin. Essayez le code ci-dessous. P>

#username
$Username = "DefUser"
#key without HIVE or SID to export e.g. SOFTWARE\Microsoft\Windows
$key = "Software\Policies\Microsoft\Internet Explorer\Control Panel"
#value in the key above to retrieve
$valuetoget = "HomePage"

### get sid from username
$User
$sid
try {
    $User = New-Object System.Security.Principal.NTAccount($Username)
    $sid = $User.Translate([System.Security.Principal.SecurityIdentifier]).value
}
catch {
    Write-Output "Failed to get SID for username: $UserName."
    return
}

#check whether the user hive is loaded
if (Test-Path "Registry::HKEY_USERS\$sid" -PathType Container) {
    #it is loaded, check the key
    if (Test-Path "Registry::HKEY_USERS\$sid\$key") {
        Write-Output "The specified key was found under: $UserName."
        $value = Get-ItemPropertyValue "Registry::HKEY_USERS\$sid\$key" -Name $valuetoget -ErrorAction SilentlyContinue
        if ($value) {
            Write-Output "The value of property $valuetoget is:$value"
        } else {
            Write-Output "The property $valuetoget was not found or is empty."
        }
    }
    else {
        Write-Output "The specified key does not exist under: $UserName"
    }
}
Else {
    #it isnt loaded, load it
    & "$env:windir\system32\reg.exe" "LOAD HKU\TEMP `"$env:SystemDrive\Users\$UserName\NTUSER.DAT`""
    #export the key if the key exists
    if (Test-Path "Registry::HKU\TEMP\$key") {
        Write-Output "The specified key was found under: $UserName."
        $value = Get-ItemPropertyValue "Registry::HKU\TEMP\$key" -Name $valuetoget -ErrorAction SilentlyContinue
        if ($value) {
            Write-Output "The value of property $valuetoget is:$value"
        } else {
            Write-Output "The property $valuetoget was not found or is empty."
        }
    }
    else {
        Write-Output "The specified key does not exist under: $UserName"
    }
    #unload it
    & "$env:windir\system32\reg.exe" "LOAD HKU\TEMP"
}


0 commentaires

0
votes

ci-dessous le code devrait vous donner une liste d'objets dans laquelle la valeur de registre pourrait être trouvée xxx


0 commentaires