我有一个来自内部网站报告的动态服务器名称列表。我希望让PowerShell从URL获取此列表,然后将其用作我可以循环的变量。
目前,这就是我所拥有的。
$servers = Invoke-WebRequest -URI http://myserver/hostgroup.php?hostgroup=test | Select -expand Content
这会返回一个简单的列表,例如"SERVER1","SERVER2","SERVER3",
。我想遍历此列表以运行报告。这是一个简单的foreach作为起点(不起作用)。
foreach ($s in $servers) {
if(Test-Connection -Quiet $s -Count 1) {
Write-Host "Online"
} else {
# connection test failed
Write-Host "`a`n" $s "is unreachable" -ForegroundColor Red
}
}
我收到的输出看起来像是使用整个字符串作为服务器名称,并没有将其分解。
这是输出。
"SERVER1","SERVER2","SERVER3", is unreachable
答案 0 :(得分:4)
除了将单个字符串拆分为字符串数组之外,还需要修剪双引号,例如:
$result = ($servers = Invoke-WebRequest -URI http://myserver/hostgroup.php?hostgroup=test).Content
$servers = $result -split ',' -replace '"','' | Where {$_ -notmatch '^\s*$'}
答案 1 :(得分:2)
如果$ servers包含单个字符串,只需将其拆分:
$servers = $servers -split ','
这将返回一个数组,该数组可与Foreach语句一起使用。