次のコードは機能しますが、より効率的なスクリプトの記述方法があったかどうか、ループを使用するかどうか、またはこれがそのようなスクリプトを記述する正しい方法であるかどうかを知りたいです。ループ ステートメントを使用しようとしたときに発生した問題は、$Dialog "OK" をループに入れ、IP アドレスがまだ有効でない場合にループバックできるようにする方法が見つからないことでした。
スクリプトの考え方は、IP アドレス (の最初の 3 オクテット) を取得し、それが有効かどうか (つまり、0.0.0.0 または 169.254.* ではない) を変数として格納する前に確認することです。ダイアログ ボックスを表示して管理者に修正の機会を与えてから、もう一度確認するなどです。
function Check-IP
{
$IPSiteAddress = Get-IPAddress
if ($IPSiteAddress -like "0.*" -or $IPSiteAddress -like "169.254.*") {DialogBox-IP}
}
function Get-IPAddress
{
(Get-WmiObject Win32_NetworkAdapterConfiguration |
Where { $_.IPAddress } |
Select -Expand IPAddress).split('.')[0..2] -join '.'
}
function DialogBox-IP
{
$IPDialog = [System.Windows.Forms.MessageBox]::show( "This computer doesn't have a valid IP Address.
Please correct the IP Address and click OK, or click Cancel to exit.","No Network Connection",1)
if ($IPDialog -eq "OK") {Check-IP} else {exit}
}
Check-IP
$IPSiteAddress = Get-IPAddress
誰かがより良い解決策を持っている場合、または何か考えがある場合は、ぜひ聞いてください