PowerShell的操作挂起过长

PowerShell的操作挂起过长

问题描述:

$to="\\SERVER\Share\Folder" 
if(!(test-path $to)) 
{ 
    ... 
} 

如果服务器脱机(解析的名称,但没有坪),从测试路径调用不会返回(在剧本时我的狭隘理解)。它只需要很长时间才能失败。最后,我得到了预期的结果假黄油敬酒后,发现没有咖啡,跑出去买一些,等待水再次沸腾,并找到我的烤面包冷。返回到屏幕上看到它出现在那里......PowerShell的操作挂起过长

与经典的DOS目录相同的路径一些现实的时间后,如预期失败:

dir "\\SERVER\Share\Folder" 

说“网络路径没有被发现。”在不到3分钟内!

PS的这种行为确实打破了我的脚本。

准确地说

$t0 = get-date; test-path "\\SERVER\Share\Folder"; $t1 = get-date; ($t1-$t0).TotalSeconds 

给我

False 
595.2214875 

提示:更换服务器以解决本地网络离线PC名称

啊,问题是:1)你如何应对有了这个? 2)那里的麻烦到底是什么?

更新:使用脱机IP地址时的定时相同。 DNS不在游戏中。

更新2:我想知道,有没有人遇到同样的浪费时间?尝试在64位W2k8R2服务器上,这里没有问题。通话最多30秒内返回。我的问题是在32位Windows XP PC上。

谢谢,罗布

+0

当我尝试它时,最后一个样品在6秒内运行。如果这是在企业中完成的,那么问题很可能是由于DNS服务器上的递归(转发器)(或者如果有的话,则为WINS)。如果您的DNS服务器找不到名称,它很可能会要求它是转发器。如果您使用像“server.company.fqdn.domain”这样的FQDN,速度更快吗?通过使用FQDN,你会找到正确的区域快,而且不会使用代理,这可能会加速它 – 2013-02-18 15:47:42

+0

@Graimer提供FQDN不帮助这里 – 2013-02-18 15:57:22

+0

它只是一个未经测试的想法(这里没有ATM实验室),但可你解释为什么100%不可能改善时间?如果他在自己的脚本中使用了FQDN(无论如何这是个好习惯),他会发现正确的DNS区域并更快地得到一个不存在的错误。我不是说这是更好然后'ping',但它仍然应该提高它 – 2013-02-18 16:03:45

我无法模拟这种情况,但我有一个建议。尝试先ping服务器,然后尝试建立连接。

$(Test-Connection -ComputerName SERVER -ErrorAction SilentlyContinue -Count 1).StatusCode 

此命令将返回0,如果ping成功,这样你就可以在条件语句中使用它。

+0

感谢,以及它会给我的速度(+1),但事情变得复杂化和删除的灵活性。它不必是UNC路径,而且我的配置中有数百台服务器可以使用。我可以使用regexp来提取计算机名称。另外,任何第二季度的答案我稍后添加?让我们看看是否有更多的意见。亲切的问候 – Rbjz 2013-02-18 16:04:03

+2

你也可以用它来提取servername:'$ server =“\\ SERVER \ Share \ Folder”; ([uri] $服务器)。主机'返回'服务器' – 2013-02-18 16:06:26

+0

Q2是一个困难的。真的很难说这里有什么确切的问题。这可能与您的特定环境设置有关。尽管您的测试表明否则,我认为@Graimer诊断在逻辑上听起来正确。 如果你可以在网络之外运行一些测试并观察时间,那将是非常有益的。 – 2013-02-18 16:17:10