Powershell: Remove-ItemProperty
Hi Powershell User,
ich habe ein Poweshell-Script, mit welchem ich diverse Einstellung für User konfiguriere.
U.a. wird je nachdem, ob es sich bei dem Gerät um einen Desktop oder ein mobiles Gerät handelt, bei Desktop Geräten ein Proxy konfiguriert.
Wenn der Registry-Eintrag nicht vorhanden war, konnte ich den Fehler via "-ErrorAction SilentlyContinue" unterdrücken, was jetzt nicht mehr funktioniert!
Dies funktionierte Monate einwandfrei, plötzlich wift es eine Fehlermeldung aus.
Hier der betroffene Codeschnippsel:
Seit einiger Zeit erhalte ich bei bei der Zeile folgenden Fehler:
Wer hilft mir auf die Sprünge?
Gruß
Potshock
ich habe ein Poweshell-Script, mit welchem ich diverse Einstellung für User konfiguriere.
U.a. wird je nachdem, ob es sich bei dem Gerät um einen Desktop oder ein mobiles Gerät handelt, bei Desktop Geräten ein Proxy konfiguriert.
Wenn der Registry-Eintrag nicht vorhanden war, konnte ich den Fehler via "-ErrorAction SilentlyContinue" unterdrücken, was jetzt nicht mehr funktioniert!
Dies funktionierte Monate einwandfrei, plötzlich wift es eine Fehlermeldung aus.
Hier der betroffene Codeschnippsel:
$Desktop = Get-WmiObject -class win32_ComputerSystem | select PcSystemType
if ($Desktop.PcSystemType -eq 2) {
Write-Host -Foreground Yellow "Pc ist ein Laptop, es wird kein Proxy konfiguriert!"
Set-ItemProperty -Type DWord -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "AutoDetect" -value "0"
# "Remove-ItemProperty" warf vormals eine Fehlermeldung aus, wenn der Wert (-name) nicht existiert, was der Normalfall ist.
# Um diese Fehlermeldung zu unterdruecken, haengten wir ein "-ErrorAction SilentlyContinue" an.
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "AutoConfigURL" -ErrorAction SilentlyContinue
# Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "AutoConfigURL"
}
else {
Write-Host -Foreground Yellow "Pc ist ein Desktop/Workstation/Server, es wird die Automatische Konfiguration des Proxy durchgefuehrt!"
Set-ItemProperty -Type DWord -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "AutoDetect" -value "0"
Set-ItemProperty -Type ExpandString -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "AutoConfigURL" -value "http://www.UnsereDomain/proxy.pac"
}
Seit einiger Zeit erhalte ich bei bei der Zeile
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "AutoConfigURL" -ErrorAction SilentlyContinue
Remove-ItemProperty : Die Eigenschaft AutoConfigURL ist im Pfad
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings nicht vorhanden.
In Zeile:45 Zeichen:5
+ Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Curre ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (AutoConfigURL:String) [Remove-ItemProperty], PSArgumentException
+ FullyQualifiedErrorId : System.Management.Automation.PSArgumentException,Microsoft.PowerShell.Commands.RemoveItemProp
ertyCommand
Wer hilft mir auf die Sprünge?
Gruß
Potshock
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3029900600
Url: https://administrator.de/contentid/3029900600
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
9 Kommentare
Neuester Kommentar
Ahh... das hab ich tatsächlich übersehen...
Gute Frage, weshalb das nicht geht... hier und da gibt es ähnliche Phänomene dem Parameter. Die Lösung war dann ein try... catch
Gute Frage, weshalb das nicht geht... hier und da gibt es ähnliche Phänomene dem Parameter. Die Lösung war dann ein try... catch
try {Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "AutoConfigURL"} catch {}
Moin,
Naturgemäß unterdrückt -ErrorAction SilentlyContinue nur die Ausgabe auf der Konsole - schreibt SIe aber dennoch in die $Error-Variable.
Gruß Thomas
Zitat von @potshock:
Ich sammel am Ende des Scripts alle aufgetreten Fehler und schreibe die in eine Log Datei. Und genau diesen erwartbaren Fehler will ich dort nicht sehen.
das heisst, auf der Konsole selbst wird der Fehler schon unterdrückt?Ich sammel am Ende des Scripts alle aufgetreten Fehler und schreibe die in eine Log Datei. Und genau diesen erwartbaren Fehler will ich dort nicht sehen.
Naturgemäß unterdrückt -ErrorAction SilentlyContinue nur die Ausgabe auf der Konsole - schreibt SIe aber dennoch in die $Error-Variable.
Wie verhindert man das?
Möglichkeit 1: Das Property nur löschen, falls es existiert
$Item = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
if (Test-Path $Item -and (Get-Item $Item).GetValue("AutoConfigURL")) {Remove-ItemProperty $Item "AutoConfigURL"}
Möglichkeit 2: Fehler mit Try/Catch abfangen und aus der Errorvariable entfernen
try {Remove-ItemProperty -ErrorAction Stop "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" "AutoConfigURL"}
catch {$Error.Remove($_)}
Gruß Thomas
Moin,
Gruß Thomas
Zitat von @potshock:
Möglichkeit 1 schreibt folgenden Fehler (-and ist doch aber der Verknüpfungsoperator):
mein Fehler. Test-Path muss natürlich in Klammern, um -and nutzen zu können.Möglichkeit 1 schreibt folgenden Fehler (-and ist doch aber der Verknüpfungsoperator):
Test-Path : Es wurde kein Parameter gefunden, der dem Parameternamen "and" entspricht.
In Zeile:61 Zeichen:21
+ if (Test-Path $Item -and (Get-Item $Item).GetValue("AutoConfigURL")) ...
+ ~~~~
if ((Test-Path $Item) -and (Get-Item $Item).GetValue("AutoConfigURL"))
Möglichkeit 2 gibt den selben Fehler wie oben bei em-pie in der Error.log aus:
Seltsamer Weise, scheint der ErrorRecord, der dem Catch-Block übergeben wird, nicht mit dem in der ErrorVariable übereinzustimmen (obwohl die exakt beide den selben Inhalt haben). Da wir im Catch-Block schon wissen, dass ein zu löschender Fehler in der Error-Variable steht, können wir aber natürlich auch einfach das letzte Objekt in der Error-Variable löschen lassen.try {Remove-ItemProperty -ErrorAction Stop "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" "AutoConfigURL"}
catch {$Error.Remove($Error[-1])}
Gruß Thomas