Jump to content

Power Shell - Dateien vergleichen & ausgeben


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Like this?

Try {
  $Software = Get-Content "J:\DIV\LOG\Soft.txt"
  $DB = Get-Content "J:\DIV\LOG\DB.txt"
  $HOSTNAME = gc env:computername
  Compare-Object $Software $DB | ? {$_.Sideindicator -eq "<="} | foreach-object {$HOSTNAME + ';' + $_.InputObject | Out-File 'J:\DIV\LOG\Hinzugefügt.txt' -append}
  Compare-Object $Software $DB | ? {$_.Sideindicator -eq "=>"} | foreach-object {$HOSTNAME + ';' + $_.InputObject | Out-File 'J:\DIV\LOG\Entfernt.txt' -append}
  Copy "J:\DIV\LOG\Soft.txt" "J:\DIV\LOG\DB.txt" }
Catch 
{
  $Error | Out-File 'J:\DIV\LOG\ErrorLog.txt'
}
Link zu diesem Kommentar

Hallo Frank,

 

also so ungefähr sollte die Ausgabe hinterher in der Entfernt, sowie in der hinzugefügt.txt aussehen.

 

Rechner  ,  Software

NB-00447,0606-00-07-00                      <=                                         
NB-00447,0961-01-02-00                      <=                                         
NB-00449,0492-01-01-00                      <=                                       

 

Ich hab dies mit deiner Variante probiert, dies hat jedoch nicht funktioniert

Link zu diesem Kommentar

 

Konkret geht es darum das Inventarsystem gibt alle 15 min eine Text datei aus: "Software.txt" in dieser Datei steht z.B. Rechner 12345 bekommt Software XY. Das Script soll auf einem Windows Server 2012 auf welchem SCCM Installiert ist nun einen abgleich mit seiner Datenbank machen was hat sich geändert innerhalb der letzten 15 min.

 

Irgendwie finde ich den Ansatz mit div. Textfiles und alle 15min irgendwie steinzeitlich ;-) Was genau steckt denn hinter dem "Inventarsystem" genau? Und was ist Ziel der ganzen Übung? Beschreibe doch erst einmal die eigentliche Problemstellung (nein, das oben ist keine, sondern eher eine Lösungsmöglichkeit) dann kann man das evtl eleganter lösen.

Link zu diesem Kommentar

Hallo,

 

also das Inventarsystem ist schon ein paar Tage Alt (vorab). Wird aber bei Zeiten noch ausgetauscht, dass dauert aber noch ein bisschen. In dem Inventarsystem werden alle Komponeten wie Rechner, Telefone, Monitore etc. den Nutzer als Komponete zu gewiesen. Software ist in diesem System auch eine Komponete und wird als Zahl angegeben z:B. hat Microsoft Ofiice die Zahl 11. Das ist das Grund Prinzip.

 

Diese Datenbank erzeugt alle 15min ein TXT File in welchem drin steht welche Software, welchem Notebook/ Rechner zugewiesen worden ist.

 

Der SCCM Server läuft zurzeit noch auf einem Windows Server 2008 R2 welcher jedoch nun auf 2012 migirert wird. Auf dem alten Server läuft zurzeit noch ein Visual Basic Script welches die Aufgaben erfüllt die nun durch das Power Shell Script abgelöst werden soll.

 

Das Script vergleich zunächst den Soll mit dem Ist Zustand also Datei vor 15 min wird verglichen mit aktueller Datei. Software Komponeten welche einem Rechner Hinzugefügt bzw. Entfernt worden sind werden in 2 TXT Files gespeichert. Und durch den Copy Befehl wird der Soll zum Ist Zustand.

 

Im nächsten Schritt sollen die  beiden TXT Files "Hinzugefügt" & "Entfernt" nun über in Power Shell implementierte SQL Befehle in die SCCM Datenbank gebracht werden. Der SCCM Server verteilt nun anhand der Informationen des Inventarsystems die Software an die jeweiligen Rechner.

 

Ich hoffe nun ist ein bisschen klarer wozu der ganze Spaß eigentlich gut ist. :)

Link zu diesem Kommentar

Ist es in dem Script möglich einen allgemeinen LOG zu machen also z.B.

 

Teil 1 Wäre überprüfung aller Variablen und wenn alle anderen Variablen vorhanden sind wird in die LOG geschrieben Variablen überprüft und vorhanden / oder eben Fehler.

und dann soll das Script weiter laufen und dann der nächste Teil überprüft und gelogt werden. Der Fehler Log der momentan vorhanden ist kann entfernt werden und wir nach Absprache nicht zwigend benötigt?

 

 

 

# Anfang der Try / catch verzweigung zum Fehler Log
$ErrorActionPreference = "Stop"

try
{
# Bennenung der Variablen / Link Zuweisung.
$Software = Get-Content "C:\Users\user\Desktop\Software.txt"
$DB = Get-Content "C:\Users\user\user\DB.txt"
$hinzugefügt = "C:\Users\user\Desktop\Hinzugefügt.txt"
$entfernt = "C:\Users\user\Desktop\Entfernt.txt"
$log = "C:\Users\user\Desktop\log.txt"
$cpsoftware = "C:\Users\user\Desktop\Software.txt"
$cpdb = "C:\Users\user\Desktop\DB.txt"

# Der Soll und der Ist Zustand werden verglichen und die Unterschiede in die Output Dateien geschrieben.
Compare-Object $Software $DB | ? {$_.Sideindicator -eq "<="} | Out-File -FilePath $entfernt -append
Compare-Object $Software $DB | ? {$_.Sideindicator -eq "=>"} | Out-File -FilePath $hinzugefügt -append

# Überschreiben des IST Zustandes durch den Soll Zustand, erfolgt am Ende des Scriptes
Copy  $cpsoftware $cpdb

}
catch

# Sollte im Scipt ein Fehler vorliegen wird die Fehlermeldung in die Datei Log.txt geschrieben
# Im Log File ist der oberste Fehler = der Aktuellste Fehler

{
    $Error | Out-File -FilePath $log
}

bearbeitet von Needhelp12
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...