14634
Dec 02, 2011, updated at 15:17:58 (UTC)
4592
3
0
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 177186
Url: https://administrator.de/contentid/177186
Printed on: April 25, 2024 at 05:04 o'clock
3 Comments
Latest comment
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 - 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
[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