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

Я пытаюсь запустить 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 / ?. Я только смог взглянуть на это, выполнив цикл выше и нажав Pause / Break в нужное время. Не уверен, можно ли оставить окно командной строки открытым, чтобы показать какие-либо ошибки

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

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

Если бы ЛЮБОЙ мог просто посмотреть на то, что у меня есть выше, и сказать мне, почему, когда я запускаю свой сценарий, он делает это, или если бы вы могли даже просто подтвердить, что мои сценарии верны и что-то с DNSCMD, это действительно помогло бы мне лучше спать.

Спасибо Drew

1 Ответ

0 голосов
/ 09 декабря 2011

при вводе

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

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

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 и обратить внимание на возвращаемое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...