Shutdown on IDLE

  • Hy Leude,

    ich hab da ein Problem und ich weiß nicht ganz wie ich es lösen könnte. Ich hab ein PC auf dem Windows Server 2008 R2 läuft und den ich als NAS benutze, nun möchte ich das der PC runterfährt wenn eine bestimmte Zeit nicht auf ihn zugegriffen wird. Also über Benutzereingaben kann man es nicht regeln, da nur über Netzwerk drauf zugegriffen wird. Vielleicht ist es irgendwie möglich auszulesen seit wann die Festplatten im Standby sind oder wann der letzte Netzwerktraffic auf bestimmten Ressourcen war.

    Ich hoffe jemand hat eine gute Idee. thx

    • Offizieller Beitrag

    Du könntest den Netzwerktraffic überwachen. Wenn dieser eine zeitlang unter einem bestimmten Wert bleibt (Null geht nicht, weil Windows hin und wieder auf das Netzwerk zugreift), dann den Rechner runterfahren.

    Hier ist mal ein kleines Beispielskript:

    Spoiler anzeigen
    [autoit]


    HotKeySet('{ESC}', '_End')
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = 'localhost'
    $NetworkAdapter = 'Marvell Yukon 88E8053 PCI-E Gigabit Ethernet Controller' ; hier den Namen des Netzwerkadapters eintragen

    [/autoit] [autoit][/autoit] [autoit]

    $Output=""
    $Output &= 'Computer: ' & $strComputer & @CRLF
    $Output &= '==========================================' & @CRLF
    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\')
    While True
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) Then
    For $objItem In $colItems
    If $objItem.Name = $NetworkAdapter Then
    $Output = 'BytesReceivedPersec: ' & $objItem.BytesReceivedPersec & @CRLF
    $Output &= 'BytesSentPersec: ' & $objItem.BytesSentPersec & @CRLF
    $Output &= 'BytesTotalPersec: ' & $objItem.BytesTotalPersec & @CRLF
    ToolTip($Output, @DesktopWidth / 2 - 200, 20, 'Network-Traffic')
    EndIf
    Next
    Else
    $Output &= 'No WMI Objects Found for class: ' & 'Win32_PerfFormattedData_Tcpip_NetworkInterface'
    Endif
    Sleep(50)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _End()
    Exit
    EndFunc

    [/autoit]
  • thx, aber das ist doch etwas ungenau.
    Jedenfalls wüsst ich nicht welchen Schwellenwert ich nehmen sollte.

    Habs zum testen mal so gemacht.
    Ist aber nicht wirklich Ressourcenschonend.

    Spoiler anzeigen
    [autoit]

    HotKeySet('{ESC}', '_End')
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = 'localhost'
    $i = 0
    $Zeiteinheit = 36000 ;(30 min)

    [/autoit] [autoit][/autoit] [autoit]

    $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\')

    [/autoit] [autoit][/autoit] [autoit]

    While True
    _static()
    _timer()
    Sleep(50)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _static()
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) Then
    For $objItem In $colItems
    If $objItem.BytesTotalPersec > 512000 Then
    $i = 0
    Else
    $i = $i + 1
    EndIf
    Next
    Else
    $Output &= 'No WMI Objects Found for class: ' & 'Win32_PerfFormattedData_Tcpip_NetworkInterface'
    Endif
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _timer()
    $wert = Floor($i / 1200)
    ToolTip($wert, @DesktopWidth / 2 - 200, 20, 'Zeit')
    If $i > $zeiteinheit Then Shutdown(1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _End()
    Exit
    EndFunc

    [/autoit]

    Vielleicht hat jemand noch einen anderen Vorschlag.

    3 Mal editiert, zuletzt von Masterraven9 (19. Mai 2010 um 19:20)