如何用PowerShell从起始IP生成连续IP段并导出为CSV?
PowerShell实现指定IP段生成并导出CSV
需求说明
- 读取起始IP列表(示例如下),自动过滤无效行:
Start IP 192.168.100.1 172.1.1.1 - 按规则生成连续IP段:
- 针对
192.168.100.1,生成从192.168.100.1到192.168.254.1的所有IP - 针对
172.1.1.1,生成从172.1.1.1到173.1.254.1的所有IP
- 针对
- 将最终结果导出为CSV文件
完整实现脚本
替换文件路径后即可直接运行:
# 定义输入文件路径和输出CSV路径 $ipFilePath = "c:\test\ip.txt" $outputCsvPath = "c:\test\generated_ips.csv" # 初始化存储生成IP的数组 $generatedIPs = @() # 逐行处理输入文件 foreach($line in Get-Content $ipFilePath) { # 跳过空行和非IP格式的行 if ($line -notmatch '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$') { continue } # 用正则拆分IP的四个八位组 $ipMatch = [regex]::Match($line, '^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$') [int]$octet1 = $ipMatch.Groups[1].Value [int]$octet2 = $ipMatch.Groups[2].Value [int]$octet3 = $ipMatch.Groups[3].Value [int]$octet4 = $ipMatch.Groups[4].Value # 按前缀匹配生成规则 if ($octet1 -eq 192 -and $octet2 -eq 168) { # 固定192.168.x.1,x从起始值递增到254 for ($i = $octet3; $i -le 254; $i++) { $generatedIPs += [PSCustomObject]@{ IPAddress = "$octet1.$octet2.$i.$octet4" } } } elseif ($octet1 -eq 172 -and $octet2 -eq 1) { # 第一阶段:172.1.x.1,x从起始值到254 for ($i = $octet3; $i -le 254; $i++) { $generatedIPs += [PSCustomObject]@{ IPAddress = "$octet1.$octet2.$i.$octet4" } } # 第二阶段:173.1.x.1,x从1到254 $newOctet1 = $octet1 + 1 for ($i = 1; $i -le 254; $i++) { $generatedIPs += [PSCustomObject]@{ IPAddress = "$newOctet1.$octet2.$i.$octet4" } } } } # 导出为CSV文件(-NoTypeInformation避免生成冗余类型行) $generatedIPs | Export-Csv -Path $outputCsvPath -NoTypeInformation -Encoding UTF8
关键逻辑说明
- IP有效性过滤:用正则
^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$精准匹配IP格式,自动跳过标题行和空行 - IP拆分与递增:通过正则拆分IP的四个字段,根据前缀判断生成规则,针对性递增对应字段
- CSV结构化导出:用
PSCustomObject封装IP数据,确保导出的CSV格式规范,可直接用表格工具打开
内容的提问来源于stack exchange,提问作者Roxx
相关产品推荐
相关产品推荐

