Войти

Показать полную графическую версию : [решено] Опрос компьютеров в сети на наличие каталога


Lezenford
15-01-2014, 10:27
Всем добрый день!

Столкнулся с проблемой. Есть доменная сеть на более чем 1к машин. Нужно создать лог файл, в котором будет отображаться есть или нет на каждой из машин определенный каталог.
Список машин можно будет подгрузить из отдельного файла - это не проблема. Запускаться этот скрипт будет от имели учетки, имеющей админиские права на этих машинах.
Вопрос, как это сделать? Лучше средствами .bat, но если не получится - открыт для предложений...

Iska
15-01-2014, 14:09
@echo off
setlocal enableextensions enabledelayedexpansion

>"Out.txt" 2>nul wmic.exe /node:@NodeList.txt FSDir where "Name='c:\\Temp'" get CSName, Name

endlocal
exit /b 0

В «Out.txt» будут помещены все наличествующие каталоги «c:\Temp» на машинах, перечисленных в «NodeList.txt».

Lezenford
15-01-2014, 14:20
Отлично! Спасибо большое! То, что нужно!

А можно добавить сюда еще обработчик, что если каталог не найден, то он так и писал бы в логе-файле, что каталога нет?
Меня при этом опросе больше волнуют машины, где каталог отсутствует.

Iska
15-01-2014, 14:23
Lezenford, сомневаюсь.

Lezenford
15-01-2014, 14:30
Ладно, спасибо, это все лучше чем ручной перебор. Еще раз спасибо!

Iska
15-01-2014, 16:50
На WSH:
Option Explicit

Dim strFolder
Dim strNodeList

Dim strComputer
Dim objSWbemLocator


strFolder = "c:\Temp"
strNodeList = "E:\Песочница\0351\NodeList.txt"

With WScript.CreateObject("Scripting.FileSystemObject")
If .FileExists(strNodeList) Then

Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")

With .OpenTextFile(strNodeList)
Do Until .AtEndOfStream
strComputer = Trim(.ReadLine())

If IsConnected(strComputer) Then
With objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
If .ExecQuery("SELECT Name FROM Win32_Directory WHERE Name='" & Replace(strFolder, "\", "\\") & "'").Count = 0 Then
WScript.Echo strComputer
End If
End With
Else
WScript.Echo strComputer & " is not found."
End If
Loop

.Close
End With

Set objSWbemLocator = Nothing
Else
WScript.Echo "Node list file [" & strNodeList & "] not found."
WScript.Quit 1
End If
End With

WScript.Quit 0
'=============================================================================

'=============================================================================
Function IsConnected(strAddress)
Dim objSWbemObjectEx

IsConnected = False

For Each objSWbemObjectEx In GetObject( _
"winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery( _
"SELECT * FROM Win32_PingStatus WHERE Address = '" & strAddress & "'" _
)

With objSWbemObjectEx
If Not IsNull(.StatusCode) And .StatusCode = 0 Then
IsConnected = True
End If
End With

Exit For
Next

Set objSWbemObjectEx = Nothing
End Function
'=============================================================================

Если имена недоступных машин Вас не интересуют — закомментируйте выделенное.

Lezenford
16-01-2014, 14:38
Iska, спасибо, но я не знаю JS и потому, к сожалению, не могу понять на что у меня ругается компилятор. При попытки скомпилить код выдается ошибка:

---------------------------
Windows Script Host
---------------------------
Сценарий: D:\скрипт.js
Строка: 1
Символ: 8
Ошибка: Предполагается наличие ';'
Код: 800A03EC
Источник: Ошибка компиляции Microsoft JScript

---------------------------
ОК
---------------------------

В коде поменял только путь до NodeList.
Откуда он берет ошибку про ";" не понимаю - этот символ не закрывает здесь строки как в C# например.

Iska
16-01-2014, 15:03
Это не JScript, а VBScript, посему сохраняйте код в файле с расширением не «.js», а «.vbs».

Откуда он берет ошибку про ";" не понимаю - этот символ не закрывает здесь строки как в C# например. »
В JScript так и есть — закрывает оператор.

Поскольку у Вас было использовано расширение «.js», Windows Script Host использует ядро JScript для обработки, которое, в свою очередь, пытается интерпретировать строку, не видит там символа «;» и сообщает об указанной ошибке.

Lezenford
16-01-2014, 15:28
Iska, да, все заработало. Прошу прощения за глупые вопросы :)
Но после запуска выяснился еще 1 нюанс - у него выдано выводить echo с результатом если не найден каталог или сама машина. А можно вместо echo организовать запись лог-файла? Все таки в домене очень много машин и не все они в момент проверки будут в сети.

Iska
16-01-2014, 15:45
А можно вместо echo организовать запись лог-файла? »
cscript.exe //nologo "Путь\Скрипт.vbs" >"Путь\Имя.log"

Lezenford
16-01-2014, 15:57
Отлично! То что нужно! Спасибо огромное. Нужно как-нибудь сесть за скриптовые языки... а то как калека...




© OSzone.net 2001-2012