更新日:2019/06/11
複数の IP アドレスに同時に PING を送信するサンプルコードを紹介します。ネットワークアドレスにどれだけの機器が存在するか確認するときに使用してください。(もちろん Windows Firewall や OSの設定で PINGに応答しない場合は、応答しません)
1 アドレスごとに順番に送信するととても時間がかかるので同時に実行しています。しかし多数のアドレスに一気に送信するのも問題あるため、この例では同時実行を10アドレスに限定しています。
powershell でマルチスレッドを実行するために workflow と foreach -parallel を使用しています。
(注意)以下のエラーが発生する場合は、コマンドプロンプト及び Powershell を64ビットで実行してください。
Windows PowerShell ワークフローは Windows PowerShell x86 ベースのコンソールでサポートされていません。Windows PowerShell
x64 ベースのコンソールを開いて再試行してください。以下は確認するコマンドです。またShellExecute でコールすると 32ビットコマンドプロンプトで開かれるため、このエラーが出るようです。
PS > $os = Get-WmiObject -Class Win32_OperatingSystem
PS > $os.
64 ビット
同時実行数を限定するには-throttlelimit オプションを使用します。
サンプルコード:
workflow pingall {
foreach -parallel -throttlelimit 10 ($a in 1..254) {
ping -n 1 192.168.11.$a
}
}
pingall
実行結果:
192.168.11.10 に ping を送信しています 32 バイトのデータ:
192.168.11.8 に ping を送信しています 32 バイトのデータ:
192.168.11.9 に ping を送信しています 32 バイトのデータ:
192.168.11.7 に ping を送信しています 32 バイトのデータ:
192.168.11.7 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.11.7 の ping 統計:
パケット数: 送信 = 1、受信 = 1、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
<以下省略>
[Powershell FAQ トップへ]
[FAQ CENTER トップ]
本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。) Copyright(c) tooljp.com 2007-2018