What am I doing wrong?
O backtick 'é o caractere de continuação de linha, e o primeiro erro que você obtém de' expressão ausente após o operador unário 'parece ser o PowerShell não vendo a linha -Query como parte da linha anterior.
Possivelmente você está perdendo o 'no final da linha anterior em sua cópia do script, ou ele foi substituído por um apóstrofo por algum capricho de código / copiar / colar / código do editor, ou algo assim.
or what should I add/remove from the script to make it run?
Remova a maior parte, é complicado e feio e redundante para o que você deseja.
Por que ele está pesquisando Win32_NetworkAdapterConfiguration
coisas e chamando ints
? Isso é tão enganoso.
Por que está levando o IPAddress
, chamando-o de addr
, chamando-o de ip
e chamando-o de IP
?
Por que está levando o GatewayAddress
, chamando-o gw_addr
, depois gw
e, em seguida, Gateway
?
O teste para -eq $null
parece desnecessário, se você tentar usar foreach
em uma sequência vazia, ele funcionará como esperado (ignore-o).
Usando regexes para pegar endereços IPv4 em vez de endereços IPv6 - útil, mas waffly. Endereços IPv6 usam :
para delimitá-los, e os endereços IPv4 usam .
, portanto, se você se importar apenas com endereços IPv4, basta procurar por .
no endereço.
Por que copiar o endereço, criar uma lista de resultados e, em seguida, selecionar tudo o que está fora da lista, quando você pode simplesmente imprimir o endereço como o encontrou?
Você ainda se importa com o endereço do gateway?
Por que testar se o endereço IP está vazio quando você está em um bloco que está processando o endereço IP neste ponto, portanto, não pode ser nulo neste ponto?
Por que a coisa toda é uma corrente usando get-computers % { code } | select results
, quando isso não ajuda você?
Recortei um pouco e renomei as coisas, chegando à seguinte estrutura mais clara e simples:
- Configuração.
- Obtenha os computadores
- Para cada computador, obtenha as interfaces de rede com endereços estáticos.
- Para cada interface, obtenha os endereços IP.
- Para cada endereço IP, identifique os IPv4 procurando
.
-
Exibe o nome do computador e este endereço IPv4.
param ( [string]$LDAPFilter = '(name=*)' ) $wmiQuery = "select IPAddress, DefaultIPGateway from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE and DHCPEnabled=FALSE" $computers = (Get-ADComputer -LDAPFilter $LDAPFilter) foreach ($computer in $computers) { $networkAdapters = (Get-WmiObject -ErrorAction SilentlyContinue -ComputerName $computer.DNSHostName -Query $wmiQuery) foreach ($networkAdapter in $networkAdapters) { foreach ($ip in $networkAdapter.IPAddress) { if ($ip -match "\.") { Write-Host $($computer.DNSHostName), $ip } } } }
Eu não testei isso completamente, mas funciona contra um computador para mostrar apenas o nome e os IPs estáticos.
N.B. ele não mostrará nenhum nome de computador que ele não possa contatar, mas nem o original.