none
Ausgabe filtern RRS feed

  • Frage

  • Hallo,

    leider code ich noch nicht allzu lange,

    Hier zuerst mein Code:

    #
    # Projekt Citrix Profile löschen
    # Alle Server sollen nach dem eingegebenen Benutzer überprüft und die überbleibsel gelöscht.
    #
    clear
    #Options
    $User=read-host -Prompt "Benutzername des Benutzers eingeben."
    $Profilliste="$env:Logonserver\netlogon\godlike\citrixprofile.txt"
    $ausnahme="$env:Logonserver\netlogon\godlike\ausnahme.txt"
    # Options Ende.
    # Array einlesen
    $ausnahmeArr = Get-Content $ausnahme 
    # Array testen ob es den Namen enthält 
    If ($ausnahmeArr -contains $User) { 
    Write-Host "Benutzer $User steht auf der schwarzen Liste"
    }
    Else {
    # profilliste wird ausgelesen inhalt der profilliste ist (jede zeile) \\server1\m$\Dokumente und einstellungen\
    # danach wird nach dem $user* gesucht weil es mehrere files gibt mit Endungen z.B .domain.001
    # und es wird ausgegeben, z.B : rmdir -Recurse -force \\server1\m$\dokumente und einstellungen\administrator
    # Es fehlt ein Filter, der verhindern soll, das ein benutzer aus der ausnahmeliste gelöscht wird.
    Get-Content $Profilliste | %{Get-ChildItem "$_$user*"} | %{write-host "rmdir -Recurse -force "$_""}
    $bestaetigung=read-host -Prompt "Ueberprüfe das was geloescht wird, und schreibe Y rein"
    
    if ($bestaetigung -eq "Y") {
    # profilliste wird ausgelesen inhalt der profilliste ist (jede zeile) \\server1\m$\Dokumente und einstellungen\
    # danach wird nach dem $user* gesucht weil es mehrere files gibt mit Endungen z.B .domain.001
    # Der befehl wird durchgeführt z.B :rmdir -Recurse -force \\server1\m$\dokumente und einstellungen\administrator
    # Es fehlt ein Filter, der verhindern soll, das ein benutzer aus der ausnahmeliste gelöscht wird.
    
    Get-Content $Profilliste | %{Get-ChildItem "$_$user*"} | %{rmdir -Recurse -force "$_" }
    Write-Host "DONE, gelöscht"
    }
    if ($bestaetigung -eq $null) {
    Write-Host "Abgebrochen"
    }
    else {
    Write-Host "Nicht durchgeführt"
    }
    }

    mit dem Script würde ich, wenn ich admin eingebe, die Ordner vom Administrator löschen, was in vielen Fällen nicht so prikelnd ist.

    ich kriege es nur nicht hin die Ausgabe so zu filtern, das Zeilen mit dem Begriff aus der Liste erst garnicht erscheinen.

    Ich weiss hier gibt es genug Profis, die soetwas ohne Probleme realisieren können.

    in meinem Fall hat Google nicht mehr weitergeholfen.

    Gruss Stan


    • Bearbeitet Stan.Hoppe Freitag, 21. September 2012 16:23
    Freitag, 21. September 2012 15:29

Antworten

  • Dir Richtung stimmt aber. Teste das mal:

    Get-Content $Profilliste | % {  if (!($ausnahmeliste -contains (Split-Path $_ -Leaf))) { Get-ChildItem "$_$user*" } }  | % {write-host "rmdir -Recurse -force $($_)"}

    Grüße, Denniver

    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    • Als Antwort markiert Stan.Hoppe Mittwoch, 26. September 2012 11:25
    Mittwoch, 26. September 2012 10:17
    Moderator

Alle Antworten

  • > mit dem Script würde ich, wenn ich admin eingebe, die Ordner vom Administrator löschen,

    Nicht wenn du "admin" in die Ausnahmeliste schreibst, dann kommt die Ausgabe "Benutzer admin steht auf der schwarzen Liste". Ich dachte dafür wäre diese Liste da?

    Abgesehen davon, musst du übrigens

    Get-Content $Profilliste | %{Get-ChildItem "$_$user*"}

    nur einmal ausführen und dann in eine Variable schreiben. Dann benutzt du die Variable in den beiden Pipelines. Das dürfte deutlich schneller gehen.

    Schau dir auch mal den Parameter "-whatif" an.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Montag, 24. September 2012 14:45
    Moderator
  • Hallo Denniver,

    Danke für die Antwort.

    Die Liste ansich ist zum Filtern der Benutzer, das ist richtig.

    Allerdings ist es so, das ich die File Ebene mit dem * durchsuche also wenn man am Anfang admin eingibt, wird alles was den admin beinhaltet auf der Fileebene gesucht, was auch ersteinmal so passt, da es auch Profile Admin.domain.001 gibt.

    ich will nur am Ende sicher gehen das wenn bei der endgültigen Ausgabe bei der Löschung der Ordner  auf keinen Fall die geblacklisteten User gelsöcht werden.

    also eine doppelte absicherung.

    Endergebniss bei eingabe von :All

    \\server\c$\dokumente und einstellungen\allemann herz

    \\server\c$\dokumente und einstellungen\allemann herz.domain.001

    \\server\c$\dokumente und einstellungen\allemann herz.domain.002

    \\server\c$\dokumente und einstellungen\all users

    Was ich am Ende verhindern will, ist das die Zeile "\\server\c$\dokumente und einstellungen\all users" mithilfe einer prüfung aus einer Blacklist überhaupt erscheint und damit bei Eingabe von Y gelöscht wird.

    Das ist meine Idee dahinter.

    Ich habe nur etwas schwirigkeiten dies Umzusetzen.

    Deinen Tip werde ich sofort angehen und den Parameter -whatif genau anschauen.

    sollte ich eine Lösung für mein Problem finden, werde ich dies hier natürlich reinschreiben.

    Gruss Stan.

    Mittwoch, 26. September 2012 07:53
  • Am liebste würde ich dashier machen:

    %{if ($_ -like (*$ausnahmeliste*)){write-host Blacklisted}else {write-host "rmdir -Recurse -force "$_"" }}

    aber da die $ausnahmeliste ein Array wäre, würde es nicht gehen, ich kann ja nur andersrum vergleichen, also das Array $blacklist -contains $_

    so würde er aber "All Users" , "Administrator" gegen \\server\c$\dokumente und einstellungen\allemann herz was ja unlogisch ist, und ja nicht geht.

    Ich bin mir sicher, da gibt es was relativ einfaches als Lösung, aber wie schon gesagt scripte ich nicht allzulange, und mir fehlt dieser Weg.

    Gruss Stan.

    Mittwoch, 26. September 2012 09:52
  • Dir Richtung stimmt aber. Teste das mal:

    Get-Content $Profilliste | % {  if (!($ausnahmeliste -contains (Split-Path $_ -Leaf))) { Get-ChildItem "$_$user*" } }  | % {write-host "rmdir -Recurse -force $($_)"}

    Grüße, Denniver

    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    • Als Antwort markiert Stan.Hoppe Mittwoch, 26. September 2012 11:25
    Mittwoch, 26. September 2012 10:17
    Moderator
  • Hallo Denniver,

    Ich danke dir für den Denkansatz!

    so wird es auf jeden fall funktionieren, wenn ich das splitte und nach dem Ergebnis suche.

    Wenn ich das script fertig habe, poste ich das nochmal komplett hierhin.

    Danke.

    Gruss Stan.

    Mittwoch, 26. September 2012 11:26
  • Hallo,

    Hier ist das fertige Script. Jetzt funktioniert es genau wie ich das haben wollte.

    Danke nochmal an Denniver Reining

    # Projekt Citrix Profile löschen
    clear
    #Options
    $user=read-host -Prompt "Benutzername des Benutzers eingeben."
    $Profilliste="$env:Logonserver\netlogon\citrixprofile.txt"
    $ausnahme="$env:Logonserver\netlogon\ausnahme.txt"
    #Options Ende
    $ausnahmeliste=@(Get-Content $ausnahme)
    $ausnahmeliste|%{if ($user -ne $_) {Write-Host "vergleich mit $_ OK"} else {nope}}
    $Ordnerliste=@(Get-Content $Profilliste | %{Get-ChildItem "$_$user*"})
    $Ordnerliste | %{if (!($ausnahmeliste -contains (Split-Path $_ -Leaf))) { write-Host "rmdir -Recurse -force "$_"" } } 
    $bestaetigung=read-host -Prompt "Ueberprüfe das was geloescht wird, und schreibe Y rein"
    if ($bestaetigung -eq "Y") {
    $Ordnerliste | %{if (!($ausnahmeliste -contains (Split-Path $_ -Leaf))) { rmdir -Recurse -force "$_" } }
    Write-Host "DONE, gelöscht"
    }
    if ($bestaetigung -eq $null) {
    Write-Host "Abgebrochen"
    }
    else {
    Write-Host "Nicht durchgeführt"
    }
    
    function nope
    {
    process {
    Write-Host "Benutzer $user steht auf der schwarzen Liste"
    exit
    }
    }

    Gruss Stan.

    Mittwoch, 26. September 2012 12:03