mrheisenberg
Goto Top

Fehler im Powershell Skript, oder Denkfehler?

Moin Leute,

ich habe gerade mein Skript soweit fertig, aber stehe nun komplett am Schlauch, die ersten Teile laufen ohne Probleme, er erstellt mir einen Temp Folder, kopiert aus dem Netzwerkshare die Start2.bin, legt diese für alle User / vorhanden oder neu ab, deinstalliert die Apps und deprovisioniert.

Ich bekomme aber nun einen Teil nicht hin, der angemeldete User was dieses Skript ausführt, bekommt die Taskbareinstellungen, klar, aber alle vorhanden bzw. User was sich zum ersten mal am PC anmelden werden von den RegKeys nicht gesteuert....

Ich komm nicht drauf, kann mir jemand helfen, ich gehe davon aus es ist eine Kleinigkeit, aber vor lauter Zeilen sehe ich den Wald nicht mehr face-smile

$logDirectory = "C:\Temp"  
$logFile = "$logDirectory\PSSkript_APPX-LOG.txt"  

if (-not (Test-Path $logDirectory)) {
    New-Item -Path $logDirectory -ItemType Directory | Out-Null
    Write-Host "Log-Verzeichnis erstellt: $logDirectory"  
}

function Write-Log {
    param (
        [string]$message
    )

    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"  
    $logMessage = "$timestamp - $message"  
    Add-Content -Path $logFile -Value $logMessage
}

function Uninstall-App {
    param (
        [string]$PackageFullName
    )

    Write-Host "Deinstalliere $PackageFullName"  
    Write-Log "Versuche, $PackageFullName zu deinstallieren"  

    try {
        Get-AppxPackage -AllUsers -Name $PackageFullName | Remove-AppxPackage -AllUsers
        Get-AppxProvisionedPackage -Online | Where-Object DisplayName -EQ $PackageFullName | Remove-AppxProvisionedPackage -Online
        Write-Log "$PackageFullName erfolgreich deinstalliert."  
    } catch {
        Write-Log "Fehler bei der Deinstallation von ${PackageFullName}: $($_)"  
    }
}

$appsToUninstall = @(
    "Microsoft.Office.Desktop",  
    "Microsoft.MicrosoftSolitaireCollection",  
    "Microsoft.Todos",  
    "microsoft.windowscommunicationsapps",  
    "Microsoft.BingWeather",  
    "Microsoft.XboxApp",  
    "Microsoft.Xbox.TCUI",  
    "Microsoft.XboxGamingOverlay",  
    "Microsoft.XboxGameOverlay",  
    "Microsoft.BingNews",  
    "Microsoft.MicrosoftOfficeHub",  
    "Microsoft.GamingApp",  
    "Microsoft.WindowsMaps",  
    "Microsoft.WindowsAlarms",  
    "Microsoft.Clipchamp",  
    "Clipchamp.Clipchamp"  
)

foreach ($app in $appsToUninstall) {
    Uninstall-App -PackageFullName $app
}

Write-Host "Deinstallation für alle vorhandenen Benutzer abgeschlossen."  
Write-Log "Deinstallation für alle vorhandenen Benutzer abgeschlossen."  

foreach ($app in $appsToUninstall) {
    Write-Host "Entferne $app aus dem Provisionierungspaket"  
    Write-Log "Entferne $app aus dem Provisionierungspaket"  
    try {
        Get-AppxProvisionedPackage -Online | Where-Object DisplayName -EQ $app | Remove-AppxProvisionedPackage -Online
        Write-Log "$app erfolgreich aus dem Provisionierungspaket entfernt."  
    } catch {
        Write-Log "Fehler beim Entfernen von $app aus dem Provisionierungspaket: $($_)"  
    }
}

Write-Host "Entfernung aus dem Provisionierungspaket abgeschlossen."  
Write-Log "Entfernung aus dem Provisionierungspaket abgeschlossen."  

$networkPath = "SERVERNAME\start2.bin"  
$localPath = "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin"  
$backupPath = "$logDirectory\start2.bin_OLDnotdelete"  

try {
    if (Test-Path $localPath) {
        Write-Host "Umbenennen der vorhandenen start2.bin und Verschieben nach $backupPath"  
        Write-Log "Umbenennen der vorhandenen start2.bin und Verschieben nach $backupPath"  
        Move-Item -Path $localPath -Destination $backupPath -Force
    } else {
        Write-Log "Keine vorhandene start2.bin Datei gefunden, daher keine Umbenennung erforderlich."  
    }

    Write-Host "Kopiere start2.bin von $networkPath nach $localPath"  
    Write-Log "Kopiere start2.bin von $networkPath nach $localPath"  
    Copy-Item -Path $networkPath -Destination $localPath -Force

    Write-Host "Kopieren abgeschlossen."  
    Write-Log "Kopieren von start2.bin abgeschlossen."  

    $defaultUserPath = "$env:SystemDrive\Users\Default\AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState"  
    if (-not (Test-Path $defaultUserPath)) {
        New-Item -Path $defaultUserPath -ItemType Directory -Force | Out-Null
        Write-Log "Standardverzeichnis für neue Benutzer erstellt: $defaultUserPath"  
    }
    Copy-Item -Path $networkPath -Destination $defaultUserPath\start2.bin -Force
    Write-Log "start2.bin für neue Benutzer bereitgestellt."  
} catch {
    Write-Log "Fehler beim Kopieren der start2.bin Datei: $($_)"  
}

Write-Host "Skript abgeschlossen."  
Write-Log "Skript erfolgreich abgeschlossen."  

$defaultUserSID = (Get-WmiObject -Class Win32_UserAccount -Filter "Name='Default Account'" | Select-Object -ExpandProperty SID)  

if (-not $defaultUserSID) {
    Write-Log "Default-Benutzer SID konnte nicht gefunden werden."  
} else {
    $taskbarKeyPath = "Registry::HKEY_USERS\$defaultUserSID\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  
    $searchKeyPath = "Registry::HKEY_USERS\$defaultUserSID\Software\Microsoft\Windows\CurrentVersion\Search"  
    $widgetsKeyPath = "Registry::HKEY_USERS\$defaultUserSID\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  

    try {
        Set-ItemProperty -Path $taskbarKeyPath -Name "ShowTaskViewButton" -Value 0 -Force  
        Set-ItemProperty -Path $taskbarKeyPath -Name "TaskbarAl" -Value 0 -Force  
        Write-Log "Taskleiste linksbündig ausgerichtet und aktive Anwendungen ausgeblendet für Default-Benutzer"  

        Set-ItemProperty -Path $searchKeyPath -Name "SearchboxTaskbarMode" -Value 0 -Force  
        Write-Log "Suchfeld in der Taskleiste ausgeblendet für Default-Benutzer"  

        Set-ItemProperty -Path $widgetsKeyPath -Name "TaskbarDa" -Value 0 -Force  
        Write-Log "Widgets in der Taskleiste ausgeblendet für Default-Benutzer"  
    } catch {
        Write-Log "Fehler beim Anpassen der Taskleiste für Default-Benutzer: $($_)"  
    }
}

$userProfiles = Get-WmiObject Win32_UserProfile | Where-Object { $_.Special -eq $false } | ForEach-Object {
    $_.SID
}

foreach ($profileSID in $userProfiles) {
    $taskbarKeyPath = "Registry::HKEY_USERS\$profileSID\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  
    $searchKeyPath = "Registry::HKEY_USERS\$profileSID\Software\Microsoft\Windows\CurrentVersion\Search"  
    $widgetsKeyPath = "Registry::HKEY_USERS\$profileSID\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  

    try {
        Set-ItemProperty -Path $taskbarKeyPath -Name "ShowTaskViewButton" -Value 0 -Force  
        Set-ItemProperty -Path $taskbarKeyPath -Name "TaskbarAl" -Value 0 -Force  
        Write-Log "Taskleiste linksbündig ausgerichtet und aktive Anwendungen ausgeblendet für Benutzer ${profileSID}"  

        Set-ItemProperty -Path $searchKeyPath -Name "SearchboxTaskbarMode" -Value 0 -Force  
        Write-Log "Suchfeld in der Taskleiste ausgeblendet für Benutzer ${profileSID}"  

        Set-ItemProperty -Path $widgetsKeyPath -Name "TaskbarDa" -Value 0 -Force  
        Write-Log "Widgets in der Taskleiste ausgeblendet für Benutzer ${profileSID}"  
    } catch {
        Write-Log "Fehler beim Anpassen der Taskleiste für Benutzer ${profileSID}: $($_)"  
    }
}

Write-Host "Taskleistenanpassung für alle Benutzer abgeschlossen."  
Write-Log "Taskleistenanpassung für alle Benutzer abgeschlossen."  


Bin für Tipps dankbar.


Grüße

edit:

ganz vergessen, das Script erstellt einen Ordner unter C , legt dort eine txt als LogFile an, kopiert dann aus dem Netzwerk die start2.bin, nimmt die vorhandene und kopiert diese ins Temp (rename) , danach löscht er die Angegebenen Windows Apps, und dann sollte er für alle User die Taskbar ändern.

Content-ID: 51289798180

Url: https://administrator.de/contentid/51289798180

Printed on: September 1, 2024 at 08:09 o'clock

pebcak7123
pebcak7123 Aug 09, 2024 updated at 09:39:03 (UTC)
Goto Top
Das Skript schaut ja erstmal welche Userprofile existieren und versucht die Taskbareinstellungen auf diese anzuwenden.
Das führt dazu das:
wenn der ausführende User kein lokaler admin ist funktioniert es natürlich nur beim eigenen Profil, da kein zugriff auf die registry-hives der anderen User erlaubt.
für nicht vorhandene User kann es natürlich auch keine Änderungen in der Registry ausführen da diese SIDs ja zum zeitpunkt der ausführung noch gar nicht auf dem pc existieren

EDIT: bei dem Teil für den Default User ist nen Schreibfehler in Zeile 110, "Default Account" -> "DefaultAccount"
$defaultUserSID = (Get-WmiObject -Class Win32_UserAccount -Filter "Name='DefaultAccount'" | Select-Object -  
MrHeisenberg
MrHeisenberg Aug 09, 2024 at 09:40:31 (UTC)
Goto Top
Zitat von @pebcak7123:

Das Skript schaut ja erstmal welche Userprofile existieren und versucht die Taskbareinstellungen auf diese anzuwenden.
Das führt dazu das:
wenn der ausführende User kein lokaler admin ist funktioniert es natürlich nur beim eigenen Profil, da kein zugriff auf die registry-hives der anderen User erlaubt.
für nicht vorhandene User kann es natürlich auch keine Änderungen in der Registry ausführen da diese SIDs ja zum zeitpunkt der ausführung noch gar nicht auf dem pc existieren

also eigentlich soll dieser part die Vorhanden User ändern

$userProfiles = Get-WmiObject Win32_UserProfile | Where-Object { $_.Special -eq $false } | ForEach-Object {
    $_.SID
}

foreach ($profileSID in $userProfiles) {
    $taskbarKeyPath = "Registry::HKEY_USERS\$profileSID\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  
    $searchKeyPath = "Registry::HKEY_USERS\$profileSID\Software\Microsoft\Windows\CurrentVersion\Search"  
    $widgetsKeyPath = "Registry::HKEY_USERS\$profileSID\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  

    try {
        Set-ItemProperty -Path $taskbarKeyPath -Name "ShowTaskViewButton" -Value 0 -Force  
        Set-ItemProperty -Path $taskbarKeyPath -Name "TaskbarAl" -Value 0 -Force  
        Write-Log "Taskleiste linksbündig ausgerichtet und aktive Anwendungen ausgeblendet für Benutzer ${profileSID}"  

        Set-ItemProperty -Path $searchKeyPath -Name "SearchboxTaskbarMode" -Value 0 -Force  
        Write-Log "Suchfeld in der Taskleiste ausgeblendet für Benutzer ${profileSID}"  

        Set-ItemProperty -Path $widgetsKeyPath -Name "TaskbarDa" -Value 0 -Force  
        Write-Log "Widgets in der Taskleiste ausgeblendet für Benutzer ${profileSID}"  
    } catch {
        Write-Log "Fehler beim Anpassen der Taskleiste für Benutzer ${profileSID}: $($_)"  
    }
}

und dieser Teil dann für alle "default User" bzw. noch nicht vorhandenen die Reg. bearbeiten

$defaultUserSID = (Get-WmiObject -Class Win32_UserAccount -Filter "Name='Default Account'" | Select-Object -ExpandProperty SID)  

if (-not $defaultUserSID) {
    Write-Log "Default-Benutzer SID konnte nicht gefunden werden."  
} else {
    $taskbarKeyPath = "Registry::HKEY_USERS\$defaultUserSID\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  
    $searchKeyPath = "Registry::HKEY_USERS\$defaultUserSID\Software\Microsoft\Windows\CurrentVersion\Search"  
    $widgetsKeyPath = "Registry::HKEY_USERS\$defaultUserSID\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  

    try {
        Set-ItemProperty -Path $taskbarKeyPath -Name "ShowTaskViewButton" -Value 0 -Force  
        Set-ItemProperty -Path $taskbarKeyPath -Name "TaskbarAl" -Value 0 -Force  
        Write-Log "Taskleiste linksbündig ausgerichtet und aktive Anwendungen ausgeblendet für Default-Benutzer"  

        Set-ItemProperty -Path $searchKeyPath -Name "SearchboxTaskbarMode" -Value 0 -Force  
        Write-Log "Suchfeld in der Taskleiste ausgeblendet für Default-Benutzer"  

        Set-ItemProperty -Path $widgetsKeyPath -Name "TaskbarDa" -Value 0 -Force  
        Write-Log "Widgets in der Taskleiste ausgeblendet für Default-Benutzer"  
    } catch {
        Write-Log "Fehler beim Anpassen der Taskleiste für Default-Benutzer: $($_)"  
    }
}
aqui
aqui Aug 09, 2024 updated at 09:49:08 (UTC)
Goto Top
„Am“ Schlauch steht nur die 🚒…. Heute ist Freitag! 🐟 😂
https://www.geo.de/geolino/redewendungen/auf-dem-schlauch-stehen-3016878 ...
MrHeisenberg
MrHeisenberg Aug 09, 2024 at 09:48:54 (UTC)
Goto Top
Zitat von @aqui:

„Am“ Schlauch stehen macht nur die 🚒…. 😂
https://www.geo.de/geolino/redewendungen/auf-dem-schlauch-stehen-3016878 ...

danke für deinen Hilfreichen Kommentar, was kommt als nächstes? Der TO solle den Post als gelöst markieren? face-wink
erikro
erikro Aug 09, 2024 at 09:51:37 (UTC)
Goto Top
Moin,

imho ein Denkfehler. Ich gehe mal davon aus, dass Du eine Domain betreibst. Dann solltest Du die Manipulationen an der registry besser über GPOs regeln. Das funktioniert ohne Probleme.

hth

Erik
MrHeisenberg
MrHeisenberg Aug 09, 2024 at 10:00:21 (UTC)
Goto Top
Zitat von @erikro:

Moin,

imho ein Denkfehler. Ich gehe mal davon aus, dass Du eine Domain betreibst. Dann solltest Du die Manipulationen an der registry besser über GPOs regeln. Das funktioniert ohne Probleme.

hth

Erik

Es steht eine Domain dahinter, doch der User soll dennoch die Option erhalten sich die Taskbar zu konfigurieren (historisch Bedingt), da die GPO immer greift werden seine Einstellungen immer wieder überschrieben, könnte unter Umständen zu angefressenen Usern führen wenn der immer wieder alles Anpassen muss/will
MrHeisenberg
MrHeisenberg Aug 09, 2024 at 10:01:40 (UTC)
Goto Top
Zitat von @pebcak7123:
EDIT: bei dem Teil für den Default User ist nen Schreibfehler in Zeile 110, "Default Account" -> "DefaultAccount"
$defaultUserSID = (Get-WmiObject -Class Win32_UserAccount -Filter "Name='DefaultAccount'" | Select-Object -  

Danke dir, hab den Fehler ausgebessert, aber komme dennoch nicht ans Ziel... hast eine Idee wie man es sonnst abbilden könnte unter PS?
pebcak7123
pebcak7123 Aug 09, 2024 at 11:01:03 (UTC)
Goto Top
Hab grad mal bei mir rumgespielt, das mit der SID des default users funktioniert nicht, versuch mal den part durch das hier zu ersetzen. Reg.exe wird für den search registrykey verwendet da sonst das reg unload fehlschlägt.

REG LOAD HKLM\Default C:\Users\Default\NTUSER.DAT
 $taskbarKeyPath = "HKLM:\Default\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"    
    $searchKeyPath = "HKLM\Default\Software\Microsoft\Windows\CurrentVersion\Search"    
    $widgetsKeyPath = "HKLM:\Default\\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"    

    try {
        Set-ItemProperty -Path $taskbarKeyPath -Name "ShowTaskViewButton" -Value 0 -Force    
        Set-ItemProperty -Path $taskbarKeyPath -Name "TaskbarAl" -Value 0 -Force    
        Write-Log "Taskleiste linksbündig ausgerichtet und aktive Anwendungen ausgeblendet für Default-Benutzer"    

        reg.exe add $searchKeyPath /v SearchboxTaskbarMode /t REG_DWORD /d 0 /f
        Write-Log "Suchfeld in der Taskleiste ausgeblendet für Default-Benutzer"    

        Set-ItemProperty -Path $widgetsKeyPath -Name "TaskbarDa" -Value 0 -Force    
        Write-Log "Widgets in der Taskleiste ausgeblendet für Default-Benutzer"    
    } catch {
        Write-Log "Fehler beim Anpassen der Taskleiste für Default-Benutzer: $($_)"    
    }
REG UNLOAD HKLM\Default
MrHeisenberg
MrHeisenberg Aug 09, 2024 updated at 11:32:24 (UTC)
Goto Top
Danke dir face-smile

hab das Script nun geändert, er übernimmt nun auch die Einstellungen für "noch nicht Angemeldete / neue User" , jetzt nervt nur mehr ein RegKey welcher die Suche eigentlich ausblenden soll, irgendwie macht er nicht was er soll....

try {
    $searchKeyPath = "Registry::$defaultHive\Software\Microsoft\Windows\CurrentVersion\Search"  

    if (-not (Test-Path $searchKeyPath)) {
        Write-Log "Registry-Pfad $searchKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
    } else {
        Set-ItemProperty -Path $searchKeyPath -Name "SearchboxTaskbarMode" -Value 0 -Force  
        Write-Log "Suchfeld in der Taskleiste ausgeblendet für Default-Benutzer"  
    }
} catch {
    Write-Log "Fehler beim Anpassen der Taskleiste für Default-Benutzer: $($_)"  
}

foreach ($profileSID in $userProfiles) {
    $searchKeyPath = "Registry::HKEY_USERS\$profileSID\Software\Microsoft\Windows\CurrentVersion\Search"  

    try {
        if (-not (Test-Path $searchKeyPath)) {
            Write-Log "Registry-Pfad $searchKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
        } else {
            Set-ItemProperty -Path $searchKeyPath -Name "SearchboxTaskbarMode" -Value 0 -Force  
            Write-Log "Suchfeld in der Taskleiste ausgeblendet für Benutzer ${profileSID}"  
        }
    } catch {
        Write-Log "Fehler beim Anpassen der Taskleiste für Benutzer ${profileSID}: $($_)"  
    }
}


$logDirectory = "C:\Temp"  
$logFile = "$logDirectory\PSSkript_APPX-LOG.txt"  

if (-not (Test-Path $logDirectory)) {
    New-Item -Path $logDirectory -ItemType Directory | Out-Null
    Write-Host "Log-Verzeichnis erstellt: $logDirectory"  
}

function Write-Log {
    param (
        [string]$message
    )

    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"  
    $logMessage = "$timestamp - $message"  
    Add-Content -Path $logFile -Value $logMessage
}

function Restart-Explorer {
    Write-Log "Explorer.exe wird neu gestartet, um die Änderungen anzuwenden."  
    Stop-Process -Name explorer -Force
    Start-Process explorer
    Write-Log "Explorer.exe wurde neu gestartet."  
}

function Uninstall-App {
    param (
        [string]$PackageFullName
    )

    Write-Host "Deinstalliere $PackageFullName"  
    Write-Log "Versuche, $PackageFullName zu deinstallieren"  

    try {
        Get-AppxPackage -AllUsers -Name $PackageFullName | Remove-AppxPackage -AllUsers
        Get-AppxProvisionedPackage -Online | Where-Object DisplayName -EQ $PackageFullName | Remove-AppxProvisionedPackage -Online
        Write-Log "$PackageFullName erfolgreich deinstalliert."  
    } catch {
        Write-Log "Fehler bei der Deinstallation von ${PackageFullName}: $($_)"  
    }
}

$appsToUninstall = @(
    "Microsoft.Office.Desktop",  
    "Microsoft.MicrosoftSolitaireCollection",  
    "Microsoft.Todos",  
    "microsoft.windowscommunicationsapps",  
    "Microsoft.BingWeather",  
    "Microsoft.XboxApp",  
    "Microsoft.Xbox.TCUI",  
    "Microsoft.XboxGamingOverlay",  
    "Microsoft.XboxGameOverlay",  
    "Microsoft.BingNews",  
    "Microsoft.MicrosoftOfficeHub",  
    "Microsoft.GamingApp",  
    "Microsoft.WindowsMaps",  
    "Microsoft.WindowsAlarms",  
    "Microsoft.Clipchamp",  
    "Clipchamp.Clipchamp"  
)

foreach ($app in $appsToUninstall) {
    Uninstall-App -PackageFullName $app
}

Write-Host "Deinstallation für alle vorhandenen Benutzer abgeschlossen."  
Write-Log "Deinstallation für alle vorhandenen Benutzer abgeschlossen."  

foreach ($app in $appsToUninstall) {
    Write-Host "Entferne $app aus dem Provisionierungspaket"  
    Write-Log "Entferne $app aus dem Provisionierungspaket"  
    try {
        Get-AppxProvisionedPackage -Online | Where-Object DisplayName -EQ $app | Remove-AppxProvisionedPackage -Online
        Write-Log "$app erfolgreich aus dem Provisionierungspaket entfernt."  
    } catch {
        Write-Log "Fehler beim Entfernen von $app aus dem Provisionierungspaket: $($_)"  
    }
}

Write-Host "Entfernung aus dem Provisionierungspaket abgeschlossen."  
Write-Log "Entfernung aus dem Provisionierungspaket abgeschlossen."  

$networkPath = "SERVERNAME\start2.bin"  
$localPath = "$env:LOCALAPPDATA\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin"  
$backupPath = "$logDirectory\start2.bin_OLDnotdelete"  

try {
    if (Test-Path $localPath) {
        Write-Host "Umbenennen der vorhandenen start2.bin und Verschieben nach $backupPath"  
        Write-Log "Umbenennen der vorhandenen start2.bin und Verschieben nach $backupPath"  
        Move-Item -Path $localPath -Destination $backupPath -Force
    } else {
        Write-Log "Keine vorhandene start2.bin Datei gefunden, daher keine Umbenennung erforderlich."  
    }

    Write-Host "Kopiere start2.bin von $networkPath nach $localPath"  
    Write-Log "Kopiere start2.bin von $networkPath nach $localPath"  
    Copy-Item -Path $networkPath -Destination $localPath -Force

    Write-Host "Kopieren abgeschlossen."  
    Write-Log "Kopieren von start2.bin abgeschlossen."  

    $defaultUserPath = "$env:SystemDrive\Users\Default\AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState"  
    if (-not (Test-Path $defaultUserPath)) {
        New-Item -Path $defaultUserPath -ItemType Directory -Force | Out-Null
        Write-Log "Standardverzeichnis für neue Benutzer erstellt: $defaultUserPath"  
    }
    Copy-Item -Path $networkPath -Destination $defaultUserPath\start2.bin -Force
    Write-Log "start2.bin für neue Benutzer bereitgestellt."  
} catch {
    Write-Log "Fehler beim Kopieren der start2.bin Datei: $($_)"  
}

Write-Host "Skript abgeschlossen."  
Write-Log "Skript erfolgreich abgeschlossen."  

Write-Log "Lade Default-Benutzerprofil in die Registry"  
try {
    $regPath = "$env:SystemDrive\Users\Default\NTUSER.DAT"  
    $defaultHive = "HKU\Default"  

    if (Test-Path $regPath) {
        reg load $defaultHive $regPath
        Write-Log "Default-Benutzerprofil erfolgreich geladen."  
    } else {
        Write-Log "Default-Benutzerprofil nicht gefunden."  
        exit
    }
} catch {
    Write-Log "Fehler beim Laden des Default-Benutzerprofils: $($_)"  
    exit
}

try {
    $taskbarKeyPath = "Registry::$defaultHive\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  
    $searchKeyPath = "Registry::$defaultHive\Software\Microsoft\Windows\CurrentVersion\Search"  
    $widgetsKeyPath = "Registry::$defaultHive\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  

    if (-not (Test-Path $taskbarKeyPath)) {
        Write-Log "Registry-Pfad $taskbarKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
    } else {
        Set-ItemProperty -Path $taskbarKeyPath -Name "ShowTaskViewButton" -Value 0 -Force  
        Set-ItemProperty -Path $taskbarKeyPath -Name "TaskbarAl" -Value 0 -Force  
        Write-Log "Taskleiste linksbündig ausgerichtet und aktive Anwendungen ausgeblendet für Default-Benutzer"  
    }

    if (-not (Test-Path $searchKeyPath)) {
        Write-Log "Registry-Pfad $searchKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
    } else {
        Set-ItemProperty -Path $searchKeyPath -Name "SearchboxTaskbarMode" -Value 0 -Force  
        Write-Log "Suchfeld in der Taskleiste ausgeblendet für Default-Benutzer"  
    }

    if (-not (Test-Path $widgetsKeyPath)) {
        Write-Log "Registry-Pfad $widgetsKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
    } else {
        Set-ItemProperty -Path $widgetsKeyPath -Name "TaskbarDa" -Value 0 -Force  
        Write-Log "Widgets in der Taskleiste ausgeblendet für Default-Benutzer"  
    }
} catch {
    Write-Log "Fehler beim Anpassen der Taskleiste für Default-Benutzer: $($_)"  
}

Write-Log "Entlade Default-Benutzerprofil aus der Registry"  
try {
    reg unload $defaultHive
    Write-Log "Default-Benutzerprofil erfolgreich entladen."  
} catch {
    Write-Log "Fehler beim Entladen des Default-Benutzerprofils: $($_)"  
}

$userProfiles = Get-WmiObject Win32_UserProfile | Where-Object { $_.Special -eq $false } | ForEach-Object {
    $_.SID
}

foreach ($profileSID in $userProfiles) {
    $taskbarKeyPath = "Registry::HKEY_USERS\$profileSID\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  
    $searchKeyPath = "Registry::HKEY_USERS\$profileSID\Software\Microsoft\Windows\CurrentVersion\Search"  
    $widgetsKeyPath = "Registry::HKEY_USERS\$profileSID\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  

    try {
        if (-not (Test-Path $taskbarKeyPath)) {
            Write-Log "Registry-Pfad $taskbarKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
        } else {
            Set-ItemProperty -Path $taskbarKeyPath -Name "ShowTaskViewButton" -Value 0 -Force  
            Set-ItemProperty -Path $taskbarKeyPath -Name "TaskbarAl" -Value 0 -Force  
            Write-Log "Taskleiste linksbündig ausgerichtet und aktive Anwendungen ausgeblendet für Benutzer ${profileSID}"  
        }

        if (-not (Test-Path $searchKeyPath)) {
            Write-Log "Registry-Pfad $searchKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
        } else {
            Set-ItemProperty -Path $searchKeyPath -Name "SearchboxTaskbarMode" -Value 0 -Force  
            Write-Log "Suchfeld in der Taskleiste ausgeblendet für Benutzer ${profileSID}"  
        }

        if (-not (Test-Path $widgetsKeyPath)) {
            Write-Log "Registry-Pfad $widgetsKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
        } else {
            Set-ItemProperty -Path $widgetsKeyPath -Name "TaskbarDa" -Value 0 -Force  
            Write-Log "Widgets in der Taskleiste ausgeblendet für Benutzer ${profileSID}"  
        }

        Restart-Explorer
    } catch {
        Write-Log "Fehler beim Anpassen der Taskleiste für Benutzer ${profileSID}: $($_)"  
    }
}

Write-Host "Taskleistenanpassung für alle Benutzer abgeschlossen."  
Write-Log "Taskleistenanpassung für alle Benutzer abgeschlossen."  
pebcak7123
pebcak7123 Aug 09, 2024 at 11:46:58 (UTC)
Goto Top
was mir noch aufgefallen ist es fehlt im script nen
$ErrorActionPreference = "Stop"  
sonst funktioniert fast keiner deiner try .. catch blöcke richtig.
Ausserdem hatte ich bewusst reg.exe für den search eintrag genommen, wenn du das rein mit pwershell machen willst pack am besten vor den block mit reg unload (also zeile 165) noch ein
[gc]::Collect()
[gc]::WaitForPendingFinalizers()
sonst kann vermutlich der hive öfter mal nicht entladen werden
MrHeisenberg
MrHeisenberg Aug 09, 2024 at 12:08:05 (UTC)
Goto Top
face-wink danke für den Tipp

try {
    if (Test-Path $localPath) {
        Write-Host "Umbenennen der vorhandenen start2.bin und Verschieben nach $backupPath"  
        Write-Log "Umbenennen der vorhandenen start2.bin und Verschieben nach $backupPath"  
        Move-Item -Path $localPath -Destination $backupPath -Force
    } else {
        Write-Log "Keine vorhandene start2.bin Datei gefunden, daher keine Umbenennung erforderlich."  
    }

    Write-Host "Kopiere start2.bin von $networkPath nach $localPath"  
    Write-Log "Kopiere start2.bin von $networkPath nach $localPath"  
    Copy-Item -Path $networkPath -Destination $localPath -Force

    Write-Host "Kopieren abgeschlossen."  
    Write-Log "Kopieren von start2.bin abgeschlossen."  

    $defaultUserPath = "$env:SystemDrive\Users\Default\AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState"  
    if (-not (Test-Path $defaultUserPath)) {
        New-Item -Path $defaultUserPath -ItemType Directory -Force | Out-Null
        Write-Log "Standardverzeichnis für neue Benutzer erstellt: $defaultUserPath"  
    }
    Copy-Item -Path $networkPath -Destination $defaultUserPath\start2.bin -Force
    Write-Log "start2.bin für neue Benutzer bereitgestellt."  
} catch {
    Write-Log "Fehler beim Kopieren der start2.bin Datei: $($_)"  
}

Write-Host "Skript abgeschlossen."  
Write-Log "Skript erfolgreich abgeschlossen."  

Write-Log "Lade Default-Benutzerprofil in die Registry"  
try {
    $regPath = "$env:SystemDrive\Users\Default\NTUSER.DAT"  
    $defaultHive = "HKU\Default"  

    if (Test-Path $regPath) {
        reg load $defaultHive $regPath
        Write-Log "Default-Benutzerprofil erfolgreich geladen."  
    } else {
        Write-Log "Default-Benutzerprofil nicht gefunden."  
        exit
    }
} catch {
    Write-Log "Fehler beim Laden des Default-Benutzerprofils: $($_)"  
    exit
}

try {
    $taskbarKeyPath = "Registry::$defaultHive\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  
    $searchKeyPath = "Registry::$defaultHive\Software\Microsoft\Windows\CurrentVersion\Search"  
    $widgetsKeyPath = "Registry::$defaultHive\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  

    if (-not (Test-Path $taskbarKeyPath)) {
        Write-Log "Registry-Pfad $taskbarKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
    } else {
        Set-ItemProperty -Path $taskbarKeyPath -Name "ShowTaskViewButton" -Value 0 -Force  
        Set-ItemProperty -Path $taskbarKeyPath -Name "TaskbarAl" -Value 0 -Force  
        Write-Log "Taskleiste linksbündig ausgerichtet und aktive Anwendungen ausgeblendet für Default-Benutzer"  
    }

    if (-not (Test-Path $searchKeyPath)) {
        Write-Log "Registry-Pfad $searchKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
    } else {
        reg add $searchKeyPath /v SearchboxTaskbarMode /t REG_DWORD /d 0 /f
        Write-Log "Suchfeld in der Taskleiste ausgeblendet für Default-Benutzer"  
    }

    if (-not (Test-Path $widgetsKeyPath)) {
        Write-Log "Registry-Pfad $widgetsKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
    } else {
        Set-ItemProperty -Path $widgetsKeyPath -Name "TaskbarDa" -Value 0 -Force  
        Write-Log "Widgets in der Taskleiste ausgeblendet für Default-Benutzer"  
    }
} catch {
    Write-Log "Fehler beim Anpassen der Taskleiste für Default-Benutzer: $($_)"  
}

[gc]::Collect()
[gc]::WaitForPendingFinalizers()

Write-Log "Entlade Default-Benutzerprofil aus der Registry"  
try {
    reg unload $defaultHive
    Write-Log "Default-Benutzerprofil erfolgreich entladen."  
} catch {
    Write-Log "Fehler beim Entladen des Default-Benutzerprofils: $($_)"  
}

$userProfiles = Get-WmiObject Win32_UserProfile | Where-Object { $_.Special -eq $false } | ForEach-Object {
    $_.SID
}

foreach ($profileSID in $userProfiles) {
    $taskbarKeyPath = "Registry::HKEY_USERS\$profileSID\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  
    $searchKeyPath = "Registry::HKEY_USERS\$profileSID\Software\Microsoft\Windows\CurrentVersion\Search"  
    $widgetsKeyPath = "Registry::HKEY_USERS\$profileSID\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"  

    try {
        if (-not (Test-Path $taskbarKeyPath)) {
            Write-Log "Registry-Pfad $taskbarKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
        } else {
            Set-ItemProperty -Path $taskbarKeyPath -Name "ShowTaskViewButton" -Value 0 -Force  
            Set-ItemProperty -Path $taskbarKeyPath -Name "TaskbarAl" -Value 0 -Force  
            Write-Log "Taskleiste linksbündig ausgerichtet und aktive Anwendungen ausgeblendet für Benutzer ${profileSID}"  
        }

        if (-not (Test-Path $searchKeyPath)) {
            Write-Log "Registry-Pfad $searchKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
        } else {
            reg add $searchKeyPath /v SearchboxTaskbarMode /t REG_DWORD /d 0 /f
            Write-Log "Suchfeld in der Taskleiste ausgeblendet für Benutzer ${profileSID}"  
        }

        if (-not (Test-Path $widgetsKeyPath)) {
            Write-Log "Registry-Pfad $widgetsKeyPath existiert nicht, Schlüssel werden nicht erstellt."  
        } else {
            Set-ItemProperty -Path $widgetsKeyPath -Name "TaskbarDa" -Value 0 -Force  
            Write-Log "Widgets in der Taskleiste ausgeblendet für Benutzer ${profileSID}"  
        }

        Restart-Explorer
    } catch {
        Write-Log "Fehler beim Anpassen der Taskleiste für Benutzer ${profileSID}: $($_)"  
    }
}

Write-Host "Taskleistenanpassung für alle Benutzer abgeschlossen."  
Write-Log "Taskleistenanpassung für alle Benutzer abgeschlossen."  
aqui
aqui Aug 20, 2024 at 12:41:27 (UTC)
Goto Top
Wie war das grad noch...
How can I mark a post as solved? face-wink