Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Опрос компьютеров в сети на наличие каталога

Ответить
Настройки темы
CMD/BAT - [решено] Опрос компьютеров в сети на наличие каталога

Новый участник


Сообщения: 44
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Всем добрый день!

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

Отправлено: 10:27, 15-01-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@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».
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:09, 15-01-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 44
Благодарности: 0

Профиль | Отправить PM | Цитировать


Отлично! Спасибо большое! То, что нужно!

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

Последний раз редактировалось Lezenford, 15-01-2014 в 14:29.


Отправлено: 14:20, 15-01-2014 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Lezenford, сомневаюсь.

Отправлено: 14:23, 15-01-2014 | #4


Новый участник


Сообщения: 44
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ладно, спасибо, это все лучше чем ручной перебор. Еще раз спасибо!

Отправлено: 14:30, 15-01-2014 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


На 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
'=============================================================================

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

Отправлено: 16:50, 15-01-2014 | #6


Новый участник


Сообщения: 44
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

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

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

Отправлено: 14:38, 16-01-2014 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Это не JScript, а VBScript, посему сохраняйте код в файле с расширением не «.js», а «.vbs».

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

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

Отправлено: 15:03, 16-01-2014 | #8


Новый участник


Сообщения: 44
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:28, 16-01-2014 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Lezenford:
А можно вместо echo организовать запись лог-файла? »
Код: Выделить весь код
cscript.exe //nologo "Путь\Скрипт.vbs" >"Путь\Имя.log"
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:45, 16-01-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Опрос компьютеров в сети на наличие каталога

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Батник на выключение компьютеров по сети. Hrust2010 Скриптовые языки администрирования Windows 38 13-10-2016 14:18
Службы - доменная сеть. долго отображается список компьютеров в сети на win 7 fess2005 Microsoft Windows 7 10 12-08-2014 18:33
Службы - [решено] Опрос сети. Как заставить компьютер помнить всех кого он нашёл McLotos Microsoft Windows 7 4 07-08-2013 11:48
FTP/File - [решено] Как автоматизировать передачу файлов по сети на несколько компьютеров? RazdoR Сетевые технологии 3 29-05-2012 15:51
CMD/BAT - [решено] отслеживание включенных компьютеров в сети и копирование на них Genka Скриптовые языки администрирования Windows 5 15-10-2010 03:07




 
Переход