9
花了一個晚上寫了這個小小程式
迫不及待與大家分享...
應該還有更好的寫法, 不過累了....
存成 .vbs 就可以執行了~
最好用網域 Administrator 或可以登入網域中每一台 PC 的帳號執行
才能查出該電腦的使用者是誰 / 有哪些
'
' FSO 元件的開啟及關閉方法:
'
' Windows 2000
' 開啟: RegSvr32 C:\\WINNT\\SYSTEM32\\scrrun.dll
' 關閉: RegSvr32 /u C:\\WINNT\\SYSTEM32\\scrrun.dll
'
' Windows XP / 2K3
' 開啟: regsvr32 scrrun.dll
' 關閉: regsvr32 /u scrrun.dll
'
' 指令執行完畢後需登出才會生效
'
Set objShell = CreateObject("Wscript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2
NowDateTime=DateAdd("h",0,now())
NowDateTime=Year(NowDateTime) & "_" & Right("0" & Month(NowDateTime), 2) & "_" & Right("0" & Day(NowDateTime), 2) & "_" & Right("0" & Hour(NowDateTime), 2) & "_" & Right("0" & Minute(NowDateTime), 2) & "_" & Right("0" & Second(NowDateTime), 2)
'--------------------------------------------------------------
' 設定值
' 建立檢查未關機電腦名稱之批次檔
StepOneFileName = "C:\StepOne.bat"
' 取得未關機電腦名稱
StepTwoFileName = "C:\StepTwo.txt"
' 解析未關機電腦名稱
StepThreeFileName = "C:\StepThree.bat"
' 取得未關機電腦之使用者名稱
StepFourFileName = "C:\StepFour.txt"
' 合併未關機電腦名稱與其使用者名稱 => 報表
StepFiveFileName = "C:\PC_Online_"&NowDateTime&".txt"
' 要下指令關機之電腦
PCtoShutDownFileName = "C:\ShutDownPC.txt"
' 關機指令
PCtoShutDownExecutionFileName = "C:\ShutDownPC.bat"
' C Class 網段
IPClass="192.168.4"
' 要掃描的開始 IP
IPRangeFirst=100
' 要掃描的結尾 IP
IPRangeLast=100
'--------------------------------------------------------------
' 刪除舊的 StepFile
If objFSO.FileExists(StepOneFileName) Then
objFSO.DeleteFile(StepOneFileName)
End If
If objFSO.FileExists(StepTwoFileName) Then
objFSO.DeleteFile(StepTwoFileName)
End If
If objFSO.FileExists(StepThreeFileName) Then
objFSO.DeleteFile(StepThreeFileName)
End If
If objFSO.FileExists(StepFourFileName) Then
objFSO.DeleteFile(StepFourFileName)
End If
If objFSO.FileExists(StepFiveFileName) Then
objFSO.DeleteFile(StepFiveFileName)
End If
If objFSO.FileExists(PCtoShutDownFileName) Then
objFSO.DeleteFile(PCtoShutDownFileName)
End If
' 預先開啟結案檔案
Set StepFiveFile = objFSO.OpenTextFile(StepFiveFileName, ForWriting, True)
Set PCtoShutDownFile = objFSO.OpenTextFile(PCtoShutDownFileName, ForWriting, True)
' 建立查詢 BAT 檔
Set StepOneFile = objFSO.OpenTextFile(StepOneFileName, ForWriting, True)
StepOneFile.WriteLine "nbtstat -A %1.%2 | Find ""UNIQUE"" /I | Find ""<00>"" /I >> %3"
StepOneFile.Close
' 開始檢查未關機電腦名稱
IPNow=IPRangeFirst
While IPNow <= IPRangeLast
objShell.Run(StepOneFileName&" "&IPClass&" "&IPNow&" "&StepTwoFileName),1,True
IPNow=IPNow+1
Wend
objFSO.DeleteFile(StepOneFileName)
' 開始解析未關機電腦名稱
If objFSO.FileExists(StepTwoFileName) Then
Set StepTwoFile = objFSO.OpenTextFile(StepTwoFileName, ForReading, False)
While StepTwoFile.AtEndOfStream <> True
' 從 StepTwoFileName 中解析出單純的電腦名稱
StepTwoFileNameTempArray = Split(StepTwoFile.ReadLine, " ")
' 並建立查詢該電腦使用者之批次檔 (StepFourFileName) , 電腦名稱為 StepTwoFileNameTempArray(1)
Set StepThreeFile = objFSO.OpenTextFile(StepThreeFileName, ForWriting, True)
StepThreeFile.WriteLine "dir ""\\"&StepTwoFileNameTempArray(1)&"\C$\Documents and Settings"" | Find ""<DIR> "" /I | Find ""Default User"" /V /I | Find ""All Users"" /V /I | Find ""> ."" /V /I | Find ""Administrator"" /V /I | Find ""磁碟區"" /V /I | Find ""目錄"" /V /I | Find ""位元"" /V /I >> "&StepFourFileName
StepThreeFile.Close
' 合併電腦與使用者資料第一步: 寫入電腦名稱
PCtoShutDownFile.WriteLine StepTwoFileNameTempArray(1)
StepFiveFile.WriteLine "電腦名稱: "&StepTwoFileNameTempArray(1)
StepFiveFile.WriteLine "--------------------"
' 合併電腦與使用者資料第一步: 寫入電腦名稱
' 執行 StepFourFileName 批次檔取得開電腦使用者名稱並存於 StepFourFileName 中
objShell.Run(StepThreeFileName),1,True
' 讀取 StepFourFileName 取得該電腦之使用者名稱
Set StepFourFile = objFSO.OpenTextFile(StepFourFileName, ForReading, False)
' 合併電腦與使用者資料第二步: 寫入使用者名稱
' 從 StepFourFileName 中解析出單純的使用者名稱
AddUser=0
While StepFourFile.AtEndOfStream <> True
StepFourFileNameTempArray = Split(StepFourFile.ReadLine, "<DIR> ")
If ADDUser=0 Then
StepFiveFile.WriteLine "使用者: "&StepFourFileNameTempArray(1)
AddUser=1
Else
StepFiveFile.WriteLine " "&StepFourFileNameTempArray(1)
End If
Wend
' 關閉 StepFourFileName 檔案
StepFourFile.Close
objFSO.DeleteFile(StepFourFileName)
StepFiveFile.WriteLine "========================================"
' 合併電腦與使用者資料第二步: 寫入使用者名稱
Wend
End If
StepTwoFile.Close
objFSO.DeleteFile(StepTwoFileName)
objFSO.DeleteFile(StepThreeFileName)
' 開始解析未關機電腦名稱
StepFiveFile.Close
PCtoShutDownFile.Close
Set PCtoShutDownExecutionFile = objFSO.OpenTextFile(PCtoShutDownExecutionFileName, ForWriting, True)
PCtoShutDownExecutionFile.WriteLine """C:\Program Files\PsTools\psshutdown"" -c -f -k -m ""600 秒後關機"" -n 10 -t 600 @"&PCtoShutDownFileName
PCtoShutDownExecutionFile.Close
objShell.Run(PCtoShutDownExecutionFileName),1,True
objFSO.DeleteFile(PCtoShutDownFileName)
objFSO.DeleteFile(PCtoShutDownExecutionFileName)