以下代码有效,但我有兴趣知道是否有更有效的编写脚本的方法,可能是通过使用循环,或者这是编写这样一个脚本的正确方法?尝试使用循环语句时遇到的问题是我无法弄清楚如何将$ Dialog“OK”放入循环中,然后如果IP地址仍然无效,它就可以循环回自身。
脚本的想法是获取(前三个八位字节)IP地址,并在将其存储为变量之前查看它是否有效(即不是0.0.0.0或169.254。*),如果它不是' t有效抛出一个对话框,让管理员有机会纠正它,然后再次检查,等等。
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
如果有人有更好的解决方案或任何想法,我会很乐意听到他们
答案 0 :(得分:1)
function Check-IP
{
param ($IPSiteAddress)
return !($IPSiteAddress -like "0.*" -or $IPSiteAddress -like "169.254.*")
}
function Get-IPAddress
{
(Get-WmiObject Win32_NetworkAdapterConfiguration | Where { $_.IPAddress } | Select -Expand IPAddress).split('.')[0..2] -join '.'
}
while (!(Check-IP Get-IPAddress))
{
DialogBox-IP
}