powershell - 将 CSV 导入数组,然后通过 ForEach 循环运行每个 IP
问题描述
我正在尝试编写一个 PowerShell 脚本来从 CSV 文件 ping 每个 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
解决方案
鉴于@{}
应该是@{key=value}
,我假设您在 CSV 文件中没有标题。尝试这个:
$iplist = import-csv Book1.csv -Header 'test'
ForEach ($Data in $iplist)
{
Test-Connection $Data.test | Out-File Bookx.txt -Append
}
基本上,CSV 文件是网格,有点像二维数组。每列都需要一些键来定义它。您可以像这样处理这些字段:$Data.column1
, $Data.column2
. 即使您只有一列,您仍然必须遵循这些规则。在这种情况下,您的第一个 IP 地址被设置为列标题,这就是您看到@{ip=ip}
.
添加-Header
开关允许您在不修改文件的情况下处理您的列。基本上,假设它在您导入文件之前暂时将标题添加到第一列。
如果您确定只有一列,您也可以将文件视为纯文本。例如,您可以执行以下操作:
Get-Content file.csv | % {Test-Connection $_}
Get-Content
将创建一个数组,每个项目都是一行。然后您可以:对于每一行,test-connection
使用当前行的 IP。
要包括失败,我会尝试实现如下所示:https ://stackoverflow.com/a/51690032/4868262基本上,根据命令的成功设置状态字段,从而允许您在输出中查看失败。
希望这有帮助!
推荐阅读
- c# - Azure.Messaging.ServiceBus:我应该在处置时从 ServiceBusProcessor 中删除 ProcessMessageAsync 处理程序吗?
- c# - post方法中的验证
- reactjs - 如何使用 Internet Explorer 11 访问本地网站?
- python - pywinauto 访问嵌套的子菜单
- hibernate - 将 Hibernate3 迁移到 Hibernate5,Formatter 类
- visual-studio-code - 带有“\”或“\\”的差异路径
- angular - 在移动设备上滚动时,角度触发器中的 ngx-slider 会不必要地触发
- jmx - 如何为咖啡因缓存激活 JMX
- python - 在 PySpark 中展开 json 列 - 架构问题 - AttributeError: 'tuple' object has no attribute 'name'
- c# - 如何停止 WPF 中的后台工作人员?