1

我是 PowerShell 新手,已经面临巨大挑战。目标是读取 csv 文件。文件的每一行都是一个带有绑定参数的字符串,例如:

"网站 1","116.167.74.172:443:www.xyz.com
116.167.74.174:443:www.xyz.com"

"网站 2",":80:www.xyz.com 116.167.74.172:80:"

"网站 3","116.167.75.155:443: 116.167.75.163:443:"

"网站 4",":80:"

要使用的命令是:

New-WebBinding -Name "Default Web Site" -IPAddress "*" -Port 80 -HostHeader TestSite

问题是:如何读取一个字符串并将其分解为 3 个参数:IPPortHostHeader,即使我没有指定所有 3 个参数?

4

1 回答 1

0

您可以使用带有命名捕获组的正则表达式来简化此操作。让我建议你总是把端口放在 ip 地址的右边,如果有一个 ip 地址的话。然后,假设文件的给定行当前位于 $strLine 中,则以下内容将执行您要查找的操作。

$pattern = '"[^"]+","(?<ip_address>(?:\d{1,3}\.){3}\d{1,3})?:?(?<port>\d{1,5})?:?(?<hostheader>.*)?'  
$strLine -match $pattern  
$ipaddress = if ($matches.ContainsKey('ip_address')) { $matches['ip_address'] } else { "*" }  
$port = if ($matches.ContainsKey('port')) { $matches['port'] } else { "80" }  
$hostheader = if ($matches.ContainsKey('hostheader')) { $matches['hostheader'] } else { "TestSite" }  

New-WebBinding -Name "Default Web Site" -IPAddress $ipaddress -Port $port -HostHeader $hostheader 
于 2012-12-14T22:50:46.443 回答