我创建了一个powershell脚本,它获取文本文件的内容以形成一个数组,遍历列表并在列表中的每个服务器上执行nslookup,然后我需要它输出到txt文件。我可以让它做所有事情,除了将数据输出到输出流和txt文件。
我会告诉你我到目前为止所做的一些代码:)
$serverlist = Get-Content'c:\users\username\desktop\serverlist.txt'
我将它传递给for循环以尝试迭代列表中的每个项目并将其传递给nslookup,以便为列表中的每个服务器执行dns查询。
$serverlist = Get-Content'c:\users\username\desktop\serverlist.txt'
foreach($server in $serverlist)
{
nslookup $server
}
这实际上在powershell客户端中运行良好。问题是我完全无法通过循环打印到文本文件后,无法从控制台获取输出。
我正在处理大量的查找,这就是我处理这个脚本的原因。
我已经尝试过write-host
,我已经尝试了out-file
而我尝试了script > domainlist.txt
但没有用。
我怀疑它卡在数据流中并且不知道去哪里。
我甚至尝试过以下内容:
$serverlist = Get-Content'c:\users\username\desktop\serverlist.txt'
$domainlist = Out-file -path 'c:\users\username\desktop\domainlist.txt'
foreach($server in $serverlist)
{
nslookup $server
}
script > $domainlist.
我已经尝试通过isesteroids中的循环将其分解,这有很大帮助,但它并没有告诉我数据流可能会发生什么。
答案 0 :(得分:0)
直接输出到循环体内的文件:
foreach($server in $serverlist)
{
nslookup $server |Out-File C:\output.txt -Append
}
答案 1 :(得分:0)
PowerShell容易混淆地有两个不同的foreach
结构。您在上面使用了foreach ($var in $collection)
语句,并且有Foreach-Object
cmdlet。
# Statement foreach
foreach($server in $serverlist) {
nslookup $server
}
# Same loop using cmdlet foreach.
# The current item is stored in the special variable $_
$serverlist | Foreach-Object {
nslookup $_
}
您无法重定向输出的原因是语句foreach不会输出到PowerShell管道。 解决此问题的一种方法是切换到cmdlet foreach。
解决此问题的另一种方法是直接重定向nslookup
的输出,而不是使用>>
追加重定向运算符重定向整个循环。
del domainlist.txt
foreach($server in $serverlist) {
nslookup $server >> domainlist.txt
}
每次运行时,nslookup.exe
的输出都会添加到domainlist.txt
文件的末尾。
关于nslookup
的一个注释:在查找错误时,nslookup
命令会向stderr
流发送错误,而不是stdout
。要捕获这些错误,您需要使用2>&1
nslookup $server 2>&1 >>domainlist.txt
作为旁注:因为PowerShell是一种脚本语言,在换行符上有隐式语句中断,所以你应该养成将开头大括号放在行尾而不是下一行的习惯。如果你的第一行是某种完整的语句,你可能会很难调试问题,因为它没有绑定到下一行的scriptblock。