Powershell 这对循环比函数更有效吗?

Powershell 这对循环比函数更有效吗?,powershell,Powershell,下面的代码可以工作,但我想知道是否有更有效的方法来编写脚本,可能是通过使用循环,或者这是编写这样一个脚本的正确方法?我在尝试使用loop语句时遇到的问题是,我无法解决如何将$Dialog“OK”放入一个循环中,如果IP地址仍然无效,它可以在该循环中返回到自身 脚本的思想是在将IP地址存储为变量之前获取IP地址(前三个八位字节),并查看它是否有效(即不是0.0.0.0或169.254.*),如果无效,则抛出一个对话框,让管理员有机会更正它,然后再次检查,依此类推 function Check-IP

下面的代码可以工作,但我想知道是否有更有效的方法来编写脚本,可能是通过使用循环,或者这是编写这样一个脚本的正确方法?我在尝试使用loop语句时遇到的问题是,我无法解决如何将$Dialog“OK”放入一个循环中,如果IP地址仍然无效,它可以在该循环中返回到自身

脚本的思想是在将IP地址存储为变量之前获取IP地址(前三个八位字节),并查看它是否有效(即不是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
如果有人有更好的解决方案,或者有什么想法,我很乐意听听

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
}