No geral, eu faria os seguintes ajustes abaixo. Algumas coisas que mudei por aí:
- altere o prompt da sua credencial para uma linha, pois
Get-Credential
pode fornecer uma mensagem - Criamos a tabela como
psobject
, o que facilita muito o trabalho e a referência a colunas para definir valores. - Ao usar o
psobject
, elimina a necessidade de indexar na matriz (por exemplo, usandocolumn[0]
) - Eu adicionei no teste se o computador estava na rede antes de tentar se conectar para obter informações (apenas boa prática).
Quando quiser adicionar mais colunas à sua tabela, basta expandir a variável $props
com suas colunas e preenchê-la no seu loop foreach
.
Saída deste script apenas com o meu computador local:
Emseguida,bastamostraroqueseráexibidoseeuapenasConvertTo-Csv
:
$UserCred=(Get-Credential-Message"Enter username")
$props = [ordered]@{NAME="";IP_ADDR="";MAC_ADDR=""}
$ComputerInfo = New-Object psobject -property $props
ForEach ($Computer in $Computers) {
if (Test-Connection $computer) {
$wmiquery = get-wmiobject win32_networkadapterconfiguration -computer $Computer -filter "IPEnabled='True'" -Credential $Cred
$ComputerInfo.NAME = $computer
$ComputerInfo.IP_ADDR = $wmiquery.IPAddress[0]
$ComputerInfo.MAC_ADDR = $wmiquery.MACAddress
}
else{
Write-Warning "$($computer) not found on the network"
}
}
$ComputerInfo
EDITAR
Uma coisa é apenas acrescentar que você verá uma diferença com o seu $computerinfo
versus o meu acima é o TypeName. Se você canalizar para Get-Member
, seu objeto retornará como System.Collections.Hashtable
, onde o meu retornará como System.Management.Automation.PSCustomObject
. O PSCustomObject
retornará cada coluna da tabela como um tipo NoteProperty
que você pode usar no seu script à medida que você cria nele (por exemplo, consultando o domínio para obter informações sobre o computador).