Question Besoin d'aide pour crée un PowerShell barre de notification

Plus d'informations
il y a 1 mois 6 jours #33282 par Dorian
Bonjour,

j'aimerais votre aide pour crée un script,
J'aimerais qu'une icone dans la barre de notification reste en permanance.

J'ai trouver la solution sur Windows 10, 
New-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" -Name "NoAutoTrayNotify" -Value "1" -PropertyType "DWORD"
New-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Explorer" -Name "NoAutoTrayNotify" -Value "1" -PropertyType "DWORD"

Avec cette solution toutes les icones a coté de l'heure s'affiche en permanence. elle ne sont plus cacher.

Par contre sur Windows 11, c'est pas la même chose, si vous appliquer la méthode de win10 les icone qui sont déjà cacher vont disparaitre.
j'ai trouver la clé de registre a crée ou modifier pour win11, en faite il y a un dossier par icone afficher ou masquer, contrairement a win10.

J'ai besoin d'aide pour l'écrire mon PowerShell :

Chemin du ma clé sur un poste win11 :
Ordinateur\HKEY_USERS\S-1-5-21-872629181-3411538068-343453361-1001\Control Panel\NotifyIconSettings\13885481933114508704

Clé :

IsPromoted
Valeur 1
DWORD

Par contre le chemin change d'un poste un a un autre :
Comment crée un script qui lui dit de chercher dans le registre la clé suivante :


clé : ExecutablePath
Valeur : C:\ProgramData\NinjaRMMAgent\components\njbar\njbar.exe

et une fois qu'il est dans ce dossier
crée ou modifier lé clé ci dessous :

Clé :

IsPromoted
Valeur 1
DWORD

et par magie l'icone reste en permanence dans le barre des taches 

En vous remerciant d'avance.

Cordialement,

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 semaines 1 jour #33305 par Arnaud Petitjean
Bonjour Dorian,

Désolé de ma réponse tardive. As-tu trouvé une solution à ton problème ?

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 semaines 4 jours #33310 par Dorian
Salut oui :
# Créer un nouveau lecteur de registre
New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS

# Vérifier si la source ScriptAD existe, sinon la créer
$sourceName = "ScriptAD"
$sourceExists = Get-EventLog -LogName Application -Source $sourceName -ErrorAction SilentlyContinue

if (-not $sourceExists) {
    $eventSourceInfo = New-Object System.Diagnostics.EventSourceCreationData $sourceName, "Application"
    [System.Diagnostics.EventLog]::CreateEventSource($eventSourceInfo)
}

# Chemin de départ dans la base de registre
$startingRegistryPath = "HKU:\"

# Nouvelle valeur à créer ou à modifier
$newValueName = "IsPromoted"
$newValueData = 1

# Chemin complet du fichier de rapport
$reportPath = "C:\ScriptReport.txt"

# Durée maximale d'exécution en secondes (60 secondes pour 1 minute)
$timeoutInSeconds = 30

# Obtenir l'heure actuelle
$startTime = Get-Date
$endTime = $startTime.AddSeconds($timeoutInSeconds)

# Fonction récursive pour la recherche, navigation et modification de la valeur
function SearchNavigateAndModifyValue($currentPath) {
    try {
        $currentKey = Get-Item -Path $currentPath -ErrorAction Stop
        $values = Get-ItemProperty -Path $currentKey.PSPath

        if ($values.ExecutablePath -eq "C:\ProgramData\NinjaRMMAgent\components\njbar\njbar.exe") {
            Set-Location -Path $currentKey.PSPath
            Write-Host "Navigated to key with matching value: $($currentKey.Name)"

            if (-not $values.PSObject.Properties.Name.Contains($newValueName)) {
                New-ItemProperty -Path $currentKey.PSPath -Name $newValueName -Value $newValueData -PropertyType DWORD
                Write-Host "New value created: $newValueName = $newValueData"
            } else {
                Set-ItemProperty -Path $currentKey.PSPath -Name $newValueName -Value $newValueData
                Write-Host "Value modified: $newValueName = $newValueData"
            }

            # Générer le rapport de succès
            $reportSuccess = @"
Le script a fonctionné avec succès.
La valeur '$newValueName' a été modifiée ou créée avec la donnée '$newValueData'.
Chemin de la clé de registre : $($currentKey.PSPath)
"@
            $reportSuccess | Out-File -FilePath $reportPath

            # Arrêter la recherche après modification
            return $true
        }

        $subKeys = Get-ChildItem -Path $currentKey.PSPath
        foreach ($subKey in $subKeys) {
            if ((Get-Date) -ge $endTime) {
                Write-Host "Timeout reached."
                return $false  # Sortir de la boucle si le temps imparti est écoulé
            }

            if (SearchNavigateAndModifyValue $subKey.PSPath) {
                return $true  # Si la modification a été effectuée, sortir de la fonction
            }
        }
    } catch {
        # Ignorer les erreurs et continuer la recherche
    }
    return $false  # Aucune modification n'a été effectuée
}

# Appeler la fonction avec le chemin de départ
$modificationSuccess = SearchNavigateAndModifyValue $startingRegistryPath

if (-not $modificationSuccess) {
    # Générer le rapport en cas de clé non trouvée
    $reportNotModified = @"
Le chemin de clé 'C:\ProgramData\NinjaRMMAgent\components\njbar\njbar.exe' n'a pas été trouvé dans la base de registre.
"@
    $reportNotModified | Out-File -FilePath $reportPath

    # Générer l'événement Windows
    $eventMessage = "Le chemin de clé 'C:\ProgramData\NinjaRMMAgent\components\njbar\njbar.exe' n'a pas été trouvé dans la base de registre."
    Write-EventLog -LogName Application -Source $sourceName -EventId 1 -EntryType Error -Message $eventMessage
}

Si cela peut aider quelqu'un, voici le code.

 

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 semaines 4 jours #33317 par Arnaud Petitjean
Hello Dorian,

Merci d'être venu poster la solution à ton problème. Ca pourra certainement aider quelques personnes.

Juste quelques petites remarques :
   - Lorsque je crée des fonctions, je n'aime pas faire comme tu l'as fait. Je préfères utiliser plutôt un bloc Param car je trouve que c'est plus propre et plus clair. Je ne sais pas ce qu'en penses Laurent Dardenne, mais j'aimerais bien avoir ton avis.
   - Le mot clé Return n'apporte rien dans ton code. En effet, c'est un faux-amis qui peut laisser croire que PowerShell ne retourne que ce qui est indiqué par la commande Return; ce qui est faux. Return n'est nécessaire qu'à l'intérieur d'une classe.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.050 secondes
Propulsé par Kunena