Ausgabe aus cmd anpassen und in eine txt speichern
Hi,
ich versuche momentan eine batch zu schreiben, welche mir die Ausgabe von Get-Service als Format Status|Name|DisplayName in eine .txt schreibt. Hat jemand eine Idee wie das umsetzen kann?
Bei Get-Service
Status Name DisplayName
------------ ----------------------
Running Dhcp DHCP Cient
Stopped EFS Encrypting File System <EFS>
..... ........
Und die .txt soll so aussehen
running|Dhcp|DHCP Cient
Stopped|EFS|Encrypting File System <EFS>
|.....|........
ich versuche momentan eine batch zu schreiben, welche mir die Ausgabe von Get-Service als Format Status|Name|DisplayName in eine .txt schreibt. Hat jemand eine Idee wie das umsetzen kann?
Bei Get-Service
Status Name DisplayName
------------ ----------------------
Running Dhcp DHCP Cient
Stopped EFS Encrypting File System <EFS>
..... ........
Und die .txt soll so aussehen
running|Dhcp|DHCP Cient
Stopped|EFS|Encrypting File System <EFS>
|.....|........
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 384233
Url: https://administrator.de/forum/ausgabe-aus-cmd-anpassen-und-in-eine-txt-speichern-384233.html
Ausgedruckt am: 23.02.2025 um 04:02 Uhr
14 Kommentare
Neuester Kommentar
Weil PS-Cmdlets auch irgenwie mit Batches zu tun haben, oder in Batches verwendet werden können?
Und das was er haben will, ist ein PowerShell Skript, welches ihm die gewünschte Ausgabe liefert.
Und ein PowerShell Skript ist nun mal ein Batch (Stapelverarbeitungsdatei).
@ff-itler
Sorry ich bin jetzt nicht so der PowerShell Spezialist. Wenn ich es richtig verstehe, willst Du die Standardausgabe des cmdlets Get-Service als TXT-Datei ausgeben. verstehe ich das richtig?
@colinardo: Kannst Du bitte uns bzw. ff-itler hier unterstützen?
Gruss Penny
Und das was er haben will, ist ein PowerShell Skript, welches ihm die gewünschte Ausgabe liefert.
Und ein PowerShell Skript ist nun mal ein Batch (Stapelverarbeitungsdatei).
@ff-itler
Sorry ich bin jetzt nicht so der PowerShell Spezialist. Wenn ich es richtig verstehe, willst Du die Standardausgabe des cmdlets Get-Service als TXT-Datei ausgeben. verstehe ich das richtig?
@colinardo: Kannst Du bitte uns bzw. ff-itler hier unterstützen?
Gruss Penny
*.bat
Nein.
Grüße
Steffen
@echo off &setlocal
set "file=services.txt"
powershell -NoProfile -ExecutionPolicy Bypass -Command "Get-Service | Select-Object Status,Name,DisplayName | ConvertTo-Csv -Delimiter '|' -NoTypeInformation | %%{$_.Replace('\"','')} ^| Out-File \"%file%\""
Nein.
Grüße
Steffen
Das stimmt nicht ganz. *.bat ist eine Dateiendung für Stapelverarbeitungsdateien. Unter Windows gibt es auch seit Windows NT *.cmd als Batchdatei.
Bei Mainframes werden zum Beispiel JCL Dateien oder REXX Dateien als Batches ausgeführt, da in diesen Dateien Befehle (JCL oder REXX) stapelweise ausgeführt werden.
Nein.
Doch denn auch ein Powershellskript ist eine Stapelverarbeitungsdatei. Wenn mehrere Befehle in eine *.ps Datei gespeichert werden, dann werden diese stapelweise abgearbeitet. Das gilt auch für andere Skriptsprachen.
Grüße
Steffen
Gruss Penny
Bei Mainframes werden zum Beispiel JCL Dateien oder REXX Dateien als Batches ausgeführt, da in diesen Dateien Befehle (JCL oder REXX) stapelweise ausgeführt werden.
@echo off &setlocal
> set "file=services.txt"
> powershell -NoProfile -ExecutionPolicy Bypass -Command "Get-Service | Select-Object Status,Name,DisplayName | ConvertTo-Csv -Delimiter '|' -NoTypeInformation | %%{$_.Replace('\"','')} ^| Out-File \"%file%\""
>
Nein.
Grüße
Steffen
Gruss Penny
Zitat von @ff-itler:
Wisst ihr vielleicht auch wie ich diesen von meinem lokalen Computer auf einer vm ausführe. Bisher hatte ich es mit wmic /node:"servername" /user:"Nutzer" /password:"password" <Hier der Befehl von rubberman> versucht.
No Problem:Wisst ihr vielleicht auch wie ich diesen von meinem lokalen Computer auf einer vm ausführe. Bisher hatte ich es mit wmic /node:"servername" /user:"Nutzer" /password:"password" <Hier der Befehl von rubberman> versucht.
@echo off
set "computer=XYZ"
set "file=services.txt"
powershell -ExecutionPolicy ByPass -NoProfile -Command "(gwmi win32_Service -ComputerName '%computer%' | select State,Name,DisplayName | convertto-csv -NoType -Delimiter '|') -replace '\"','' | set-content '%file%'"
Wieso? Dazu solltet Ihr doch eigentlich inzwischen bei so einer Pippifax-Aufgabe für Azubis im ersten Lehrjahr auch in der Lage sein.
Grüße Uwe
Zitat von @ff-itler:
Das Skript von dir würde doch auf einem WindowsServer laufen und gibt mir die Infos eines anderen Computers.
Jepp, aber auch einer VM solange sie per Netzwerk vom Host erreichbar ist.Das Skript von dir würde doch auf einem WindowsServer laufen und gibt mir die Infos eines anderen Computers.
Was ich bräuchte ist ein Skript was von Windows 10 per Remote Verbindung auf die vm zugreift, die Informationen holt und diese auf meinem Windows 10 Computer ablegt als .txt.
Macht das ja (s. Parameter -Computername) du musst nur den Computernamen der VM angeben und sicherstellen das die Firewalls entsprechend konf. sind und bei anderen Credentials entweder noch die Credentials per -Credential Parameter mitgeben oder Skript im anderen Kontext laufen lassen .Diese txt lese ich mit Java ein und soll flexibel für mehrere VMs nacheinander anwendbar sein.
Würde ich an deiner Stelle direkt mit Java machen, das hat bereits alles an Bord um sowas zu machen als so ein Mischmasch aus Batch Powershell und Java zu fabrizieren!
Dann läuft bei dir noch eine alte Powershell die den Alias sc für Set-Content nicht kennt, habe ich oben für dich jetzt oben im Code nochmal ausgeschrieben ...
.
.
https://nikunjp.wordpress.com/2011/06/11/wmi-with-java-using-j-interop/
PS C:\....\....\....> .\test.bat
Eine *.Bat mit PS Code in der PS Konsole ausführen, wat für'n Blödsinn mal ehrlich Bei Java habe ich die cmd oder bat jeweils so aufgerufen
Du solltest dich mal in Remote-WMI Abfragen per Java schlau machen dann brauchst du diesen Schmuh nicht https://nikunjp.wordpress.com/2011/06/11/wmi-with-java-using-j-interop/
[OT]
Hallo Penny
Jetzt höre ich aber auch auf. Zum eigentlichen Thema trägt das nichts bei
Steffen
[/OT]
Hallo Penny
Zitat von @Penny.Cilin:
Das stimmt nicht ganz. *.bat ist eine Dateiendung für Stapelverarbeitungsdateien. Unter Windows gibt es auch seit Windows NT *.cmd als Batchdatei.
Die Dateiendung *.cmd hat sich nie wirklich durchgesetzt, ist aber auch egal. Die Unterschiede sind marginal und in beiden Fällen ist cmd.exe der Interpreter. Der Grund warum *.bat Dateien als Batchdateien bezeichnet werden hat historische Gründe die in die Zeiten von DOS zurückreichen, aber ich will hier keine Off-Topic-Romane schreiben...Das stimmt nicht ganz. *.bat ist eine Dateiendung für Stapelverarbeitungsdateien. Unter Windows gibt es auch seit Windows NT *.cmd als Batchdatei.
Doch denn auch ein Powershellskript ist eine Stapelverarbeitungsdatei. Wenn mehrere Befehle in eine *.ps Datei gespeichert werden, dann werden diese stapelweise abgearbeitet. Das gilt auch für andere Skriptsprachen.
Ich weiß worauf du hinaus willst. Bei allen Sprachen ist es so, dass entweder der gesamte Code oder Teile (Prozeduren) jeweils chronologisch von oben nach unten abgearbeitet werden. Den Begriff Batch oder Stapelverarbeitung dahingehend so weit aufzumachen, halte ich aber für falsch. Dann gibt es keine Abgrenzung mehr. Bei Powershell spricht allein das Paradigma schon dagegen (objektorientiert). Noch deutlicher wird es aber bei der Syntax. Es wird eher horizontal als vertikal abgearbeitet, da die Syntax von Powershell es erlaubt, selbst Objekte per Pipeline von Cmdlet zu Cmdlet weiter zu geben.Jetzt höre ich aber auch auf. Zum eigentlichen Thema trägt das nichts bei
Gruss Penny
GrüßeSteffen
[/OT]
[OT]
@rubberman
In Zeiten Multiprocessing und Cores ist diese Unterscheidung nicht mehr so einfach das stimmt. Trotzdem denke ich das meine Meinung nicht ganz verkehrt ist, denn die Befehle werden stapelweise wie Du geschrieben hast
[/OT]
Gruss Penny
@rubberman
Der Grund warum *.bat Dateien als Batchdateien bezeichnet werden hat historische Gründe die in die Zeiten von DOS zurückreichen, aber ich will hier keine Off-Topic-Romane schreiben...
Ja die Historie aus DOS Zeiten kenne ich zur Genüge.In Zeiten Multiprocessing und Cores ist diese Unterscheidung nicht mehr so einfach das stimmt. Trotzdem denke ich das meine Meinung nicht ganz verkehrt ist, denn die Befehle werden stapelweise wie Du geschrieben hast
horizontal als vertikal abgearbeitet
Das gilt auch für andere Skript- oder Hochsprachen wie Perl, REXX, VisualBasic, Cobol, Fortran ja auch für Smalltalk.[/OT]
Gruss Penny
[OT]

Zitat von @Penny.Cilin:
Trotzdem denke ich das meine Meinung nicht ganz verkehrt ist, denn die Befehle werden stapelweise...
Ich denke nicht, dass du da richtig liegst. Mit Powershell kannst du auch Ereignisorientiert unterwegs sein Trotzdem denke ich das meine Meinung nicht ganz verkehrt ist, denn die Befehle werden stapelweise...