Загрузка/выгрузка из/в *.txt файл
Добрый день!
Народ помогите, есть вот такой скрипт:
Computer = InputBox("Имя компьютера")
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2")
Set colComputer = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For Each objComputer in colComputer
Wscript.Echo "Logged-on user: " & objComputer.UserName
Next
Как сделать так, чтобы запрашивал не имя, а name.txt файл со списком ПК и соответственно выгружал в name_log.txt ввиде:
NamePC1 = Domain\User1
NamePC2 = Domain\User2
NamePC3 = Domain\User3
...
|
Укажите версии ОС:
- на компьютере, где будет запускаться сценарий;
- на компьютерах, которые он будет опрашивать.
|
Цитата:
Цитата DmitriiV
Укажите версии ОС:
- на компьютере, где будет запускаться сценарий;
- на компьютерах, которые он будет опрашивать. »
|
1. Windows 7 Enterprise
2. Windows XP (Pro), 7 (Enterprise, Pro, Ultimate)
|
Простой, но некрасивый (с точки зрения организации диалога по выбору файла с именами компьютеров) вариант:
Код:
strLog = "name_log.txt"
Set objFS = CreateObject("Scripting.FileSystemObject")
strLog = objFS.BuildPath(objFS.GetParentFolderName(WScript.ScriptFullName), strLog)
strFile = Trim(InputBox("Полный путь к файлу:"))
If objFS.FileExists(strFile) Then
Set objFile = objFS.OpenTextFile(strFile, 1)
arrComputers = Split(objFile.ReadAll, vbNewLine)
objFile.Close
On Error Resume Next
For i = 0 To UBound(arrComputers)
If Len(arrComputers(i)) > 0 Then
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & arrComputers(i) & "\root\cimv2")
If Err.Number = 0 Then
Set colComputer = objWMIService.ExecQuery("Select UserName from Win32_ComputerSystem")
If Err.Number = 0 Then
For Each objComputer In colComputer
If IsNull(objComputer.UserName) Then
strUsers = strUsers & arrComputers(i) & " = сеанс не обнаружен" & vbNewLine
Else
strUsers = strUsers & arrComputers(i) & " = " & objComputer.UserName & vbNewLine
End If
Next
Else
Err.Clear
End If
Set colComputer = Nothing
Else
Err.Clear
End If
End If
Next
On Error GoTo 0
Set objFile = objFS.OpenTextFile(strLog, 2, True)
objFile.Write strUsers
objFile.Close
Set objFile = Nothing
Else
WScript.Echo "Файл не найден."
End If
Set objFS = Nothing
WScript.Quit 0
Информацию о том, как под Win 7 организовать красивый диалог выбора файла, найдёте здесь:
VBS диалог открытия файла не работает на Windows 7
|
Супер!
Только есть проблема, если ПК не пингуется, то скрипт висит, можно его доделать так?:
NamePC1 = domain\NameUser1
NamePC2 = domain\NameUser2
NamePC3 = недоступен
NamePC4 = domain\NameUser4
...
|
Код:
strLog = "name_log.txt"
Set objFS = CreateObject("Scripting.FileSystemObject")
strLog = objFS.BuildPath(objFS.GetParentFolderName(WScript.ScriptFullName), strLog)
strFile = Trim(InputBox("Полный путь к файлу:"))
If objFS.FileExists(strFile) Then
Set objFile = objFS.OpenTextFile(strFile, 1)
arrComputers = Split(objFile.ReadAll, vbNewLine)
objFile.Close
On Error Resume Next
For i = 0 To UBound(arrComputers)
If Len(arrComputers(i)) > 0 Then
If Ping_GUI(arrComputers(i)) Then
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & arrComputers(i) & "\root\cimv2")
If Err.Number = 0 Then
Set colComputer = objWMIService.ExecQuery("Select UserName from Win32_ComputerSystem")
If Err.Number = 0 Then
For Each objComputer In colComputer
If IsNull(objComputer.UserName) Then
strUsers = strUsers & arrComputers(i) & " = сеанс не обнаружен" & vbNewLine
Else
strUsers = strUsers & arrComputers(i) & " = " & objComputer.UserName & vbNewLine
End If
Next
Else
Err.Clear
End If
Set colComputer = Nothing
Else
Err.Clear
End If
Else
strUsers = strUsers & arrComputers(i) & " = недоступен" & vbNewLine
End If
End If
Next
On Error GoTo 0
Set objFile = objFS.OpenTextFile(strLog, 2, True)
objFile.Write strUsers
objFile.Close
Set objFile = Nothing
WScript.Echo "Готово."
Else
WScript.Echo "Файл не найден."
End If
Set objFS = Nothing
WScript.Quit 0
'===
Function Ping_GUI(strName)
Dim objWMI, objItem
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("SELECT * FROM Win32_PingStatus WHERE Address='" & strName & "'")
For Each objItem In objWMI
If IsNull(objItem.StatusCode) Or objItem.StatusCode <> 0 Then
Ping_GUI = False
Else
Ping_GUI = True
End If
Next
Set objItem = Nothing
Set objWMI = Nothing
End Function
|
Время: 01:00.
© OSzone.net 2001-