我正在尝试编写PowerShell脚本以ping通CSV文件中的每个IP地址4次。 我知道此脚本有很多问题,我正在学习和学习。 我遇到的一个问题是,当我运行脚本时,$ iplist变量将使用第一个变量,然后在列表中运行。 我认为这与数组和import-Csv有关,但是我无法弄清楚它或将其破坏得足够好以获取线索。
谢谢
出于安全考虑,我省略了完整的目标位置
$iplist = @(Import-Csv "Book1.csv")
Write-Host $iplist
ForEach ($Data in $iplist)
{
Test-Connection $Data | Out-File Bookx.txt
}
当$ iplist的内容为Write-Host时,将显示以下内容: @ {151.171.77.24 = 151.171.175.132} @ {151.171.77.24 = 151.171.175.131}
有几十个都具有相同的151.171.77.24 = 请注意,151.171.77.24是Book1.csv中的第一个IP
答案 0 :(得分:0)
鉴于@{}
应该是@{key=value}
,我假设您在CSV文件中没有标题。试试这个:
$iplist = import-csv Book1.csv -Header 'test'
ForEach ($Data in $iplist)
{
Test-Connection $Data.test | Out-File Bookx.txt -Append
}
基本上,CSV文件是网格,有点像2D数组。每列都需要一些键来定义它。您可以这样处理这些字段:$Data.column1
,$Data.column2
。即使您只有一列,您仍然必须遵守这些规则。在这种情况下,您的第一个IP地址被设置为列标题,这就是为什么看到@{ip=ip}
的原因。
添加-Header
开关使您无需修改文件即可寻址列。基本上,假设在导入文件之前,它会在第一列中临时添加标题。
如果确定只有一列,则也可以将文件视为纯文本。例如,您可以执行以下操作:
Get-Content file.csv | % {Test-Connection $_}
Get-Content
将创建一个数组,每个项目都是一行。然后,您可以执行以下操作:对于每行,用当前行的IP test-connection
。
要包含故障,我将尝试实现如下所示的方法:https://stackoverflow.com/a/51690032/4868262基本上,根据命令的成功设置状态字段,从而使您可以查看输出中的故障。
希望这对您有帮助!