Показать полную графическую версию : [решено] Опрос компьютеров в сети на наличие каталога
Lezenford
15-01-2014, 10:27
Всем добрый день!
Столкнулся с проблемой. Есть доменная сеть на более чем 1к машин. Нужно создать лог файл, в котором будет отображаться есть или нет на каждой из машин определенный каталог.
Список машин можно будет подгрузить из отдельного файла - это не проблема. Запускаться этот скрипт будет от имели учетки, имеющей админиские права на этих машинах.
Вопрос, как это сделать? Лучше средствами .bat, но если не получится - открыт для предложений...
@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
Отлично! Спасибо большое! То, что нужно!
А можно добавить сюда еще обработчик, что если каталог не найден, то он так и писал бы в логе-файле, что каталога нет?
Меня при этом опросе больше волнуют машины, где каталог отсутствует.
Lezenford
15-01-2014, 14:30
Ладно, спасибо, это все лучше чем ручной перебор. Еще раз спасибо!
На 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# например.
Это не JScript, а VBScript, посему сохраняйте код в файле с расширением не «.js», а «.vbs».
Откуда он берет ошибку про ";" не понимаю - этот символ не закрывает здесь строки как в C# например. »
В JScript так и есть — закрывает оператор.
Поскольку у Вас было использовано расширение «.js», Windows Script Host использует ядро JScript для обработки, которое, в свою очередь, пытается интерпретировать строку, не видит там символа «;» и сообщает об указанной ошибке.
Lezenford
16-01-2014, 15:28
Iska, да, все заработало. Прошу прощения за глупые вопросы :)
Но после запуска выяснился еще 1 нюанс - у него выдано выводить echo с результатом если не найден каталог или сама машина. А можно вместо echo организовать запись лог-файла? Все таки в домене очень много машин и не все они в момент проверки будут в сети.
А можно вместо echo организовать запись лог-файла? »
cscript.exe //nologo "Путь\Скрипт.vbs" >"Путь\Имя.log"
Lezenford
16-01-2014, 15:57
Отлично! То что нужно! Спасибо огромное. Нужно как-нибудь сесть за скриптовые языки... а то как калека...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.