it-swarm-pt.tech

Powershell: Obter nome do host FQDN

Quero recuperar o nome do FQDN do servidor Windows via script PowerShell. Eu encontrei 2 solução até agora:

$server =  Invoke-Command -ScriptBlock {hostname}

A linha acima imprimirá apenas o nome abreviado do servidor

$sysinfo = Get-WmiObject -Class Win32_ComputerSystem
$server = “{0}.{1}” -f $sysinfo.Name, $sysinfo.Domain

Acima das duas linhas, o FQDN me dará um código realmente desagradável para recuperar apenas o nome do host :(

Então, minha pergunta é: existe uma maneira mais fácil de obter o FQDN no PowerShell. Eu sou um codificador bash/Perl e peguei recentemente o powershell ... então acho difícil.

Obrigado.

49
slayedbylucifer

Que tal: "$env:computername.$env:userdnsdomain"

Na verdade, apenas funciona se o usuário estiver conectado a um domínio (ou seja, sem contas locais), conectado ao mesmo domínio que o servidor e não funcionar com configurações de AD do espaço para nome separado.

Use isso como referenciado em outra resposta:

$myFQDN=(Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain

Host de gravação $ myFQDN

67
aquinas

Para obter o FQDN do computador local:

[System.Net.Dns]::GetHostByName($env:computerName)

ou

[System.Net.Dns]::GetHostByName($env:computerName).HostName

Para obter o FQDN do computador remoto:

[System.Net.Dns]::GetHostByName('mytestpc1')

ou

Para um valor melhor formatado, use:

[System.Net.Dns]::GetHostByName('mytestpc1').HostName
  • Para máquinas remotas, verifique se o Host está acessível.
67
perilbrain

Computador local FQDN via classe dotNet

[System.Net.Dns]::GetHostEntry([string]$env:computername).HostName

ou

[System.Net.Dns]::GetHostEntry([string]"localhost").HostName

Referência:

Métodos DNS (System.Net)

observação: o método GetHostByName está obsoleto


FQDN do computador local via consulta WMI

$myFQDN=(Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain
Write-Host $myFQDN

Referência:

classe Win32_ComputerSystem

28
user3632452
[System.Net.Dns]::GetHostByName((hostname)).HostName

$env:computerName retorna o nome NetBIOS do host, para que os dois exemplos anteriores retornem netbioshostname.domainsuffix (não FQDN!) Em vez de dnshostname.domainsuffix (FQDN)

por exemplo, o Host possui o FQDN aa-w2k12sv-storage.something.com e o nome NetBIOS aa-w2k12sv-stor (um caso fácil, geralmente altero o nome NetBIOS)

o utilitário hostname retorna dnshostname, ou seja, a primeira parte do FQDN e o código

[System.Net.Dns]::GetHostByName((hostname)).HostName

retorna o FQDN certo

Comentário: nunca use os mesmos nomes NetBIOS e DNS de domínios e hosts do AD. Se o seu aplicativo ou de terceiros gravar no log: "não é possível conectar ao hostname.domainsuffix", que nome ele tenta resolver? Se você vir no log "não é possível conectar-se ao netbiosname.domainsuffix", sem dúvida, um programador preguiçoso adicionou sufixo de domínio ao nome NetBIOS e você tem certeza de que isso é um bug e pode abrir um ticket para forçá-los a corrigir o problema ...

7
Alexander Petrovsky

Também pode ser recuperado do registro:

Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters' |
   % { $_.'NV HostName', $_.'NV Domain' -join '.' }
2
Tyler Szabo

Eu uso a seguinte sintaxe:

$Domain=[System.Net.Dns]::GetHostByName($VM).Hostname.split('.')
$Domain=$Domain[1]+'.'+$Domain[2]

não importa se o $ VM está ativo ou inativo ...

1
SnakeNET

Aqui está uma maneira de determinar o FQDN de um servidor com base no "Nome" e "Nome Distinto". Funciona para vários domínios:

$server = Get-ADComputer serverName -Server domainName -Properties * | select Name, DistinguishedName
$domain = $server.DistinguishedName -split ","
$domain = $domain | ? {$_ -like 'DC=*'}
$domain = $domain -join "."
$domain = $domain -replace "DC="
$FQDN = $server.Name + "." + $domain
0
StevenMMK

Eu tenho o seguinte add .. Eu preciso separar o sufixo dns do nome do host .. e eu apenas "conheço" o apelido do servidor, apelido ... e quero saber qual é o sufixo dns

#example:
#serveralias:     MyAppServer.us.fred.com
#actualhostname:  server01.us.fred.com 
#I "know":        "MyAppServer" .. I pass this on as an env var called myjumpbox .. this could also be $env:computername


$forname                 = $env:myjumpbox
$fqdn                    = [System.Net.Dns]::GetHostByName($forname).Hostname
$shortname               = $fqdn.split('.')[0]
$domainname              = $fqdn -split $fqdn.split('.')[0]+"."
$dnssuf                  = $domainname[1]  
" name parts are- alias: " + $forname + " actual hostname: " + $shortname + " suffix: " + $dnssuf

#returns

name parts are- alias: MyAppServer actual hostname: server01 suffix: us.fred.com
0
CBB

Que tal agora

$FQDN=[System.Net.Dns]::GetHostByName($VM).Hostname.Split('.')
[int]$i = 1
[int]$x = 0
[string]$Domain = $null
do {
    $x = $i-$FQDN.Count
    $Domain = $Domain+$FQDN[$x]+"."
    $i = $i + 1
} until ( $i -eq $FQDN.Count )
$Domain = $Domain.TrimEnd(".")
0
JABIR ABDUL RAHIMAN
"$env:computername.$env:userdnsdomain" 

funcionará se separado assim

"$env:computername"+"$env:userdnsdomain"
0
julian

para obter o fqdn correspondente ao primeiro IpAddress, foi necessário este comando:

PS C:\Windows\system32> [System.Net.Dns]::GetHostByAddress([System.Net.Dns]::GetHostByName($env:computerName).AddressList[0]).HostName
WIN-1234567890.fritz.box

onde [System.Net.Dns]::GetHostByName($env:computerName).AddressList[0] representa o primeiro IpAddress-Object e [System.Net.Dns]::GetHostByAddress obtém o objeto dns dele.

Se eu adotasse a solução vencedora no Windows autônomo, obteria apenas:

PS C:\Windows\system32> (Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain
WIN-1234567890.WORKGROUP

não era isso que eu queria.

0
Oliver Gaida