.VBS для запуска DNSCMD /enumrecords в цикле for для массива имен узлов. CLI показывает, как будто я запустил DNSCMD /?

Я пытаюсь запустить DNSCMD.exe /enumrecords из файла .vbs на нашем DNS-сервере Windows Server 2003 и вывести результаты в файл .csv для каждого имени узла в зоне DNS.

Я ввел узлы, для которых я хочу запустить команду в зоне, в массив и ввел список имен файлов в другой массив.

Идея состоит в том, чтобы запустить цикл for, чтобы просмотреть каждое имя узла и имя файла 0-42, запустить команду для каждого имени узла и последовательно вывести каждое имя файла.

Option Explicit
Dim ncpArr, NODE, fnameArr, FILE, DNSCMD, objWSHShell, QComm
Set objWSHShell = WScript.CreateObject("WScript.Shell")

ncpArr = Array(42 item array of DNS Nodes)

fnameArr = Array(42 item array of filenames)

QComm = "DnsCmd DNSservername /enumrecords contoso.com " & ncpArr(NODE) & " /Additional> c:\DNSData\" & fnameArr(NODE) & ".csv"

For NODE = 0 to 42
objWSHShell.Run QComm,1,True
'objWshShell.Exec QComm
'wscript.echo "| " & ncpArr(NODE) & " | | " & fnameArr(NODE) & " |"
'wscript.echo DNSCMD
Next

Намерение состояло в том, чтобы сэкономить немного времени, но, во всяком случае, я утроил время, которое потребовалось бы для запуска этих 42 команд при написании этого скрипта.

То, что я понял до сих пор, это:

Когда я запускаю эту команду на DNS-сервере, она выводит CSV точно так, как я хочу.

DnsCmd dnsservername /enumrecords zone.name node.st.name /Additional /continue> c:\DNSData\state_city_net.csv

Когда я запускаю ту же команду, как это:

Set objWSHShell = WScript.CreateObject("WScript.Shell")
objWSHShell.run "dnscmd /enumrecords zone.name node.st.name /additional> c:\DNSData\state_city_net.csv"

Всплывающее окно командной строки кратко показывает инструкции для DNSCMD, как если бы я запустил DNSCMD /?. Я смог только взглянуть на это, запустив описанный выше цикл и нажав «Пауза/Перерыв» в нужное время. Не уверен, можно ли заставить окно командной строки оставаться открытым, чтобы показывать какие-либо ошибки

Я заметил одну вещь: обычно, когда вы запускаете его с неправильным синтаксисом, в верхней части будет некоторая информация об ошибке. В этом случае это буквально выглядит как DNSCMD /? инструкции без ошибок вверху.

Мне серьезно интересно, невозможно ли просто запустить DNSCMD/enumrecords с использованием файла .vbs. как вы можете видеть из закомментированных частей, я попробовал несколько вещей, чтобы показать, что синтаксис правильный. Когда я повторяю вывод цикла, я могу ввести точный синтаксис в командную строку на DNS-сервере, и это работает!

Если бы КТО-НИБУДЬ мог просто взглянуть на то, что у меня есть выше, и сказать мне, почему, когда я запускаю свой сценарий, он делает это, или если бы вы могли хотя бы просто подтвердить, что мой сценарий надежен, и это что-то с DNSCMD, это действительно помогло бы мне лучше спать.

Спасибо, Дрю.


person Drew Tittle    schedule 08.12.2011    source источник


Ответы (1)


Когда вы входите

DnsCmd dnsservername /enumrecords zone.name node.st.name /Additional /continue> c:\DNSData\state_city_net.csv

в оболочке («ящик DOS») перенаправление (>) обеспечивается этой оболочкой. Ваш

objWSHShell.run "dnscmd /enumrecords zone.name node.st.name /additional> c:\DNSData\state_city_net.csv"

просто запускает процесс и не может выполнить перенаправление. Измените свою строку на

objWSHShell.run "%comspec% /c dnscmd /enumrecords zone.name node.st.name /additional> c:\DNSData\state_city_net.csv"

и подумайте о (отсутствует) /продолжить. Для (одиночного) тестирования вы можете изменить /c (закрыть, когда закончите) на /k (оставить открытым). Возможно, хорошей идеей будет перечитать (использовать?) все три параметра метода .Run и обратить внимание на возвращаемое значение.

person Ekkehard.Horner    schedule 08.12.2011
comment
Большое спасибо, вы действительно спасли мой рассудок! Я смог заставить его работать. Цикл не будет переходить к следующему элементу массива, пока я не удалю %comspec% /c из команды DNSCMD и не запущу ее как: objWSHShell.Run %comspec% /c & QComm & ,1,True - person Drew Tittle; 09.12.2011