Считаем DNS зоны в Windows Server 2008/2012 с помощью Microsoft Jscript


Пришлось мне как-то раз автоматизировать процесс получения информации и DNS зонах, которые находятся на абстрактном сервере под управлением Windows. Опять мой мозг режет мысль о том, что пишу заметку про окна, когда изначально блог задумывался о задачах, связанных с Linux.

Итак задача ясна. Выбор инструмента пал на Jscript, поскольку тело основного модуля написано на нем, писать вторую часть на PowerShell - не комильфо. Решил: "Буду считать файлы с расширением *.dns в папке C:\Windows\System32\dns, убирать у них расширение, считать их количество"

Объявляем изначальные переменные, инициализируем работу с shell:

var env = new ActiveXObject("WScript.Shell").Environment("Process");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var path = env("WINDIR") + '\\System32\\dns';

В обязательном порядке нужно удостовериться, что папка существует и зоны в ней тоже есть, иначе скрипт будет выпадать с ошибкой. Добавляем условие существования объекта fso (file system object):
if (fso.FolderExists(path) == true){

Дальше читаем содержимое папки, убираем путь к ней, и записываем получение данные в массив dnsfiles

var folder = fso.GetFolder(path);
var myEnum = new Enumerator(myFolder.Files);


myEnum.moveFirst();
while(!myEnum.atEnd()){
    var re =new RegExp('[^\\\\]*dns$', "gi");
    var file = re.exec(myEnum.item());
    if ((file != null) && (file != "cache.dns") && (file != "CACHE.DNS")){
        var dnsrecord = new RegExp("\.dns", "i");
        dnsrecord.exec(file);
    }
    myEnum.moveNext();
}

Этот же принцип можно использовать для листинга содержимого других каталогов.

Полный скрипт:

var env = new ActiveXObject("WScript.Shell").Environment("Process");
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	var path = env("WINDIR") + '\\System32\\dns';

	if (fso.FolderExists(path) == true){

    	var myFolder = fso.GetFolder(path);
    	var myEnum = new Enumerator(myFolder.Files);
    	var nn = 1;

	WScript.Echo("");
	WScript.Echo("System DNS zones: ");

        	myEnum.moveFirst();
   
        	while(!myEnum.atEnd()){
            		var re =new RegExp('[^\\\\]*dns$', "gi");
            		var file = re.exec(myEnum.item());
            		if ((file != null) && (file != "cache.dns") && (file != "CACHE.DNS")){
               				var dnsrecord = new RegExp("\.dns", "i");
               				dnsrecord.exec(file)
               				WScript.Echo(nn+': '+RegExp.leftContext);
               				num += nn;
            		}
            		myEnum.moveNext();
        	}
    }

Share Button
(Visited 68 times, 1 visits today)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *