2016-06-07 29 views
2

我正在嘗試製作一個腳本來解析一長串域名到IP地址。其中一些沒有定義,我需要捕捉錯誤,並返回一個「空白值」。在下面的腳本中,我嘗試使用基本的If/Then來做這件事,但我仍然得到一個羅嗦的錯誤(在底部),而不是一個空白值。任何想法如何解決這個問題?對此,我真的非常感激!在PowerShell中捕獲錯誤並重寫輸出

----- ----- SCRIPT

$names = Get-Content C:\temp\names.txt 
ForEach ($name in $names) { 
$ipAddress = [System.Net.Dns]::GetHostAddresses("$name")[0].IPAddressToString; 
if ($ipAddress) { 
    Write-Host $name"-"$ipAddress 
    } 
else { 
    Write-Host $name"-" 
    } 
} 

----輸出/錯誤----

mydomain.com-1.2.3.4 
yourdomain.com-4.3.2.1 
Exception calling "GetHostAddresses" with "1" argument(s): "The requested name is valid, but no data of the requested type was found" 
anotherdomain.com-5.5.5.5 

----我想見-----

mydomain.com-1.2.3.4 
yourdomain.com-4.3.2.1 
NOTDEFINEDDOMAIN.tld- 
anotherdomain.com-5.5.5.5 

----這裏是一個工作的解決方案 - 謝謝!----

$names = Get-Content C:\temp\names.txt 

ForEach ($name in $names) { 
Try { 
    $ipAddress = [System.Net.Dns]::GetHostAddresses("$name")[0].IPAddressToString; 
    Write-Host $name"-"$ipAddress 
    } 
Catch { 
    Write-Host $name"-" 
    } 
} 
+0

這是奇怪的。我不能重現調用'[System.Net.Dns] :: GetHostAddresses(「doesnotexit」)[0] .IPAddressToString;'你使用的是什麼版本的powershell? –

+0

嗨尼克 - 我正在使用版本5.我跑了上面,並再次得到錯誤... –

+0

甚至陌生人!我也在版本5中。嗯... –

回答

2

更新的回答:

追趕PowerShell中的錯誤和重寫輸出

我需要捕獲錯誤並只返回一個「空值

使用的try/catch :

$names = Get-Content C:\temp\names.txt 
ForEach ($name in $names) 
{ 
    try 
    { 
     $ipAddress = [System.Net.Dns]::GetHostAddresses("$name")[0].IPAddressToString; 
     Write-Host $name"-"$ipAddress 
    } 
    catch 
    { 
     Write-Host $name"-" 
     $_.Exception.Message # <- Check this to read and rewrite exception message 
    } 
} 


----我想看到-----

如果你想 - 你可以操縱異常消息等作爲字符串 - 這是一線得到消息在catch塊:

$_.Exception.Message


其他方式來獲得有關錯誤信息是$Error變量(它的陣列錯誤/列表)...


的更多信息:


更新2:

我忘了一件事 - 嘗試/捕捉工作只與終止錯誤。 我不知道類型的錯誤,你的情況(因爲不能複製),但有時你可能要添加到您的命令:

-Error Stop

+0

hehe ...那麼問題是什麼?據我瞭解 - 主題是'捕捉錯誤在Powershell和重寫輸出',問題是'我需要趕上錯誤,只是返回一個「空白值」......所以我認爲答案很簡單......'使用try/chatch'。但是我已經更新了我的答案給一些例子和鏈接 - 我希望這可以幫到更多 –

+0

謝謝Lukasz。讀完一小段後,我意識到try/catch是多麼簡單,編輯原始問題,再次感謝! –