PowerShell Powershell Variablen Inhalt vergleichen

Alfredo64

Cadet 3rd Year
Registriert
Jan. 2020
Beiträge
43
Hallo,

ich bin an einem Skript, dass Variablen inhalt vergleichen soll.
Ich habe es schon mit "-macht" und versucht. das klappt allerdings nicht.

Ich habe eine Variable mit den Referenz Namen und eine mit denen die geprüft werden sollen.
Wenn ein Ordner zu wenig vorhanden ist ist das nicht schlimm. Aber wenn einer zu viel vorhanden ist muss er mir ausgegeben werden.

Beispiel:

Referenz Variable:
log
documents
client

Zu testende Variable:
log
documents
client
backup


in diesem fall sollte dann die backup ausgegeben werden.

Kann mir dabei jemand helfen?
bin für jede Hilfe dankbar. :)
 
schau mal nach InStr
 
Hallo Sun_set_1,

ich habe gerade nach Cstr gesucht allerdings habe ich es nicht finden können oder es einfach nicht erkannt.
Was bedeutet das denn ausgeschrieben?
 
Hi @Alfredo64

sorry hatte mich mit InStr vertan. Habe es oben angepasst und auch verlinkt. Mit InStr kannst Du komplette Strings oder auch nur Teile eines Strings (bspw Zeichen Position 4 bis 8) vergleichen.

Usw usf. Die deckt eigentlich alles ab. Switch bei MS ggf mal auf Englisch, die maschinellen Deutschen Übersetzungen sind zT eher kontrainduktiv.
 
Hallo @Sun_set_1 ,

vielen Dank ich werde mich erst mal damit befassen.
Ergänzung ()

Hallo @sikarr ,

die Variablen werden folgendermaßen befüllt:

Referrenz:
Code:
$Standart = Get-ChildItem -Path C:\Users\aufraümen\Cursor-CRM_Port1\ -Name

Zu vergleichen:
Code:
$Probe = Get-ChildItem -Path "C:\Users\aufraümen\ordner_Größen\$Ordner\" -Name
 
Zuletzt bearbeitet:
Code:
$a=@("cloud", "documents")
$b=@("cloud", "documents", "backup")
(Compare-Object $a $b).InputObject
 
  • Gefällt mir
Reaktionen: Sun_set_1 und Alfredo64
Hallo @ryGQ1

ich habe es gerade schonmal getestet und es funktioniert ich arbeite jetzt mal an meinem Skript weiter und schau mal.

Vielen danke
 
@Alfredo64 Ich würde Dir raten deine Pfade aus deinem Post etwas zu Anonymisieren, man kann so u.a. leicht an deinen Echtnamen kommen.

Also 2 Arrays, OK.
Im Grunde kannst du deine Variablen direkt mit compare-object auswerten, wie es @ryGQ1 ja schon gezeigt hat.
PowerShell:
$standart = Get-ChildItem -Directory "<Directory>"
$probe = Get-ChildItem -Directory "<Directory>"
Compare-Object $standart $probe
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Sun_set_1 und Alfredo64
@sikarr

vielen dank für den Tipp wegen der Pfade.

ja ich werde es auf diese Art vergleichen, denn es scheint zu Funktionieren.
 
sikarr schrieb:
Im Grunde kannst du deine Variablen direkt mit compare-object auswerten, wie es @ryGQ1 ja schon gezeigt hat.
PowerShell:
$standart = Get-ChildItem -Directory "<Directory>"
$probe = Get-ChildItem -Directory "<Directory>"
Compare-Object $standart $probe

ryGQ1 schrieb:
Code:
$a=@("cloud", "documents")
$b=@("cloud", "documents", "backup")
(Compare-Object $a $b).InputObject


Ja, Funktioniert auch und schreibt sich kürzer als mit InStr. Aber Compare-Objects ist halt eigentlich dafür Objekte zu vergleichen und keine Strings. InStr(Compare,.....) hingegen eben genau für Strings ;)

@Alfredo64

Der Vorteil von InStr ist, dass du die Strings "schneiden" kannst. Heißt beispielsweise wenn Compare "ungleich" liefert, könntest Du unmittelbar den Teil, der sich Unterscheidet in einer MsgBox ausgeben und den User so drauf hinweisen, was nicht passt.

Code:
Compare(String,...)

Gibts übrigens auch, viele Wege führen nach Rom :D

Zur Erklärung:

Compare Objects: Eigentlich für Objekt-Vergleiche gedacht.
Compare(String,...): Vergleich von Strings als Ganzes
InStr(Compare,...): Dafür, Teile eines oder zweier String zu vergleichen, oder auch die Unterschiede zwischen zwei Strings weiterzuverarbeiten. Mit InStr kannst Du relativ simpel sagen "Vergleich A und B" und wenn Unterschied dann Differenz = neuer String. Und hättest so den jeweiligen Unterschied unmittelbar als eigenen String verfügbar.

Usw usf. Aber für den Anfang reicht Compare-Object natürlich auch völlig aus.
Dies nur zur Erklärung, beim Skripting führen idR immer viele Wege nach Rom.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Alfredo64, ryGQ1 und sikarr
@Sun_set_1

vielen Dank für deine ausfühliche erklärung. Ich glaube das wird mir noch mal sehr nützlich sein, da ich in Zunkunft noch viel mit Powershell machen werde.
 
Zuletzt bearbeitet:
Zurück
Oben