Acho que o seu erro está na origem de $pingdaddress = (Test-Connection -ComputerName $thisservername -Count 1 -ErrorAction SilentlyContinue -Verbose).IPV4Address.IPAddressToString
. Se o nome do servidor não puder ser resolvido, o objeto de conexão (bem, objeto Win32_PingStatus) retornado por Test-Connection
será $null
. Você está tentando acessar uma propriedade em um objeto nulo, o que não é permitido.
Eu dividiria a parte "sucesso" em sua própria coluna. Você pode fazer isso adicionando outra coluna ao seu CSV, por exemplo: NameMatch
ou IPMatch
, o que fizer mais sentido para você. Dessa forma, você pode acessá-lo como uma propriedade em seu loop $server.NameMatch
e filtrar / classificar os dados posteriormente.
function Test-ServerNameMapping
{
[cmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_})]
[String]
$Path
)
$serverList = Import-Csv -Path $Path
foreach ($server in $serverList)
{
Write-Verbose "Testing: $($server.Name), $($server.IPAddress)"
$connectionObject = (Test-Connection -ComputerName $server.Name -Count 1 -ErrorAction SilentlyContinue)
if (-not $connectionObject)
{
Write-Verbose "Failed to resolve $($server.Name) to an IP address."
$server.namematch = $false
}
else
{
$resolvedAddress = $connectionObject.IPV4Address.ToString()
Write-Verbose "Resolved $($server.Name) to $resolvedAddress"
if ($resolvedAddress -eq $server.IPAddress)
{
Write-Verbose "$($server.IPAddress) matches found address of $resolvedAddress"
$server.namematch = $true
}
else
{
Write-Verbose "$($server.IPAddress) does not equal found address of $resolvedAddress"
$server.namematch = $false
}
}
}
$serverList | Export-Csv -Path $Path -NoTypeInformation -Force
}
Então, se você quiser produzir um relatório mais tarde, poderá fazer algo como:
$problemServers = Import-Csv -Path c:\example.csv | ? NameMatch -eq $false
Exemplo.csv:
Name,IPAddress,NameMatch
server1,10.0.0.1,"True"
server2,10.0.0.2,
server3,10.0.0.3,"False"
Quando você executa o script pela primeira vez, a coluna NameMatch pode estar vazia (como é com o server2) e o script a preencherá.