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

サーバーがオフラインの場合 (名前は解決されていますが、ping はありません)、test-path からの呼び出しは返されません (スクリプト時間に関する私の偏狭な理解では)。失敗するには時間がかかりすぎます。最後に、バターでトーストを作った後、コーヒーが見つからず、コーヒーを買いに行き、水が再び沸騰するのを待って、トーストが冷えているのを見つけた後、待望の結果 False が得られました。画面に戻って、すぐそこに表示されるのを確認します...

従来の DOS ディレクトリを使用した同じパスは、現実的な時間の経過後に期待どおりに失敗します。

dir "\\SERVER\Share\Folder"

「ネットワーク パスが見つかりませんでした」と表示されます。3分以内に!

PS のこの動作は、私のスクリプトを本当に壊します。

正確には

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

私にくれた

False
595.2214875

ヒント: SERVER を解決するローカル ネット オフライン PC 名に置き換えます。

ああ、質問です: 1) これにどのように対処しますか? 2) 一体何が問題なのですか?

更新: オフライン IP アドレスを使用する場合、タイミングは同じです。DNSはゲームから外れています。

Update2: 同じように無駄な時間を過ごしている人はいますか? 64 ビットの W2k8R2 サーバーで試してみましたが、問題はありません。コールは最大 30 秒で返されます。私の問題は、32 ビットの Windows XP PC にあります。

ありがとう、ロブ

4

1 に答える 1

5

このシナリオをシミュレートすることはできませんが、提案があります。最初にサーバーに ping を実行してから、接続を試みます。

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

このコマンドは、ping が成功すると 0 を返すため、条件ステートメントで使用できます。

于 2013-02-18T15:47:18.797 に答える