Methode contains() vs. -contains
Moin,
zum Hintergrund: Ich habe ein PS-Skript geschrieben, in dem anhand einer Textdatei entschieden wird, ob für den jeweiligen User eine Funktion ausgeführt wird. Das Originalskript lautete so:
Ich habe das getestet und es lief. Ich habe keine Ahnung, warum ich das so gemacht habe und nicht wie sonst mit
Dann lief es bei einem User nicht. Am Ende stellte sich dann heraus, dass beim username ein Buchstabe war, der da nicht hingehörte. Aber das kennt wahrscheinlich jeder. Man vergleicht es zehnmal und ist der festen Überzeugung, dass nichts ungleich sein darf, was gleich sein muss. Erst beim elften Mal sieht man dann den Dreher oder das Zeichen zuviel.
Aber das nur nebenbei. Jedenfalls habe ich es dann bei der Fehlersuche auf meine übliche Methode geändert und das Skript macht natürlich immer noch das, was es soll. Da stellt sich mir die Frage, ob es einen Unterschied gibt, ob man die Methode oder den Vergleichsoperator nimmt. Oder ist das egal? Ich frage deshalb, weil es ja an anderen Stellen bei zwei verschiedenen Lösungsmöglichkeiten Unterschiede gibt (z. B. foreach(...) oder ...| foreach-object) was Performance und Speicherbedarf betrifft.
Eine Anmerkung: Ja, das ist ein Arbeitsgruppennetzwerk (brrrrrr). Deshalb muss ich ja solche Krücken bauen. Deshalb hat man solche Fehler wie einen abweichenden Username auf einem Rechner. Und nein, ich brauche keine Ratschläge zur Verbesserung. Ich habe da noch acht Arbeitstage. Die Ratschläge habe ich schon alle selbst erteilt. Tja, jetzt gehe ich.
Liebe Grüße
Erik
zum Hintergrund: Ich habe ein PS-Skript geschrieben, in dem anhand einer Textdatei entschieden wird, ob für den jeweiligen User eine Funktion ausgeführt wird. Das Originalskript lautete so:
...
# Quatsch! get-content = $userlist
$userlist = get-content ...
if ($userlist.contains($env:username)) {
#mappe das Laufwerk
}
...
Ich habe das getestet und es lief. Ich habe keine Ahnung, warum ich das so gemacht habe und nicht wie sonst mit
...
# Quatsch! get-content = $userlist
$userlist = get-content ...
if ($userlist -contains $env:username) {
#mappe das Laufwerk
}
...
Dann lief es bei einem User nicht. Am Ende stellte sich dann heraus, dass beim username ein Buchstabe war, der da nicht hingehörte. Aber das kennt wahrscheinlich jeder. Man vergleicht es zehnmal und ist der festen Überzeugung, dass nichts ungleich sein darf, was gleich sein muss. Erst beim elften Mal sieht man dann den Dreher oder das Zeichen zuviel.
Eine Anmerkung: Ja, das ist ein Arbeitsgruppennetzwerk (brrrrrr). Deshalb muss ich ja solche Krücken bauen. Deshalb hat man solche Fehler wie einen abweichenden Username auf einem Rechner. Und nein, ich brauche keine Ratschläge zur Verbesserung. Ich habe da noch acht Arbeitstage. Die Ratschläge habe ich schon alle selbst erteilt. Tja, jetzt gehe ich.
Liebe Grüße
Erik
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1517106953
Url: https://administrator.de/forum/methode-contains-vs-contains-1517106953.html
Ausgedruckt am: 29.03.2025 um 07:03 Uhr
7 Kommentare
Neuester Kommentar

Aufpassen sollte man auf jeden Fall wenn man Contains auf Variablen anwendet das man hier auch tatsächlich ein Array vorliegen hat
Das .Contains an einer Array Variablen angehängt ist das selbe als wenn man den -contains Operator benutzt. Beide nutzen die Methode aus dem Namenspace System.Linq
Enumerable.Contains Methode
# be carefull when using contains
# when it's a single string, contains matches substrings
"Hallo Max".contains("Max")
#... where as array it does not
("Hallo Max","Andreas").Contains("Max")
# The -contains operator instead always needs a full match of an array entry to return true
"Hallo Max","Andreas" -contains "Max"
Das .Contains an einer Array Variablen angehängt ist das selbe als wenn man den -contains Operator benutzt. Beide nutzen die Methode aus dem Namenspace System.Linq
Enumerable.Contains Methode

Offensichtlich nicht, denn wenn bei deinem geposteten Beispiel oben nur eine Zeile in der Textdatei steht geht dein Beispiel in die Hose weil kein Array mehr
https://tio.run/##K8gvTy0qzkjNyfn/X90jMScnX8E3sUJdoUYhv7RENy0zJ1WhJLW4RK ...
da musst du dann schon [String[]] oder [Array] vor die Variable schreiben damit du sauber bleibst :-P ....
https://tio.run/##K8gvTy0qzkjNyfn/X90jMScnX8E3sUJdoUYhv7RENy0zJ1WhJLW4RK ...
Und sowas hier geht ja gar nicht
get-content = $userlist
Get-content CMDLet eine Variable zuweisen ?? Tippfehler?

Nö, nicht wirklich.
face-wink Wenn nur ein Username drinsteht, dann matched es ja auch richtig
Nee, wenn es einen Max und einen Maximilian im Unternehmen gibt dann würde das bei "Max" auch matchen obwohl da eben "Maximilian" im File steht 🤪
Na denn, schönen Feierabend wenn's denn soweit ist🖖