Benutzer mit den meisten Antworten
Powershell - Object vergleichen und Unterschiede selektieren ...

Frage
-
Hallo zusammen,
ich automatisiere gerade diverse Installationen via Powershell und brauche Unterstützung.
Ich Installiere hintereinander mehrere Installationspakete. Jedes dieser Pakete erstellt ein LogFile in einem gemeinsamen Verzeichnis.Ich möchte bevor ich das Paket installiere die Dateien in dem Verzeichnis einlesen. ($Before = Get-ChildItem $AppInstallLogLocation -File)
Nachdem das Paket fertig installiert ist möchte ich erneut die Dateien in dem Verzeichnis einlesen. ($After = Get-ChildItem $AppInstallLogLocation -File)Also in etwa so:
$TestLogfile = "C:\Test\TestLogFile.txt" $AppInstallLogLocation = "C:\Temp" $LogFilesInLogFolderBefore = Get-ChildItem $AppInstallLogLocation -File Move-Item -Path $TestLogfile -Destination $AppInstallLogLocation $LogFilesInLogFolderAfter = Get-ChildItem $AppInstallLogLocation -File
Danach möchte ich nur die neu hinzugekommenen Dateien selektieren können. (in einem anderen Ordner verschieben)
Ich habe mit Compare-Object versucht weiterzukommen, bin aber gescheitert.
Kann mir jemand weiterhelfen?
Danke
- Bearbeitet MSWinkler Sonntag, 19. Februar 2017 10:48
Antworten
-
Kann mir jemand weiterhelfen?
Bestimmt. Leider schreibst Du just zu dem Punkt, an dem Du meinst, gescheitert zu sein, weder was Du versucht hast noch inwiefern sich das erhaltene Ergebnis vom erwarteten unterschied.
Der bisher gepostete Code ist OK, liefert aber keinen Aufschluss darüber, was weiter damit passiert. Ich hätte jetzt so etwas erwartet wie
$added_files = $LogFilesInLogFolderBefore | Compare-Object $LogFilesInLogFolderAfter -PassThru
, und hier funktioniert das auch.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com- Als Antwort markiert MSWinkler Sonntag, 19. Februar 2017 12:53
-
Prüfen, ob "Before" leer ist ;-)
if ($LogFilesInLogFolderBefore -and $LogFilesInLogFolderAfter) { $added_files = $LogFilesInLogFolderBefore | Compare-Object $LogFilesInLogFolderAfter -PassThru } else { $added_files = $LogFilesInLogFolderAfter }
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com- Als Antwort markiert MSWinkler Sonntag, 19. Februar 2017 12:53
Alle Antworten
-
Kann mir jemand weiterhelfen?
Bestimmt. Leider schreibst Du just zu dem Punkt, an dem Du meinst, gescheitert zu sein, weder was Du versucht hast noch inwiefern sich das erhaltene Ergebnis vom erwarteten unterschied.
Der bisher gepostete Code ist OK, liefert aber keinen Aufschluss darüber, was weiter damit passiert. Ich hätte jetzt so etwas erwartet wie
$added_files = $LogFilesInLogFolderBefore | Compare-Object $LogFilesInLogFolderAfter -PassThru
, und hier funktioniert das auch.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com- Als Antwort markiert MSWinkler Sonntag, 19. Februar 2017 12:53
-
Danke, ja das entspricht fast meinen Vorstellungen.
Ich habe damit nur ein Problem:
$TestLogfile = "C:\Test\TestLogFile.txt" $AppInstallLogLocation = "C:\Test\LogFiles" $LogFilesInLogFolderBefore = Get-ChildItem $AppInstallLogLocation -File Copy-Item -Path $TestLogfile -Destination $AppInstallLogLocation $LogFilesInLogFolderAfter = Get-ChildItem $AppInstallLogLocation -File $added_files = $LogFilesInLogFolderBefore | Compare-Object $LogFilesInLogFolderAfter -PassThru $added_files Remove-Item "C:\Test\LogFiles\TestLogFile.txt"
Wenn der Folder "$AppInstallLogLocation" vorher LEER ist, sich also dort vorher keine Dateien befinden, dann funktioniert das nicht. Ich glaube das Objekt $LogFilesInLogFolderBefore gibt es dann nicht und Compare-Object weigert sich dann.
Wenn ich in den Folder "$AppInstallLogLocation" vorher eine Datei reinlege, dann funktioniert es.
Wie komme ich da sauber drum rum?
Danke
- Bearbeitet MSWinkler Sonntag, 19. Februar 2017 12:12
-
Prüfen, ob "Before" leer ist ;-)
if ($LogFilesInLogFolderBefore -and $LogFilesInLogFolderAfter) { $added_files = $LogFilesInLogFolderBefore | Compare-Object $LogFilesInLogFolderAfter -PassThru } else { $added_files = $LogFilesInLogFolderAfter }
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com- Als Antwort markiert MSWinkler Sonntag, 19. Februar 2017 12:53