問:
您好,指令碼專家! 如何確定伺服器的正常執行時間?
-- lf 答:
您好,lf。 這個問題很簡單。 畢竟,我們假設您談論的是 windows 伺服器,而 windows 伺服器是永遠不停機的,對嗎? 因此,正常執行時間肯定是無限長的。 問題得到了解決。
那麼,我們假設 windows 伺服器會停機(可能是因為某個非 windows 使用者偷偷潛入並將電源插頭或其他什麼東西拔掉了)。 如果您想知道執行 windows xp 或 windows server 2003 的計算機的系統正常執行時間,可使用以下指令碼:
strcomputer = "."正如您所看到的,我們連線至 wmi 服務,然後使用execquery方法來檢索win32_perfformatteddata_perfos_system類中的所有例項。 (順便提一下,這解釋了該指令碼只能在 windows xp 或 windows server 2003 上執行的原因: 只有 windows 的這兩個版本中含有 win32_perfformatteddata_perfos_system 類。)set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set coloperatingsystems = objwmiservice.execquery _
("select * from win32_perfformatteddata_perfos_system")
for each objos in coloperatingsystems
intsystemuptime = int(objos.systemuptime / 60)
wscript.echo intsystemuptime & " minutes"
next
win32_perfformatteddata_perfos_system 包含許多與作業系統相關的效能計數器,其中包括systemuptime,其可指示您機器已經執行了多長時間(以秒計)。 我們使用下面這行**來獲取 systemuptime 的值,並將其除以 60(這樣顯示的正常執行時間的單位為分鐘,而不是秒),然後再將其轉換為整數,除去小數點後的所有數字:
intsystemuptime = int(objos.systemuptime / 60)是的,那正是一小行**所要做的,簡直太多了,不是嗎? 然後我們回顯變數 intsystemuptime 的值就可以了。
好了,除非您執行的是 windows 2000,否則問題就解決了。 正如前面所述,上述指令碼不能在 windows 2000 上執行,windows 2000 甚至從沒聽說過 win32_perfformatteddata_perfos_system 類。 幸運的是,存在一種解決方法;雖然有些笨拙,但畢竟也是一種解決方法:
strcomputer = "."在此指令碼中,我們連線至 wmi 服務,然後查詢win32_operatingsystem類;那是因為 win32_operatingsystem 中包含乙個屬性 – lastbootuptime – 該屬性可告訴您計算機上次啟動的時間。 這一點非常有用: 如果我們從當前時間中減去 lastbootuptime,我們就會知道 – 沒錯 – 計算機已經執行了多長時間。set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set coloperatingsystems = objwmiservice.execquery _
("select * from win32_operatingsystem")
for each objos in coloperatingsystems
dtmbootup = objos.lastbootuptime
dtmlastbootuptime = wmidatestringtodate(dtmbootup)
dtmsystemuptime = datediff("n", dtmlastbootuptime, now)
wscript.echo dtmsystemuptime & " minutes"
next
function wmidatestringtodate(dtmbootup)
wmidatestringtodate = cdate(mid(dtmbootup, 5, 2) & "/" & _
mid(dtmbootup, 7, 2) & "/" & left(dtmbootup, 4) _
& " " & mid (dtmbootup, 9, 2) & ":" & _
mid(dtmbootup, 11, 2) & ":" & mid(dtmbootup,13, 2))
end function
唯一棘手的部分是,與所有 wmi 日期和時間一樣,lastbootuptime 是以 utc(通用時間座標)格式儲存的。 那就意味著將返回下面這樣的值:
20050726071152.500000-420在進行嘗試之前,請不要費神從當前日期和時間中減去該值;那樣做是徒勞的。 我們需要將該值轉換成看起來更像實際日期和時間的形式;這正是我們之所以呼叫乙個由我們編寫的函式的原因,該函式可將 utc datetime 值轉換成常規的老式日期/時間值:
dtmlastbootuptime = wmidatestringtodate(dtmbootup)注意。 我們將不對該函式的工作方式進行介紹。 如果您對此感興趣,請參閱 microsoft windows 2000 scripting guide(英文)中的此部分。
dtmsystemuptime = datediff("n", dtmlastbootuptime, now)正如您所看到的,我們將三個引數傳遞給 datediff:
•「n」,表示以分鐘為單位報告時間差。
•dtmlastbootuptime,用來儲存轉換後的 datetime 值的變數。
•now,當前日期和時間。
我們接下來要做的就是以分鐘為單位回顯系統正常執行時間。
正如前面所述,我們無法想象您為何需要對 windows 計算機使用這樣乙個指令碼,而只是以防萬一…。
Windows服務執行時間常用設定
1 用timer控制每隔多長時間執行一次 windows服務使用timer控制項並不是在工具箱上拖拽過來的,而是system.windows.forms命名空間下的元件,即使用的timer應該是system.timers.timer.解決方法 方法一 開啟 工具箱 右鍵 選擇項 篩選器輸入syste...
java如何記錄方法執行時間?
當我們寫完一些東西的時候,執行有可能很慢卻不知道 出現了問題,這時候我們就需要在 中新增適當的測試 以便於我們找到原因並解決!這個 是測試 嗎,不需要匯入包。在你需要測試的 方法第一行加上 long a system.currenttimemillis 在最後的一行加上 system.out.pri...
如何在執行時確定物件型別(RTTI)
如何在執行時確定物件型別 rtti rtti 是 runtime type information 的縮寫,意思是 執行時型別資訊。它提供了執行時確定物件型別的方法。本文將簡略介紹 rtti 的一些背景知識 描述 rtti 的概念,並通過具體例子和 介紹什麼時候使用以及如何使用 rtti 本文還將詳...