145920
Goto Top

Powershell Get-Content

Hallo Gmeinde,

hab mir da ich neu bin, angewöhnt, ein Transscript anzulegen, wenn ich mit der Powershell arbeite.
Damit kann mein Chef nachvollziehen, wenn ich ### gebaut haben soll.
Nun zur Frage. Wie kann ich dieses Script so durchforsten und die Befehle die
ich darin eingegeben habe, in ein anderes Transscript schreiben lassen? Also alle 'Get-Befehle' in
die andere Transscriptdatei schreiben lassen mit dem Namen "Get-Befehle.txt"?

Danke für die Mühe.

Gruß Saih

Content-Key: 601568

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

Printed on: April 20, 2024 at 00:04 o'clock

Mitglied: 145916
145916 Sep 03, 2020 updated at 13:31:19 (UTC)
Goto Top
Zitat von @145920:

Hallo Gmeinde,

hab mir da ich neu bin, angewöhnt, ein Transscript anzulegen, wenn ich mit der Powershell arbeite.
Damit kann mein Chef nachvollziehen, wenn ich ### gebaut haben soll.
Das macht Windows auch so schon im Powershell Operational-Eventlog face-wink,
https://www.crowdstrike.com/blog/investigating-powershell-command-and-sc ...
noch detaillierter mit folgender Richtlinie:
https://gpsearch.azurewebsites.net/#10927
oder der Module Logging Richtlinie, wo dann auch die Befehle aufgezeichnet werden.
https://nxlog.co/documentation/nxlog-user-guide/powershell-activity.html

Wie kann ich dieses Script so durchforsten und die Befehle die ich darin eingegeben habe, in ein anderes Transscript schreiben lassen?
Die Befehlseingaben selbst werden per Default darin nicht geloggt wenn die Befehle in Skripts laufen lässt (außer man setzt den Parameter -IncludeInvocationHeader dann werden sie von manuellen Eingaben in der Konsole geloggt), nur deren Ergebnisse/Ausgaben/Fehler. Nach Stringfolgen wie GET-* zu suchen bringt also nichts. Der Parameter -IncludeInvocationHeader loggt aber nach meiner Erfahrung nicht überall zuverlässig die Befehlseingaben, deswegen würde ich mich darauf nicht verlassen.
Mitglied: 145920
145920 Sep 03, 2020 at 13:16:10 (UTC)
Goto Top
Grüß dich,

dass es eine solche Möglichkeit gibt ist mir bewußt, löst aber mein Problem nicht.
Ich möchte definitiv die Transscriptdatei auslesen, die ich aufgezeichnet habe lassen,
damit ich mir jetzt eine andere Textdatei dann daraus generieren lasse, die mir alle von mir
eingegebenen Befehle in eine Datei zusammenschreibt. Damit ich so eine Art Sammlung
von meinen eingegebenen Befehlen habe. Ist für mich dann nachvollziehbarer und ich
erkenne daran, wie meine Befehle von der Qualität her besser werden. So meine Intention.

Danke
Mitglied: 145916
Solution 145916 Sep 03, 2020 updated at 13:31:46 (UTC)
Goto Top
Zitat von @145920:

Grüß dich,

dass es eine solche Möglichkeit gibt ist mir bewußt, löst aber mein Problem nicht.
Ich möchte definitiv die Transscriptdatei auslesen, die ich aufgezeichnet habe lassen,
damit ich mir jetzt eine andere Textdatei dann daraus generieren lasse, die mir alle von mir
eingegebenen Befehle in eine Datei zusammenschreibt. Damit ich so eine Art Sammlung
von meinen eingegebenen Befehlen habe. Ist für mich dann nachvollziehbarer und ich
erkenne daran, wie meine Befehle von der Qualität her besser werden. So meine Intention.

Danke
Wenn du unbedingt willst, büschen Regex für die von dir gewünschten Get-* CMDLets (ohne Aliases)
[regex]::matches((gc 'D:\Pfad\log.txt' -raw),'(?is)> (Get-[^\r\n]+)').Captures | %{$_.Groups[1].Value}  
# oder auch mit select-string
Select-String 'D:\Pfad\log.txt' -Pattern '> (Get-[^\r\n]+)' -AllMatches | %{$_.Matches.Groups[1].Value}  
Ist für mich dann nachvollziehbarer und ich erkenne daran, wie meine Befehle von der Qualität her besser werden. So meine Intention.
Hmm naja ob das der Qualität hilft? Da würde sicher Manual lesen mehr bringen, als den Mist von Gestern face-smile.
Mitglied: 145920
145920 Sep 03, 2020 at 13:41:31 (UTC)
Goto Top
Die Frage die sich mir jetzt stellt: Wo schreibt er die ausgelesenen Befehle jetzt hin? Ins Nichts? ;o)
Oder überseh ich wieder was, wie immer.
Mitglied: 145916
Solution 145916 Sep 03, 2020 at 13:42:09 (UTC)
Goto Top
Und so werden auch benutzte Get-Aliase mit ausgelesen
$commands = ((Get-Alias -Name g*).Name + (gcm -Name 'Get-*').Name | %{[regex]::Escape($_)}) -join '|'  
Select-String .\log.txt -Pattern "> (($commands)\s+[^\r\n]+)" -AllMatches | %{$_.Matches.Groups[1].Value}  
Willst du nicht nur Get-Commands sondern stattdessen alle CMDLets und Aliase dann
$commands = ((Get-Alias -Name g*).Name + (gcm -Name 'Get-*').Name | %{[regex]::Escape($_)}) -join '|'  
Select-String .\log.txt -Pattern "> (($commands)\s+[^\r\n]+)" -AllMatches | %{$_.Matches.Groups[1].Value}  
Mitglied: 145916
Solution 145916 Sep 03, 2020 updated at 13:49:38 (UTC)
Goto Top
Zitat von @145920:

Die Frage die sich mir jetzt stellt: Wo schreibt er die ausgelesenen Befehle jetzt hin? Ins Nichts? ;o)
Oder überseh ich wieder was, wie immer.
Das oben gibt alles für dich erst mal nur auf der Konsole aus. Naja, bischen Mitdenken und Eigeninitiative erwarte ich hier schon, das kannst du ja selbst mit Anhängen von out-file 'D:\ausgabe.txt' an die Pipeline selbst erledigen!!

........ | out-file 'D:\ausgabe.txt'  
oder auch
........ | set-content 'D:\ausgabe.txt'  
oder
........ > 'D:\ausgabe.txt'  
Wie gesagt RTFM das ist ja immerhin ein Administrator-Forum wo man minimale Eigeninitiative erwarten kann! Das googelt dir ein 6 jähriger in 5 Sekunden, mal ehrlich ....
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell. ...

So long, ich bin dann mal raus, oben steht alles was du dafür brauchst, viel Erfolg.

Gruß eagle.