2

コンピュータに接続できるかどうかをすばやく実行できるコマンド (IF テスト) を探しています。1 つの if-test を実行し、合格した場合は、必要な情報を取得するために多数のコマンドを実行します。最初のテストが失敗した場合、コマンドは実行されません。それ以外の場合は、各テストで失敗する必要があり、長い時間がかかります。

次のコードは機能しますが、非常に遅く、コンピューターがネットワークに接続されていない場合、「GUI (応答なし)」が発生します。失敗した場合にすばやく確認できるものを探しています。

if (Test-Path "\\$PCNAME\c`$")
{
    # Slew of WMI commands go here.
}

ときどき大量のコンピューターのリストを照会しますが、それらの大部分がオフになっていると、上記のコマンドが完了するまでに非常に時間がかかります。

4

6 に答える 6

-1

これを行うには、次の 2 つの簡単な方法があります。

1 つはテスト接続です。

Test-Connection 192.168.0.2
Test-Connection -CompuetrName "SamsPC"

これは、ブール式として、または $? とともに使用できます。オペレーター:

if (Test-Connection 192.168.0.1) {
 do stuff
}

また

Test-Connection 192.168.0.1
if ($?) {
 Do Stuff
}

もう 1 つのアプローチでは、.NET クラスを使用します。

$Pinger = New-Object System.Net.NetworkInformation.Ping
$pResult = $Pinger.Send("192.168.0.1")

if ($pResult.Status -eq "Success") {
  Do stuff
}
于 2014-12-29T16:45:45.763 に答える
-2

これは事後のことだとわかっていますが、解決策を見つけました。接続をテストする if テストを探していましたが、失敗すると失敗するまでに長い時間がかかります。接続が確立されると、すぐに通過します。

$timeoutSeconds = 1 # set your timeout value here
$j = Start-Job -ScriptBlock {
    # your commands here, e.g.
    Test-Connection -ComputerName $args[0] -Count 1
} -ArgumentList $computer
#"job id = " + $j.id # report the job id as a diagnostic only
Wait-Job $j -Timeout $timeoutSeconds | out-null
if ($j.State -eq "Completed")
{
    #connection to PC has been verified and WMI commands can go here.
    $richtextbox1.Text = "Connection can be made to $computer"
}
elseif ($j.State -eq "Running")
{
    #After the timeout ($timeoutSeconds) has passed and the test is still running, I will assume the computer cannot be connected.
    $richtextbox1.Text = "Could not Connect to $computer"
}

このコードをどこから入手したのか正確にはわかりません。使用したと思います-バッチ/パワーシェルにタイムアウトを追加します

これが将来誰かに役立つことを願っています。

于 2015-03-03T17:53:22.133 に答える