none
Array enthält falsche Werte RRS feed

  • Frage

  • Schönen guten Tag zusammen,

    derzeit arbeite ich an einem Powershell-Script, welches mir die Anlage von AD-Benutzern vereinfachen soll.
    Das Ganze ist grafisch, dabei arbeite ich mit den Windows.Forms.

    Das Problem bezieht sich aber auf eine eigentlich relativ einfache Funktion, in der ein Array gebildet wird, das Ganze halt dynamisch, abhängig von einem Wert, der im Hauptfenster definitiv gebildet wird. Die Funktion wird erst dann ausgeführt, wenn über einen Button ein zweites Fenster aufgerufen wird. Alle notwendigen Variablen für die Funktion sind definitiv vorhanden.

    Und zwar scheitere ich an folgendem:

    Zunächst wird im Script ziemlich am Anfang folgender Befehl ausgeführt: Hintergedanke dabei ist, dass ich später alle Werte in Listboxen auswählen kann, die irgendein Mitarbeiter schon mal definiert hat. Den Bezug auf die StreetAddress (-like *) habe ich gewählt, um nicht unzählige unpersonalisierte Accounts mit ins Array zu nehmen.

    $ArrayOfAddress = Get-ADUser -Filter {StreetAddress -like "*"} -Properties CO, StreetAddress, Company, C | select Co, C, Company, StreetAddress
    
    

    In der o.g. Funktion passiert u.a. folgendes: Aus dem gerade definierten Array wird abhängig des aktiven Länderkürzels ein neues Array definiert, wo zudem das Feld Company und Streetaddress keinen leeren Wert hat. Die Variablen "Companies" und "Streets" werden vorher mit "@()" definiert. Hier der Code:

    $Objects = $ArrayOfAddress | Where-Object {(($_.C -like "$CountryShortcut") -and ($_.Company) -and ($_.StreetAddress))}
    
    foreach ($Object in $Objects) {
                
                $CurStreet = $Object.StreetAddress
                $CurCompany = $Object.Company
                if ($Streets -notcontains $CurStreet) {$Streets += $CurStreet}
                if ($Companies -notcontains $CurCompany) {$Companies += $CurCompany}
                }
    

    In einer Listbox werden die jeweiligen Unternehmen und Straßen/Adressen dann dargestellt. Als Ergebnis erhalte ich aber immer die gleichen Werte, als wenn das Länderkürzel überhaupt nicht interessieren würde. Lasse ich mir das selbe Array im Gridview anzeigen und filtere nach den gleichen Werten wie im Script, erhalte ich ganz andere Werte. Irgendwas stimmt hier also im Script nicht, aber ich weiß nicht was.

    Hier noch der Code von einer Listbox:

    foreach ($Company in $Companies) {
    [void]$CompanyListBox.Items.Add($Company)
    if ("$Company" -like "Mein Stanard Unternehmen") { [void] $CompanyListBox.SetSelected($i,$true) }
    $i++
    }
    $PersonalInformationWindow.Controls.Add($CompanyListBox)
            

    Ich hoffe, mir kann jemand helfen.
    Vielen Dank vorab!

    MfG,
    Jannik D.

    Freitag, 31. März 2017 11:53

Antworten

Alle Antworten

  • Moin,

    auf den ersten Blick drängt sich mir der Verdacht auf, dass in Deiner Variablen $CountryShortcut etwas anderes steht als erwartet.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Freitag, 31. März 2017 15:49
  • Guten Morgen,

    danke für deine Antwort und Hilfe.
    Das gleiche habe ich mir auch schon gedacht und habe deshalb in der Funktion, die durch den Buttonklick aufgerufen wird, mir u.a. diese Variable ausgeben lassen. Sie enthält den richtigen Wert, also z.B. "DE" für Deutschland. Dank Dir hab ich mir das Ganze nochmal genauer angeschaut. Die Variable ist zunächst mal richtig definiert, ich erhalte sie nämlich wie folgend (Auszug aus dem Script): 

    Write-Host "TargetOUString: $TargetOUString"
    Write-Host "CityShortCut: $CityShortcut"
    Write-Host "City: $City"
    Write-Host "CountryShourtcut: $CountryShortcut"
    Write-Host "Country: $Country"

    Führe ich das Script aus, bekomme ich die richtigen Werte aus Output.

    Ganz anders aber in der Funktion, in der das Array gebildet wird. Dort habe ich mir mal das aktuelle Array, also nach der Filterung, ausgeben lassen und die Variable CountryShortcut in den Titel geschrieben. Sie fehlt. Es wird scheinbar aktiv nach Objekten gefiltert, wo $_.C leer ist... :D Das sieht man jetzt auch deutlich im Array.. Vorher habe ich mir immer das ganze Array $ArrayOfAddress ausgeben lassen, wo natürlich alles i.O. war.

    Wie bringe ich der Funktion denn jetzt die Variable bei? Und wieso kennt die Funktion die Variable nicht?

    Vielen Dank schon mal!
    LG, Jannik D.

    Montag, 3. April 2017 06:56
  • Wie bringe ich der Funktion denn jetzt die Variable bei? Und wieso kennt die Funktion die Variable nicht?


    Variablen-Scope? Vielleicht als Global definieren?

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    • Als Antwort markiert JannikD Montag, 3. April 2017 07:14
    Montag, 3. April 2017 06:57
  • Die Variable wird jetzt global definiert und es funktioniert wie gewünscht! Herzlichen Dank!

    • Als Antwort markiert JannikD Montag, 3. April 2017 07:14
    • Tag als Antwort aufgehoben JannikD Montag, 3. April 2017 07:14
    Montag, 3. April 2017 07:14