Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Загрузка/выгрузка из/в *.txt файл (http://forum.oszone.net/showthread.php?t=225755)

HFShak 20-01-2012 13:42 1840309

Загрузка/выгрузка из/в *.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 20-01-2012 13:49 1840313

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

HFShak 20-01-2012 14:22 1840334

Цитата:

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

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

DmitriiV 20-01-2012 15:37 1840407

Простой, но некрасивый (с точки зрения организации диалога по выбору файла с именами компьютеров) вариант:
Код:

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

HFShak 20-01-2012 16:10 1840432

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

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

DmitriiV 20-01-2012 16:56 1840478

Код:

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.

Время: 01:00.
© OSzone.net 2001-