Powershell:为什么System.Net.WebClient在同一主机

时间:2016-10-27 14:11:37

标签: powershell webclient powershell-v4.0

我创建了一个Powershell脚本来检查一堆URL。下面是使用WebClient逐个读取url列表的代码片段。

try {
    $log.debugFormat("Now checking endpoint={0}", $checkUrl)
    $wc.OpenRead($checkUrl)
    $log.infoFormat("guid={0} loop={1} endpoint={2} status=success", ($guid, $i, $checkUrl))
} catch [System.Net.WebException] {
    $log.errorFormat("guid={0} Could not connect to {1}", ($guid, $checkUrl))
    $ErrorMessage = $_.Exception.Message
    $log.errorFormat("{0}", $ErrorMessage)

奇怪的是,我提供的每一台主机每三次尝试就会超时。首先,我花了几个小时对网络服务器配置进行故障排除,以便现在意识到Webclient本身在第三次尝试连接到同一主机时会以某种方式超时。

我尝试添加$wc.Dispose()并尝试每次在循环$wc = New-Object System.Net.WebClient中创建对象,但没有帮助。

版本为Powershell -Command "Write-Host $psversiontable.psversion" 4.0,在Windows 2012上。

1 个答案:

答案 0 :(得分:2)

您需要关闭流,例如:

$stream = $wc.OpenRead($checkUrl)
$stream.Close()

处置WebClient也是个好主意