Zum Inhalt wechseln


Foto

Power Shell - Dateien vergleichen & ausgeben

Windows Server 2012 SCCM

  • Bitte melde dich an um zu Antworten
23 Antworten in diesem Thema

#16 Cybquest

Cybquest

    Expert Member

  • 1.886 Beiträge

 

Geschrieben 29. Oktober 2014 - 07:53

Möglich ist alles ;-)

Aber erst mal: Willkommen an Board.

 

Und nun eine Bitte: Nicht die Threads anderer kapern! Mach bitte einen eigenen Thread auf... ggf. mit einem Hinweis/Link auf diesen hier, ok?


My name is Frank, you can say you to me.

#17 Needhelp12

Needhelp12

    Newbie

  • 12 Beiträge

 

Geschrieben 03. November 2014 - 12:12

Hallo,

 

ja das würde mich auch mal Interessieren.

 

Gruß



#18 Cybquest

Cybquest

    Expert Member

  • 1.886 Beiträge

 

Geschrieben 03. November 2014 - 13:12

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'
}

My name is Frank, you can say you to me.

#19 Needhelp12

Needhelp12

    Newbie

  • 12 Beiträge

 

Geschrieben 04. November 2014 - 08:21

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



#20 Cybquest

Cybquest

    Expert Member

  • 1.886 Beiträge

 

Geschrieben 04. November 2014 - 08:41

und was hat nicht funktioniert?


My name is Frank, you can say you to me.

#21 TorstenM

TorstenM

    Senior Member

  • 459 Beiträge

 

Geschrieben 04. November 2014 - 23:41

 

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.


MCSA 2000/2003/2012, MCSE NT 4.0/2000/2003/2012, MCITP:EA, MCTS SCCM, Microsoft MVP - SCCM, http://www.mssccmfaq.de


#22 Needhelp12

Needhelp12

    Newbie

  • 12 Beiträge

 

Geschrieben 05. November 2014 - 07:32

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. :)



#23 Needhelp12

Needhelp12

    Newbie

  • 12 Beiträge

 

Geschrieben 05. November 2014 - 11:37

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, 05. November 2014 - 11:44.


#24 Cybquest

Cybquest

    Expert Member

  • 1.886 Beiträge

 

Geschrieben 05. November 2014 - 12:20

Antwort auf Deine Frage "Ist es in dem Script möglich...": Ja!

 ;)

 

Entweder mehrere Try/Catch-Blöcke oder die Variablen auf $null prüfen, ob was drin ist, wären mal 2 Möglichkeiten.


My name is Frank, you can say you to me.



Auch mit einem oder mehreren der folgenden Tags versehen: Windows Server 2012, SCCM