PDA

Показать полную графическую версию : [решено] Загрузка/выгрузка из/в *.txt файл


HFShak
20-01-2012, 13:42
Добрый день!
Народ помогите, есть вот такой скрипт:

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
20-01-2012, 13:49
Укажите версии ОС:
- на компьютере, где будет запускаться сценарий;
- на компьютерах, которые он будет опрашивать.

HFShak
20-01-2012, 14:22
Укажите версии ОС:
- на компьютере, где будет запускаться сценарий;
- на компьютерах, которые он будет опрашивать. »

1. Windows 7 Enterprise
2. Windows XP (Pro), 7 (Enterprise, Pro, Ultimate)

DmitriiV
20-01-2012, 15:37
Простой, но некрасивый (с точки зрения организации диалога по выбору файла с именами компьютеров) вариант:

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 (http://forum.script-coding.com/viewtopic.php?id=6192)

HFShak
20-01-2012, 16:10
Супер!
Только есть проблема, если ПК не пингуется, то скрипт висит, можно его доделать так?:

NamePC1 = domain\NameUser1
NamePC2 = domain\NameUser2
NamePC3 = недоступен
NamePC4 = domain\NameUser4
...

DmitriiV
20-01-2012, 16:56
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




© OSzone.net 2001-2012