Powershell Wert der Property entfernen manipulieren
Hallo zusammen,
ich möchte einen bestimmten Key in der Registry ändern. Genauer gesagt, dass bei allen Volumes der Papierkorb direkt geleert wird.
Dafür hab ich ein Powershell-Script angefangen zu schreiben.
Die Volumes lass ich mir über die Get-Volumes Funktion ausgeben und via Where-Object selektiere ich die Volumes nach Labels.
Nun hab ich die gewünschten Werte, also besser gesagt die UniqueID der Volumes. Leider ist da aber noch eine Pfadangabe mit im Wert, die es unmöglich macht, den Wert als Variable zu definieren und in ein Registry-Key-Befehl einzubauen.
Wie kann ich nun den Wert einer Property manipulieren bzw. auf den gewünschten Bereich kürzen?
Bsp: ?\\ssfdf {6545fd6sd4fsdfggsdfg} hier möchte ich nur {6545fd6sd4fsdfggsdfg} weiter nutzen.
Geht das überhaupt?
ich möchte einen bestimmten Key in der Registry ändern. Genauer gesagt, dass bei allen Volumes der Papierkorb direkt geleert wird.
Dafür hab ich ein Powershell-Script angefangen zu schreiben.
Die Volumes lass ich mir über die Get-Volumes Funktion ausgeben und via Where-Object selektiere ich die Volumes nach Labels.
Nun hab ich die gewünschten Werte, also besser gesagt die UniqueID der Volumes. Leider ist da aber noch eine Pfadangabe mit im Wert, die es unmöglich macht, den Wert als Variable zu definieren und in ein Registry-Key-Befehl einzubauen.
Wie kann ich nun den Wert einer Property manipulieren bzw. auf den gewünschten Bereich kürzen?
Bsp: ?\\ssfdf {6545fd6sd4fsdfggsdfg} hier möchte ich nur {6545fd6sd4fsdfggsdfg} weiter nutzen.
Geht das überhaupt?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 333879
Url: https://administrator.de/forum/powershell-wert-der-property-entfernen-manipulieren-333879.html
Ausgedruckt am: 23.12.2024 um 10:12 Uhr
9 Kommentare
Neuester Kommentar
Servus,
Wenn es nur um das leeren der Papierkörbe geht geht das doch einfacher:
https://www.windowspro.de/script/clear-recyclebin-papierkorb-leeren-powe ...
VG
Wenn es nur um das leeren der Papierkörbe geht geht das doch einfacher:
https://www.windowspro.de/script/clear-recyclebin-papierkorb-leeren-powe ...
VG
Das ist doch schnell per GPO (oder einem einzigen Reg-Eintrag) erledigt!
http://m.windowsitpro.com/windows/q-how-can-i-disable-recycle-bin
Wenn das per PS gesetzt werden soll, warum auch immer:
Gruß p.
http://m.windowsitpro.com/windows/q-how-can-i-disable-recycle-bin
Wenn das per PS gesetzt werden soll, warum auch immer:
# Für den aktuellen User des Rechners
New-Item "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" -EA SilentlyContinue
New-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" -Name NoRecycleFiles -Value 1 -PropertyType DWORD -Force
# "ODER" alternativ direkt für alle User des Rechners
New-Item "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" -EA SilentlyContinue
New-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" -Name NoRecycleFiles -Value 1 -PropertyType DWORD -Force
Nichts leichter als das ...
$ids = gwmi win32_Volume | ?{$_.DriveLetter -in 'c:','d:'} | %{$_.DeviceId -replace '.*(\{.*\}).*','$1'}
gci 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\Volume' | ?{$_.PSChildName -in $ids} | %{New-ItemProperty $_.PSPath -Name NukeOndelete -PropertyType DWORD -Value 1 -Force}
Machen wir doch glatt:
$ids = gwmi win32_Volume | ?{$_.DriveLetter -in 'c:','d:'} | %{$_.DeviceId -replace '.*(\{.*\}).*','$1'}
Filtert mit where-object (?{} ist die Abkürzung dafür, ja Powersheller sind Schreibfaul ) die Drives die gewünscht sind und mit einer For-Each -Schleife (%{} Abkürzung) wird mit Regular Expression-Replace die ID extrahiert. In der Variablen $ids befindet sich also hinterher ein Array der GUIDs der Drives.gci 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\Volume' | ?{$_.PSChildName -in $ids} | %{New-ItemProperty $_.PSPath -Name NukeOndelete -PropertyType DWORD -Value 1 -Force}
Mit Get-Childitem holen wir uns den Registry-Key und vergleichen wieder mit einem where-object (?{} du erinnerst dich ) ob der Name eines Subkeys in der Liste der $ids vorkommt (-in Operator), wenn ja legen wir wieder mit der For-Each-Schleife in den passenden Keys einen neuen DWORD Wert an, feddich.
Der erste Parameter definiert den Regular Expression-Pattern der folgendes Bedeutet:
Und der zweite definiert was ersetzt wird, das $1 ist die Backreference 1 welche mit den Klammern im Pattern definiert wird.
Regular Expressions ist ein eigenes riesiges Thema, da solltest du dich erst mal einlesen:
Regular Expressions Tutorial
Wenn das zu schwer für dich ist, es geht auch klassisch einfacher in der For-Each Schleife und einem Split:
.*(\{.*\}).*
------------
Match any single character «.*»
Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Match the regex below and capture its match into backreference number 1 «(\{.*\})»
Match the character “{” literally «\{»
Match any single character «.*»
Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Match the character “}” literally «\}»
Match any single character «.*»
Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
$1
Insert the text that was last matched by capturing group number 1 «$1»
Regular Expressions ist ein eigenes riesiges Thema, da solltest du dich erst mal einlesen:
Regular Expressions Tutorial
Wenn das zu schwer für dich ist, es geht auch klassisch einfacher in der For-Each Schleife und einem Split:
%{"{$($_.DeviceId.split('{}')[1])}"}