Arrays .VBS以在节点名称数组上的for循环中运行DNSCMD/enumrecords。CLI显示好像我运行了DNSCMD/?

Arrays .VBS以在节点名称数组上的for循环中运行DNSCMD/enumrecords。CLI显示好像我运行了DNSCMD/?,arrays,vbscript,syntax-error,Arrays,Vbscript,Syntax Error,我正在尝试从Windows Server 2003 DNS服务器上的.vbs运行DNSCMD.exe/enumrecords,并将结果转储到DNS区域下每个节点名称的.csv文件中 我已将要对其运行命令的节点输入到一个数组中,并将文件名列表输入到另一个数组中 其思想是运行for循环,遍历每个节点名和文件名0-42,为每个节点名运行命令,并按顺序输出到每个文件名 Option Explicit Dim ncpArr, NODE, fnameArr, FILE, DNSCMD, objWSHShel

我正在尝试从Windows Server 2003 DNS服务器上的.vbs运行DNSCMD.exe/enumrecords,并将结果转储到DNS区域下每个节点名称的.csv文件中

我已将要对其运行命令的节点输入到一个数组中,并将文件名列表输入到另一个数组中

其思想是运行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/?顶部没有错误的说明

我真的很想知道是否不能使用.vbs运行DNSCMD/enumrecords。正如您可以从注释掉的部分中看到的,我尝试了一些方法来证明语法是正确的。当我回显循环的输出时,我可以在DNS服务器上的命令行中输入确切的语法,它就可以工作了

如果有人能偷看一下我上面的内容,告诉我为什么我运行脚本时它会这样做,或者你甚至可以确认我的脚本是正确的,并且它与DNSCMD有关,这真的会帮助我睡得更好

谢谢 输入时绘制

DnsCmd dnsservername /enumrecords zone.name node.st.name /Additional /continue> c:\DNSData\state_city_net.csv
在shell“DOS框”中,重定向>由该shell提供。你的

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 close更改为/k keep open。可能在重新阅读有关使用的信息?.Run方法的所有三个参数以及注意返回值可能是一个好主意。

非常感谢您让我保持理智!我能让它工作。在我从DNSCMD命令中删除%comspec%/c并以如下方式运行它之前,循环不会跳转到数组中的下一项:objWSHShell.Run%comspec%/c&QComm&,1,True