2012-11-20 69 views
0

下面的代碼有效,但我很想知道是否有更有效的腳本編寫方式,可能是使用循環,或者這是編寫這樣一個腳本的正確方法?我試圖使用循環語句時遇到的問題是,我無法弄清楚如何將$ Dialog「OK」放入循環中,如果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 

如果任何人有一個更好的解決方案,或有什麼想法,我一定會喜歡聽到他們

回答

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 
} 
+0

偉大的工作。謝謝 – idarryl

相關問題