dpole86
Goto Top

Variablen oder Dateien nach Inhalt Vergleichen Powershell

Hallo Zusammen

Nehmen wir an ich habe 2 Dateien und lade diese in jeweils in eine Variable.

$var1

NBAPS100
NBAPS101
NBAPS102
NBAPS103
NBAPs104

$var2
NBAPS99
NBAPS100
NBAPS101
NBAPS102
NBAPS103
NBAPS104
NBAPS105


Wir kriege ich die NBAPS99 als ergebniss?

Ein Möglichkeit über Dateien würde auch gehen face-smile

Danke und grüße
Roman

Content-Key: 223453

Url: https://administrator.de/contentid/223453

Printed on: April 23, 2024 at 16:04 o'clock

Member: colinardo
colinardo Dec 02, 2013 updated at 15:04:01 (UTC)
Goto Top
compare -ReferenceObject $var1 -DifferenceObject $var2
und nun lese mal endlich, anstatt hier andauernd solche Grundlagenfragen zu stellen:
Member: ITvortex
ITvortex Dec 02, 2013 at 15:41:16 (UTC)
Goto Top
Ich hätte ja gesagt if(...) *gg*

;)

lg ITvortex
Member: Dpole86
Dpole86 Dec 02, 2013 at 16:18:54 (UTC)
Goto Top
tut mir leid aber das ist für mich nicht grundlage

Ich habe eine Excel mit 2 Spalten und eine Excel mit 3 Spalten wobei die ersten Spalten verglichen werden sollen.

Je nach miserfolg soll dann aber von der dazugehörigen excel die Zeit im Dokument genommen werden.

Das alles sollte dann in eine neue Excel exportiert werden.

also wenn das Grundlage ist dann bin ich wohl im Falschen film^^
Member: colinardo
colinardo Dec 02, 2013 updated at 17:48:45 (UTC)
Goto Top
[OT]
Folgendes muss ich jetzt mal loswerden, da spreche ich einigen Leuten hier aus der Seele, die mich auch schon deswegen angeschrieben warum ich so viel Geduld mit dir habe:

Wir helfen hier gerne auch puren Anfängern(jeder fängt mal an), aber deine Posts sind vielfach so aus dem Kontext gegriffen und beinhalten viel zu wenig Hintergrund-Informationen zu deinen Vorhaben, so dass dir hier kaum einer Antworten möchte. Du bist vielleicht bei deinem Projekt im Bilde, wir hier aber eben nicht!
An der Rechtschreibung sieht man schon, wie viel Mühe du dir gibst uns dein Problem zu erläutern. Wenn du noch nicht mal dafür etwas Mühe aufbringst, und von uns dann hellseherische Fähigkeiten erwartest, bist du hier am falschen Platz. Außerdem lebt solch ein Forum vom Geben und Nehmen, wenn du dann wie in folgendem Post noch nicht mal die Zeit investierst (oder dich traust) deine Lösung in den Post zu schreiben, tust du mir leid ..
Diesen Thread brauche ich ja nun nicht erneut erwähnen, das war das dreisteste was ich je erlebt habe ...
[/OT]
Amen

ch habe eine Excel mit 2 Spalten und eine Excel mit 3 Spalten wobei die ersten Spalten verglichen werden sollen.
Von Excel war in deinem Post z.B Eingangs überhaupt keine Rede ...nur von Powershell.
Wie man von Powershell auf Excel-Dokumente via COM-Object zugreifst kannst du hier nachlesen.
Jetzt wäre die Gelegenheit, uns mal so aufzuklären das jeder versteht was du nun ganz genau mit Powershell und Excel vorhast, denn so wie du dies geschrieben hast versteht das hier keiner genau. Wir haben hier jede Menge Formatierungsmöglichkeiten im Forum womit sich das schön klar darstellen lässt.
Member: Dpole86
Dpole86 Dec 02, 2013 at 18:26:56 (UTC)
Goto Top
Hi Colinardo

Ich habe ja nix gegen kritik somit danke das du einfach mal sagst was sache ist.
Also in dem EnergiePosting habe ich geschrieben das mir jemand eine PN schreiben soll, weil ich ein 3 Seitiges Word dokument gemacht habe,
Dieses kann ich gerne der Person schicken die es möchte aber ins Forum posten kann ich es nicht da es Farblich keinen sinn mehr ergeben würde.

Zu meiner Rechtschreibung. Ich bin leider legasteniker. deswegen auch die "seltene" Rechtschreibschwäche.

Ja der Post der war dreist, tut mir auch leid, aber die unterstellung das ich nicht gesucht hätte hat mich aufgeregt.


und nun zum eigentlich Problem.

Ich glaube das ich entweder viel zu komplizerit denke oder es nicht machbar ist.

erinnerst du dich an den code?

 
$csv = Import-CSV "C:\Users\admrd\Desktop\test\bat\test.csv" -Delimiter "," $csv | ?{(get-date $_.Date) -gt (get-date).AddDays(-7)} | sort Client,Date,Time -Descending | group Client | %{$_.Group} $rsync_result=$csV  
$csv = Import-CSV "C:\Users\admrd\Desktop\test\bat\test.csv" -Delimiter ","    
$csv | ?{(get-date $_.Date) -gt (get-date).AddDays(-7)} | sort Client,Date,Time -Descending | group Client | %{$_.Group}  
$rsync_result=$csv


damit bekomme ich ja heraus welche rechner sich in den letzten tagen gemeldet haben.

Ich muss aber rausbekommen, welche Rechner sich nicht in den letzten tagen gemeldet haben.

Und ganz erlich ich habe mir schon gedanken darüber gemacht deswegen auch die ganzen ansätze. Allerdings komm ich mir jeder Lösung immer wieder zu einer Sackgasse.

Ich habe auch versucht das AD auszulesen nach den Computernamen und diese in eine Variable zu speichern. Ich komm schon bei der Verbindund irgendwie nicht weiter.
Diese WVariable hätte ich dann verglichen mit den Daten aus der CSV... nur weis ich dann nicht wie ich das Datum mit rein bekomme, was aber gar nicht geht.

Keine ahnugn wie das alles gehen soll.
Member: colinardo
colinardo Dec 02, 2013 updated at 19:20:47 (UTC)
Goto Top
Das war doch mal eine klare Aussage.
back-to-topAlso hier an einem Beispiel erläutert:
Die Variable $clientliste sei jetzt mal unsere Liste in der alle Client-Rechner die Ihr habt, aufgeführt sind.
Die Variable $clientlog wäre hier nun unsere Liste mit den Log-Einträgen.
Habe beide Variablen in dem Beispiel einfach nur mal manuell mit zwei Beispieldaten gefüllt.

D.h. nun das in unserem Log hier zwei Rechner aufgeführt sind NBAPS99 und NBAPS101. In unserer Rechner-Liste haben wir aber noch den NBAPS100 welcher aber nicht im LOG auftaucht; also ist dies unser Kandidat welchen wir finden müssen. Diesen Vergleich führen wir mit einem Compare-Object durch. Diesem übergeben wir als ReferenceObject unsere $clientlog-Variable und als DifferenceObject unsere $clientliste. Kriterium ist hier die Property Client. Das Konstrukt schicken wir dann mit der Pipe an ein Where-Object wo wir die Unterschiede untersuchen, d.h. wir filtern die Computer heraus welche nur in der $clientliste vorkommen. Das sind dann unsere Clients die sich in der letzten Zeit nicht gemeldet haben.
$clientliste = @()
$clientliste += New-Object PSObject -Property @{"Client"="NBAPS99"}  
$clientliste += New-Object PSObject -Property @{"Client"="NBAPS100"}  

$clientlog = @()
$clientlog += New-Object PSObject -Property @{"Client"="NBAPS99";"Date"="01.10.2013";"Time"="10:17"}  
$clientlog += New-Object PSObject -Property @{"Client"="NBAPS101";"Date"="10.10.2012";"Time"="22:17"}  

Compare-Object -ReferenceObject $clientlog -DifferenceObject $clientliste -Property Client -PassThru | ?{$_.Sideindicator -eq "=>"}| select Client  
Du musst dir halt mal die Ausgaben des Compare-Object ansehen um zu verstehen was es macht. Ich empfehle Dir mit der Powershell ISE zu arbeiten, da hast du ab der Powershell-Version 3.0 ein Syntax-Highlighting und die Shell zeigt dir die verfügbaren Parameter zu dem jeweiligen Befehl an den du eingibst.
Du machst wahrscheinlich zu viel auf einmal, mit der Powershell musst du Schritt für Schritt arbeiten und dir zwischendurch auch mal die Zwischenausgaben ansehen. Nur so lernt man das ganze besser kennen.

Grüße Uwe
Member: Dpole86
Dpole86 Dec 02, 2013 at 19:17:54 (UTC)
Goto Top
Hi Uwe und Danke dir face-smile

Ich werde das Morgen testen und mich wieder melden face-smile

Danke dir face-smile