我是PowerShell的新手,已经面临一个巨大的挑战。 目标是读取csv文件。该文件的每一行都是一个带有绑定参数的字符串,如:
“WEBSITE1”,“116.167.74.172:443:www.xyz.com
116.167.74.174:443:www.xyz.com““Website2”,“:80:www.xyz.com 116.167.74.172:80:”
“Website3”,“116.167.75.155:443:116.167.75.163:443:”
“Website4”, “:80:”
要使用的命令是:
New-WebBinding -Name "Default Web Site" -IPAddress "*" -Port 80 -HostHeader TestSite
问题是:如何读取一个字符串并将其分为3个参数: IP ,端口和 HostHeader ,即使我没有指定所有3个参数?
答案 0 :(得分: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