Powershell Array auslesen - Verständnisfehler
Hallo Kollegen,
ich arbeite mich seit einiger Zeit in Powershell ein und habe heute wieder mal ein Problem wo ich wie der Ochs vor dem Tor stehe.
Ich lasse mir mittels einer SQL Funktion alle gruppen ausgeben die zu einem user gehören und schreibe diese in ein Array.
SQL Funktion:
Ergebnis:
Jetzt möchte ich das Array auswerten und in Abhängigkeit vom Vorhandensein jeder der 9 gruppen einen Schalter einblenden. Gedacht habe ich mir das so:
Als Ergebnis bekomme ich immer:
Ich habe schon versucht anstatt der Zahl 10001 den String '10001' abzufragen aber selbes Ergebnis.
Irgendwie habe ich den Verdacht, dass ich das Array falsch anspreche.
Kann mir bitte mal jemand den Weg weisen?
grüße vom it-frosch
ich arbeite mich seit einiger Zeit in Powershell ein und habe heute wieder mal ein Problem wo ich wie der Ochs vor dem Tor stehe.
Ich lasse mir mittels einer SQL Funktion alle gruppen ausgeben die zu einem user gehören und schreibe diese in ein Array.
SQL Funktion:
CREATE FUNCTION [dbo].[FUNC_AUFGABEN](
@VARCHAR_1 varchar(20),
@VARCHAR_2 varchar(20)
)
RETURNS Table
AS
RETURN
SELECT gruppennr FROM table where pk.WINDOMAENE=@VARCHAR_1 and pk.BENUTZER=@VARCHAR_2)
and gruppennr between 10001 and 10009
GO
Ergebnis:
$aufgaben
gruppennr
---------
10001
10002
10003
10004
10005
10006
10007
10008
10009
Jetzt möchte ich das Array auswerten und in Abhängigkeit vom Vorhandensein jeder der 9 gruppen einen Schalter einblenden. Gedacht habe ich mir das so:
$aufgaben -is [array]
true
if ($aufgaben[0..9] -contains 10001) {'vorhanden'} else {'fehlt'}
Als Ergebnis bekomme ich immer:
if ($aufgaben[0..9] -contains 10001) {'vorhanden'} else {'fehlt'}
fehlt
Ich habe schon versucht anstatt der Zahl 10001 den String '10001' abzufragen aber selbes Ergebnis.
Irgendwie habe ich den Verdacht, dass ich das Array falsch anspreche.
Kann mir bitte mal jemand den Weg weisen?
grüße vom it-frosch
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 73208362483
Url: https://administrator.de/contentid/73208362483
Ausgedruckt am: 21.11.2024 um 11:11 Uhr
11 Kommentare
Neuester Kommentar
Doch die gibt es, bzw. bekommst du ein Object mit dem Property "gruppennr". Siehe oben dein Ergebnis.
Wenn du dir nicht sicher bist welchen Typ dein Array hat kannst du das prüfen indem du angibst:
$meinArry.Gettype()
Ich gebe hier mit SQL einen Table zurück habe aber keine Ahnung wie ich den ansprechen muss.
Wie @it-frisch schon geschrieben hat.Also so:
$aufgaben.gruppennr
#bsp:
$aufgaben | where-object {$_.gruppennr -match "10001"}
#den Begrenzer [1..5] brachst du nicht, außer du willst nicht alle Elemente prüfen.
Zitat von @it-frosch:
@mayho33,
$aufgaben.Gettype() bringt mir
was mir aber nicht wirklich weiterhilft.
Im Prinzip hilft das schon, aber das ginge mit jetzt zu weit das zu erklären.@mayho33,
$aufgaben.Gettype() bringt mir
$aufgaben.Gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
was mir aber nicht wirklich weiterhilft.
Ich hatte jetzt mehr durch Zufall herausgefunden das ich bei der Eingabe von
$aufgaben[0]. plötzlich GROUPNR angezeigt bekomme, warum auch immer.
Die Lösung ist, das Array so auszulesen:
Wenn mir das jetzt noch jemand erklären könnte wäre es toll.
Grüße vom it-frosch
$aufgaben[0]. plötzlich GROUPNR angezeigt bekomme, warum auch immer.
Die Lösung ist, das Array so auszulesen:
if ($aufgaben[0..9].GROUPNR -contains 10001) {'vorhanden'} else {'fehlt'}
vorhanden
Wenn mir das jetzt noch jemand erklären könnte wäre es toll.
Grüße vom it-frosch
Du musst den Begrenzer nicht angeben. Wäre ja quch total blöd wenn du die Elemente vorher zählen müsstest.
Bei deiner Frage oben hast du selbst die Rückgabe gepostet. Das ist das Objekt. Warum sollte jetzt plötzlich GROUPNR rauskommen?
Wie immer klärt das ganze
Get-Member sofort auf, welche Member ein Objekt tatsächlich besitzt ...
Eigentlich eines der ersten CMDLets die man als Anfänger kennen sollte um sich selbst zu helfen.
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...
genauso wie man festlegen kann was per Default an Properties angezeigt wird
https://learn-powershell.net/2013/08/03/quick-hits-set-the-default-prope ...
Get-Member klärt das ganze aber sofort auf. Denke aber auch das das hier wohl PEBKAC war. Kann man hier ja leider nur raten weil der TO den Code der die Variable $aufgaben erzeugt, leider nicht gepostet hat.
Gruß sid
Get-Member sofort auf, welche Member ein Objekt tatsächlich besitzt ...
$aufgaben | Get-Member
Bei deiner Frage oben hast du selbst die Rückgabe gepostet. Das ist das Objekt. Warum sollte jetzt plötzlich GROUPNR rauskommen?
Weil es die Eigenschaften selbst gibt aber auch separate DisplaySpecifier die sich von den eigentlichen Eigenschaften unterscheiden können 😉,https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...
genauso wie man festlegen kann was per Default an Properties angezeigt wird
https://learn-powershell.net/2013/08/03/quick-hits-set-the-default-prope ...
Get-Member klärt das ganze aber sofort auf. Denke aber auch das das hier wohl PEBKAC war. Kann man hier ja leider nur raten weil der TO den Code der die Variable $aufgaben erzeugt, leider nicht gepostet hat.
Gruß sid
Zitat von @7907292512:
Na, das ist schon klar, aber die müssten entweder selbst definiert werden oder eben aufgrund der Rückgabe definiert sein. Etwa durch ein Flag. Sie ändern sich nicht einfach so.Bei deiner Frage oben hast du selbst die Rückgabe gepostet. Das ist das Objekt. Warum sollte jetzt plötzlich GROUPNR rauskommen?
Weil es die Eigenschaften selbst gibt aber auch separate DisplaySpecifier die sich von den eigentlichen Eigenschaften unterscheiden können 😉,Der TO hat oben ein Beispiel genannt mit dem wir gearbeitet haben.
Kann man hier ja leider nur raten weil der TO den Code der die Variable $aufgaben erzeugt, leider nicht gepostet hat.
Das stimmt. Nachdem er aber ein Beispiel der Ausgabe angegeben hat, isr es doch nicht falsch anzunehmen, dass genau das die Properties sind um die es geht oder?Grüße, Mayho
OK!
Es reicht also wie oben schon gesagt
oder alternativ auch
Bitte dann noch den Haken dran.
sid,
Wenn ich $aufgaben | Get-Member aufrufe bekomme ich:
Works as designed du gibst ja selbst nur die Eigenschaft GROUPNR aus dem SQL-Clause in der DataRow zurück, also alles OK.Select @groupnr
GROUPNR Property int GROUPNR {get;set;}
Es reicht also wie oben schon gesagt
if ($aufgaben.GROUPNR -contains 10001) {'vorhanden'} else {'fehlt'}
if (10001 -in $aufgaben.GROUPNR) {'vorhanden'} else {'fehlt'}
Bitte dann noch den Haken dran.
sid,
BEGIN
SET @GROUPNR=(select gruppennr FROM table1 where personalnr in (select pk.personalnr from table2 pk where pk.WINDOMAENE=@VARCHAR_1 and pk.WINBENUTZER=@VARCHAR_2)
and gruppennr=@ZEIGER)
...
...
Aha! Und da findet sich ja auch die GruppenNr.
Aber Sql ist wirklich nicht meine Stärke. Keine Ahnung warum da gruppennr=@ZEIGER ...🤷♂️🤷♂️
Hauptsache es lüft jetzt 😁