14634
Goto Top

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

#>

##
  1. Start of script
##

  1. Helper Function - convert WMI date to TimeDate object
function WMIDateStringToDate($Bootup) {
[System.Management.ManagementDateTimeconverter]::ToDateTime($Bootup)
}

  1. Main script
$Computer = "." # adjust as needed
$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
}
  1. End script


hier weiß ich leider nicht wo ich meine Rechner.txt einfügen soll, sodass es das Script erkennt

Content-Key: 177186

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

Printed on: April 25, 2024 at 05:04 o'clock

Member: bastla
bastla Dec 02, 2011 at 15:55:40 (UTC)
Goto Top
Hallo Gl05e!

Du hast doch den Computernamen ohenhin in %1 - daher einfach:
(
echo %1
psexec.exe \\%1 systeminfo |find "Systembetriebszeit"  
)>> log.txt
Abgesehen davon ließe sich das auch ganz ohne Unterprogramm erledigen:
@echo off & setlocal
(
    for /F %%a IN (Rechner.txt) do (
        echo %%a
        psexec.exe \\%%a systeminfo |find "Systembetriebszeit"  
    )
)>log.txt
oder kürzer:
@echo off & setlocal
(for /F %%a IN (Rechner.txt) do (echo %%a & psexec.exe \\%%a systeminfo |find "Systembetriebszeit"))>log.txt  
Grüße
bastla
Mitglied: 14634
14634 Dec 05, 2011 at 08:31:54 (UTC)
Goto Top
Danke, da schaut ja super aus,

eine Frage noch, wenn ich das Script ausführe kommt es wie folgt im Log raus:

PCname
Systembetriebszeit: 11 Tage, 21 Stunden, 41 Minuten, 6 Sekunden

kann man es so umändern, das alles in einer Zeile raus kommt?
Member: bastla
bastla Dec 05, 2011 at 15:11:53 (UTC)
Goto Top
Hallo GlO5e!

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 face-wink - die Scripting Guys):
@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
... und passend zum Thema:" Geheimnisse von Windows Management Instrumentation" bzw "wie lange läuft der PC"

[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
[/Edit]

Grüße
bastla