Powershell 在异常时继续执行脚本
Powershell continue script on Exception
我是一个powershell新手。我写了这个小脚本来查找我的服务器列表的 DNS 条目。当我使用多个计算机名运行时,它工作正常,没有任何问题。当它处理一个无效的主机名时,它会被 catch 块捕获,但脚本只是终止而不是继续处理下一个主机名。我在这里做错了什么?
function Resolve-Hostname
{
[CmdletBinding()]
Param
(
# One or more compternames
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
[string[]]$Computername
)
Begin
{
$dns = Get-WmiObject win32_networkadapterconfiguration | Where-Object {$_.DNSHostname -ne $null} | Select-Object DNS
Write-verbose "DNS suffix order used -"
$DNSDomainSuffixSearchOrder = $dns | Select-Object DNSDomainSuffixSearchOrder
Write-Verbose ( $DNSDomainSuffixSearchOrder | ft -AutoSize | Out-String )
Write-Verbose "DNS Servers order used -"
$DNSServerSearchOrder = $dns | Select-Object -ExpandProperty DNSServerSearchOrder
Write-Verbose ($DNSServerSearchOrder | Out-String )
}
Process
{
try
{
foreach ($computer in $Computername)
{
$dnsreport = [System.Net.Dns]::Resolve("$computer")
$dns = [pscustomobject]@{
Hostname = $computer
DNS_Suffix = $dnsreport.HostName.Split('.',2)[1]
DNSHostname = $dnsreport.HostName
IPAddress = $dnsreport.AddressList.ipaddresstostring -join ", "
Alias = $dnsreport.Aliases
}
$dns
}
}
catch
{
$dns = [pscustomobject]@{
Hostname = $computer
DNS_Suffix = '-'
DNSHostname = '-'
IPAddress = '-'
Alias = '-'
}
$dns
}
}
End
{
}
}
你的foreach
在try
块内,所以当异常发生时,它会转到循环外的catch
块。将 try
和 catch
都放在 foreach
循环中。
我是一个powershell新手。我写了这个小脚本来查找我的服务器列表的 DNS 条目。当我使用多个计算机名运行时,它工作正常,没有任何问题。当它处理一个无效的主机名时,它会被 catch 块捕获,但脚本只是终止而不是继续处理下一个主机名。我在这里做错了什么?
function Resolve-Hostname
{
[CmdletBinding()]
Param
(
# One or more compternames
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
[string[]]$Computername
)
Begin
{
$dns = Get-WmiObject win32_networkadapterconfiguration | Where-Object {$_.DNSHostname -ne $null} | Select-Object DNS
Write-verbose "DNS suffix order used -"
$DNSDomainSuffixSearchOrder = $dns | Select-Object DNSDomainSuffixSearchOrder
Write-Verbose ( $DNSDomainSuffixSearchOrder | ft -AutoSize | Out-String )
Write-Verbose "DNS Servers order used -"
$DNSServerSearchOrder = $dns | Select-Object -ExpandProperty DNSServerSearchOrder
Write-Verbose ($DNSServerSearchOrder | Out-String )
}
Process
{
try
{
foreach ($computer in $Computername)
{
$dnsreport = [System.Net.Dns]::Resolve("$computer")
$dns = [pscustomobject]@{
Hostname = $computer
DNS_Suffix = $dnsreport.HostName.Split('.',2)[1]
DNSHostname = $dnsreport.HostName
IPAddress = $dnsreport.AddressList.ipaddresstostring -join ", "
Alias = $dnsreport.Aliases
}
$dns
}
}
catch
{
$dns = [pscustomobject]@{
Hostname = $computer
DNS_Suffix = '-'
DNSHostname = '-'
IPAddress = '-'
Alias = '-'
}
$dns
}
}
End
{
}
}
你的foreach
在try
块内,所以当异常发生时,它会转到循环外的catch
块。将 try
和 catch
都放在 foreach
循环中。