none
Fehler im Script RRS feed

  • Frage

  • Hallo Freunde,

    ich versuche verzweifelt ein Fehler in meinem Script zu finden. Es ist ein Anmeldescript und soll dem User Drucker bzw Netzlaufwerke verbinden basierend auf der Gruppenzugehörigkeit. 

    Hier der Script:

    [string]$ProductType = (Get-WmiObject win32_OperatingSystem).ProductType
    $Vorname = (Get-ADUser -Identity $env:USERNAME).GivenName
    # Write-Host $Vorname
    $Nachname = (Get-ADUser -Identity $env:USERNAME).SurName
    # Write-Host $Nachname
    $SID = (Get-ADUser -Identity $env:USERNAME).SID
    # Write-Host $SID
    $UserGroups = (Get-ADPrincipalGroupMembership $env:USERNAME).SamAccountName
    
    ForEach($i in $UserGroups)
    {
        if ($i -like  "RG-*")
            {
            switch -Wildcard ($i)
                {
                "RG-prn-*" {
                            if ($ProductType -eq "1")
                                    {
                                    Write-Host "Resourcengruppe fuer Drucker gefunden: "$i
                                    $ArrDrucker = $i.Split("-")
                                    Write-Host $ArrDrucker
                                    $StandardDrucker = $ArrDrucker[4]
                                    # Write-Host $StandardDrucker
                                    $DruckerName = $ArrDrucker[3]
                                    Write-Host "Druckername: "$DruckerName
                                    $PrintServer = $ArrDrucker[2]
                                    Write-Host "Printserver: "$PrintServer
                                    $NetworkDrucker = "\\$PrintServer\$DruckerName"
                                    Write-Host "Netzwerkdrucker: "$NetworkDrucker
                                    }
    
                            }
    
                "RG-drv-*" {
                            if ($ProductType -eq "1")
                                    {
                                     Write-Host "Resourcengruppe fuer Laufwerke gefunden: "$i
                                     $ia =$i.Replace("!","\")
                                     Write-Host $ia
                                     $ArrNetzLw = $ia.Split("-")
                                     Write-Host $ArrNetzLw
                                     $drvShare = $ArrNetzLw[2]
                                     Write-Host "Freigabe: "$drvShare
                                     $drvLetter = $ArrNetzLw[3]
                                     Write-Host "Laufwerk: "$drvLetter
                                     $drvName = $ArrNetzLw[4]
                                     Write-Host "Laufwerkname: "$drvName
                                     }
                            }
                }
            }
    }
    


    hier das Ergebnis:

    Resourcengruppe fuer Laufwerke gefunden:  RG-drv-sub.test.com!dfs!work-w-Work
    RG drv sub.test.com\dfs\work w Work
    Freigabe:   
    Laufwerk:  d
    Laufwerkname:  r
    ___________________
    Resourcengruppe fuer Drucker gefunden:  RG-prn-ps01.sub.test.com-npfm2004-nein
    RG-prn-ps01.sub.test.com-npfm2004-nein
    RG prn ps01.sub.test.com npfm2004 nein
    Druckername:  npfm2004
    Printserver:  ps01.sub.test.com
    Netzwerkdrucker:  \\ps01.sub.test.com\npfm2004

    Wie man sehen kann, macht der Script bei Netzlaufwerken nicht das was er machen soll (besser gesagt was ich will) und ich finde den Fehler nicht.

    so sollte das Ergebniss meiner Meinung nach aussehen:

    Resourcengruppe fuer Laufwerke gefunden:  RG-drv-sub.test.com!dfs!work-w-Work
    RG drv sub.test.com\dfs\work w Work
    Freigabe:   sub.test.com\dfs\work
    Laufwerk:  w
    Laufwerkname:  Work

    Wer einen Fehler findet, bitte posten und wenn es geht eine kurze Erklärung warum das so wie ich es gemacht habe nicht funktionier. Aus Fehlern lernt man bekanntlich ;-)


    Montag, 1. Juni 2015 07:42

Antworten

  • >mir wäre lieber wenn du dazu was sagen würdest. Die Aufgabe ist nicht so einfach wie man es auf den ersten Schein glauben kann.

    Das glaube ich dir und genau deswegen kann ich ohne Kenntnisse eurer Umgebung und ihrer Besonderheiten dir auch hier keine konkrete Lösung vorzuschlagen. Nicht zuletzt sprengt das auch die Möglichkeiten hier im Forum. Zum Thema erprobte Konzepte bezl. Ad-Gruppen und Laufwerkszuweisungen, sollte es aber massenhaft Infos sowohl online, also auch in Buchform geben.
    Ich kann dir also nur allgemein sagen, das ich es für keine gute Idee halte, Laufwerksbezeichnungen in die Gruppennamen zu codieren und dann wieder zu extrahieren. Dafür gibt es so viele Gründe, das ich gar nicht weiß wo ich anfangen soll. :)
    IT-Umgebungen haben die Angewohnheit mit der Zeit größer und unübersichtlicher zu werden und nicht umgekehrt. Eine gute IT-Struktur sollte also einfach, d.h. klar strukturiert und möglichst ohne Überraschungen sein. Je mehr unübliche Besonderheiten du schaffst, desto schwieriger ist es, auf Dauer den Überblick zu behalten.
    Pfade und Laufwerksbuchstaben im Detail in Gruppennamen abzulegen ist nicht nur unüblich, sondern auch unpraktisch. Die Tatsache das du z.b. mit Behelfstrennzeichen arbeiten musst um die unterschiedlichen Datenteile im Namen abzutrennen und gar nicht alle nötigen Zeichen unterbringen kannst, sollte dir eigentlich schon klarmachen, das das nicht der geeignete Ort ist um variable Daten abzulegen. Mit wachsender Komplexität, brauchst du irgendwann eine mehrseitige Anleitung wie Gruppenamen zu schreiben und welche nicht erlaubten Zeichen durch welche anderen zu ersetzen sind. Das Ganze muss sich natürlich auch immer im Script wiederholen... und und und.
    Gruppennamen sollten klar strukturiert sein und einem einheitlichen übergreifenden Konzept folgen. Wichtige Daten sollten an Stellen liegen wo man sie erwartet und die für ihre Beschaffenheit geeignet sind.
    Die Zuordnung Gruppe<->LW gehört in dein LogonScript oder noch besser in eine externe Zuordungstabelle, die das Script dann benutzt. Eine simple csv z.B., mit Name, Pfad, LwBuchstabe und Gruppe, ist klar und übersichtlich, jedem sofort verständlich und lässt sich daher einfach ändern. Auch von jemand anderem, wenn du dir mal ein Bein brichst. So lange alle Logik an einem Ort ist, kannst du hier auch schnell und flexibel auf Änderungen oder Sonderfälle reagieren, ohne befürchten zu müssen, irgend eine Besonderheit nicht bedacht zu haben.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Montag, 1. Juni 2015 22:06
    Moderator
  • Also ein kurzer Test ergibt bei mir:

    wenn  $i = "RG-drv-sub.test.com!dfs!work-w-Work" ist, dann erhalte ich das Ergebnis:
     

    Resourcengruppe fuer Laufwerke gefunden:  RG-drv-sub.test.com!dfs!work-w-Work
    RG-drv-sub.test.com\dfs\work-w-Work
    RG drv sub.test.com\dfs\work w Work
    Freigabe:  sub.test.com\dfs\work
    Laufwerk:  w
    Laufwerkname:  Work
     

    was dem entspricht was du unten als gewünschtes Ergebnis gepostet hast. Ansonsten ist das ganze Konstrukt etwas umständlich. Die  if ($i -like  "RG-*")-Condition ist überflüssig, weil sie im folgenden switch bereits enthalten ist. Und warum wird zweimal ProductType auf die gleiche Bedingung geprüft?
     
    Zu der sportlichen Idee, Laufwerke und Ordner in Gruppennamen reinzucodieren sag ich jetzt mal nix. :)

    Grüße, Denniver

     


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Montag, 1. Juni 2015 15:19
    Moderator

Alle Antworten

  • Also ein kurzer Test ergibt bei mir:

    wenn  $i = "RG-drv-sub.test.com!dfs!work-w-Work" ist, dann erhalte ich das Ergebnis:
     

    Resourcengruppe fuer Laufwerke gefunden:  RG-drv-sub.test.com!dfs!work-w-Work
    RG-drv-sub.test.com\dfs\work-w-Work
    RG drv sub.test.com\dfs\work w Work
    Freigabe:  sub.test.com\dfs\work
    Laufwerk:  w
    Laufwerkname:  Work
     

    was dem entspricht was du unten als gewünschtes Ergebnis gepostet hast. Ansonsten ist das ganze Konstrukt etwas umständlich. Die  if ($i -like  "RG-*")-Condition ist überflüssig, weil sie im folgenden switch bereits enthalten ist. Und warum wird zweimal ProductType auf die gleiche Bedingung geprüft?
     
    Zu der sportlichen Idee, Laufwerke und Ordner in Gruppennamen reinzucodieren sag ich jetzt mal nix. :)

    Grüße, Denniver

     


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Montag, 1. Juni 2015 15:19
    Moderator
  • Hallo und danke erst mal Denniver.

    Nach dem es bei dir Funktioniert hat habe schlicht und einfach mein Rechner neu gestartet und das bewirkt wie so oft wunder. Der Script läuft so wie er laufen soll.

    "Zu der sportlichen Idee, Laufwerke und Ordner in Gruppennamen reinzucodieren sag ich jetzt mal nix."

    mir wäre lieber wenn du dazu was sagen würdest. Die Aufgabe ist nicht so einfach wie man es auf den ersten Schein glauben kann.

    Alle User sollen das gleiche LoginScript bekommen aber nicht alle die gleichen Laufwerke... wenn du mal eine Idee hast wie ich es lösen kann, gerne her damit. Bin für jede Idee dankbar ;-)

    LG

    Martin

    Montag, 1. Juni 2015 16:00
  • >mir wäre lieber wenn du dazu was sagen würdest. Die Aufgabe ist nicht so einfach wie man es auf den ersten Schein glauben kann.

    Das glaube ich dir und genau deswegen kann ich ohne Kenntnisse eurer Umgebung und ihrer Besonderheiten dir auch hier keine konkrete Lösung vorzuschlagen. Nicht zuletzt sprengt das auch die Möglichkeiten hier im Forum. Zum Thema erprobte Konzepte bezl. Ad-Gruppen und Laufwerkszuweisungen, sollte es aber massenhaft Infos sowohl online, also auch in Buchform geben.
    Ich kann dir also nur allgemein sagen, das ich es für keine gute Idee halte, Laufwerksbezeichnungen in die Gruppennamen zu codieren und dann wieder zu extrahieren. Dafür gibt es so viele Gründe, das ich gar nicht weiß wo ich anfangen soll. :)
    IT-Umgebungen haben die Angewohnheit mit der Zeit größer und unübersichtlicher zu werden und nicht umgekehrt. Eine gute IT-Struktur sollte also einfach, d.h. klar strukturiert und möglichst ohne Überraschungen sein. Je mehr unübliche Besonderheiten du schaffst, desto schwieriger ist es, auf Dauer den Überblick zu behalten.
    Pfade und Laufwerksbuchstaben im Detail in Gruppennamen abzulegen ist nicht nur unüblich, sondern auch unpraktisch. Die Tatsache das du z.b. mit Behelfstrennzeichen arbeiten musst um die unterschiedlichen Datenteile im Namen abzutrennen und gar nicht alle nötigen Zeichen unterbringen kannst, sollte dir eigentlich schon klarmachen, das das nicht der geeignete Ort ist um variable Daten abzulegen. Mit wachsender Komplexität, brauchst du irgendwann eine mehrseitige Anleitung wie Gruppenamen zu schreiben und welche nicht erlaubten Zeichen durch welche anderen zu ersetzen sind. Das Ganze muss sich natürlich auch immer im Script wiederholen... und und und.
    Gruppennamen sollten klar strukturiert sein und einem einheitlichen übergreifenden Konzept folgen. Wichtige Daten sollten an Stellen liegen wo man sie erwartet und die für ihre Beschaffenheit geeignet sind.
    Die Zuordnung Gruppe<->LW gehört in dein LogonScript oder noch besser in eine externe Zuordungstabelle, die das Script dann benutzt. Eine simple csv z.B., mit Name, Pfad, LwBuchstabe und Gruppe, ist klar und übersichtlich, jedem sofort verständlich und lässt sich daher einfach ändern. Auch von jemand anderem, wenn du dir mal ein Bein brichst. So lange alle Logik an einem Ort ist, kannst du hier auch schnell und flexibel auf Änderungen oder Sonderfälle reagieren, ohne befürchten zu müssen, irgend eine Besonderheit nicht bedacht zu haben.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Montag, 1. Juni 2015 22:06
    Moderator
  • Hallo Denniver,

    die Idee mit der  externe Zuordungstabelle hat mir sehr gefallen die ich auch gleich ausprobiert habe..... und es funktioniert. Danke für den TIPP

    Mittwoch, 3. Juni 2015 06:31