
14634
02.12.2011, aktualisiert um 16:17:58 Uhr
Per Batch PC Namen in Log datei mitaufnehmen
Hallo zusammen,
ich habe folgendes Script
echo on
for /F %%a IN (Rechner.txt) do call :befehl1 %%a
goto :eof
:befehl1
echo on
REM %%a wird zu %1
call psexec.exe \\%1 systeminfo |find "Systembetriebszeit" >> log.txt
goto :eof
in der Rechner.txt stehen alle PC`s drin die ich überprüfen will die lange sie läuft.
Dieses soll dann in einer log.txt wiedergegeben werden, das passt soweit, es wird wie folgt ausgegeben:
Systembetriebszeit: 9 Tage, 4 Stunden, 16 Minuten, 42 Sekunden
ich hätte aber gerne das davor der PC Name steht, da ich ansonsten dies nicht zuordnen kann.
ich glaube man muss nur %Computer% hinzufügen oder? leider weiß ich auch nicht genau wo.
Kann hier jemand helfen?
Danke für die hilfe
edit:
habe auch diesen Powershell befehl gesehen:
<#
.SYNOPSIS
Demonstrates uptime using WMI
.DESCRIPTION
This script used Win32_ComputerSystem to determine how long your system
has been running. This is a rewrite/improvement of sample 3 at
http://msdn.microsoft.com/en-us/library/aa394591(VS.85).aspx.
.NOTES
File Name : Get-UpTime.ps1
Author : Thomas Lee - tfl@psp.co.uk
Requires : PowerShell V2 CTP3
.LINK
Script Posted to:
http://www.pshscripts.blogspot.com
Original sample posted at:
http://msdn.microsoft.com/en-us/library/aa394591(VS.85).aspx
.EXAMPLE
PS c:\foo> .\Get-UpTime.Ps1
System Up for: 1 days, 8 hours, 40.781 minutes
#>
##
[System.Management.ManagementDateTimeconverter]::ToDateTime($Bootup)
}
$computers = Get-WMIObject -class Win32_OperatingSystem -computer $computer
foreach ($system in $computers) {
$Bootup = $system.LastBootUpTime
$LastBootUpTime = WMIDateStringToDate($Bootup)
$now = Get-Date
$Uptime = $now - $lastBootUpTime
$d = $Uptime.Days
$h = $Uptime.Hours
$m = $uptime.Minutes
$ms= $uptime.Milliseconds
"System Up for: {0} days, {1} hours, {2}.{3} minutes" -f $d,$h,$m,$ms
}
hier weiß ich leider nicht wo ich meine Rechner.txt einfügen soll, sodass es das Script erkennt
ich habe folgendes Script
echo on
for /F %%a IN (Rechner.txt) do call :befehl1 %%a
goto :eof
:befehl1
echo on
REM %%a wird zu %1
call psexec.exe \\%1 systeminfo |find "Systembetriebszeit" >> log.txt
goto :eof
in der Rechner.txt stehen alle PC`s drin die ich überprüfen will die lange sie läuft.
Dieses soll dann in einer log.txt wiedergegeben werden, das passt soweit, es wird wie folgt ausgegeben:
Systembetriebszeit: 9 Tage, 4 Stunden, 16 Minuten, 42 Sekunden
ich hätte aber gerne das davor der PC Name steht, da ich ansonsten dies nicht zuordnen kann.
ich glaube man muss nur %Computer% hinzufügen oder? leider weiß ich auch nicht genau wo.
Kann hier jemand helfen?
Danke für die hilfe
edit:
habe auch diesen Powershell befehl gesehen:
<#
.SYNOPSIS
Demonstrates uptime using WMI
.DESCRIPTION
This script used Win32_ComputerSystem to determine how long your system
has been running. This is a rewrite/improvement of sample 3 at
http://msdn.microsoft.com/en-us/library/aa394591(VS.85).aspx.
.NOTES
File Name : Get-UpTime.ps1
Author : Thomas Lee - tfl@psp.co.uk
Requires : PowerShell V2 CTP3
.LINK
Script Posted to:
http://www.pshscripts.blogspot.com
Original sample posted at:
http://msdn.microsoft.com/en-us/library/aa394591(VS.85).aspx
.EXAMPLE
PS c:\foo> .\Get-UpTime.Ps1
System Up for: 1 days, 8 hours, 40.781 minutes
#>
##
- Start of script
- Helper Function - convert WMI date to TimeDate object
[System.Management.ManagementDateTimeconverter]::ToDateTime($Bootup)
}
- Main script
$computers = Get-WMIObject -class Win32_OperatingSystem -computer $computer
foreach ($system in $computers) {
$Bootup = $system.LastBootUpTime
$LastBootUpTime = WMIDateStringToDate($Bootup)
$now = Get-Date
$Uptime = $now - $lastBootUpTime
$d = $Uptime.Days
$h = $Uptime.Hours
$m = $uptime.Minutes
$ms= $uptime.Milliseconds
"System Up for: {0} days, {1} hours, {2}.{3} minutes" -f $d,$h,$m,$ms
}
- End script
hier weiß ich leider nicht wo ich meine Rechner.txt einfügen soll, sodass es das Script erkennt
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 177186
Url: https://administrator.de/forum/per-batch-pc-namen-in-log-datei-mitaufnehmen-177186.html
Ausgedruckt am: 19.05.2025 um 20:05 Uhr
3 Kommentare
Neuester Kommentar
Hallo Gl05e!
Du hast doch den Computernamen ohenhin in %1 - daher einfach:
Abgesehen davon ließe sich das auch ganz ohne Unterprogramm erledigen:
oder kürzer:
Grüße
bastla
Du hast doch den Computernamen ohenhin in %1 - daher einfach:
(
echo %1
psexec.exe \\%1 systeminfo |find "Systembetriebszeit"
)>> log.txt
@echo off & setlocal
(
for /F %%a IN (Rechner.txt) do (
echo %%a
psexec.exe \\%%a systeminfo |find "Systembetriebszeit"
)
)>log.txt
@echo off & setlocal
(for /F %%a IN (Rechner.txt) do (echo %%a & psexec.exe \\%%a systeminfo |find "Systembetriebszeit"))>log.txt
bastla
Hallo GlO5e!
Aufgrund der Art, wie "systeminfo.exe" die Daten ausgibt, würde ich als Workaround eine Temp-Datei verwenden:
Als (ungetestete) Alternative könntest Du auch WMIC verwenden (dann bräuchtest Du kein "psexec"; auf die Idee gebracht haben mich - natürlich
- die Scripting Guys):
... und passend zum Thema:" Geheimnisse von Windows Management Instrumentation" bzw "wie lange läuft der PC"
[Edit] Noch etwas vereinfacht:
[/Edit]
Grüße
bastla
Aufgrund der Art, wie "systeminfo.exe" die Daten ausgibt, würde ich als Workaround eine Temp-Datei verwenden:
@echo off & setlocal
set "UT=%temp%\UpTime.txt"
(for /F %%a IN (Rechner.txt) do (
psexec \\%%a systeminfo|find "Systembetriebszeit">%UT%
<nul set /p=%%a;
type %UT%
))>log.txt
Als (ungetestete) Alternative könntest Du auch WMIC verwenden (dann bräuchtest Du kein "psexec"; auf die Idee gebracht haben mich - natürlich
@echo off & setlocal enabledelayedexpansion
(for /F %%a IN (Rechner.txt) do (
for /f "tokens=2 delims==" %%i in ('wmic /node:%%a path Win32_PerfFormattedData_PerfOS_System get systemuptime /value') do set "UpTime=%%i"
set /a UpDays=!UpTime!/86400
set /a UpTime=!UpTime!%%86400
set /a UpHours=!UpTime!/3600
set /a UpTime=!UpTime!%%3600
set /a UpMinutes=!UpTime!/60
set /a UpSeconds=!UpTime!%%60
echo %%a;!UpDays! Tage !UpHours! Stunden !UpMinutes! Minuten !UpSeconds! Sekunden
))>log.txt
[Edit] Noch etwas vereinfacht:
@echo off & setlocal enabledelayedexpansion
(for /F %%a IN (Rechner.txt) do (
for /f "tokens=2 delims==" %%i in ('wmic /node:%%a path Win32_PerfFormattedData_PerfOS_System get systemuptime /value') do set "UpTime=%%i"
set /a UpDays=!UpTime!/86400
set /a UpHours=!UpTime!/3600%%24
set /a UpMinutes=!UpTime!/60%%60
set /a UpSeconds=!UpTime!%%86400%%60
echo %%a;!UpDays! Tage !UpHours! Stunden !UpMinutes! Minuten !UpSeconds! Sekunden
))>log.txt
Grüße
bastla