web-dev-qa-db-fra.com

Powershell: Obtenir le nom d'hôte FQDN

Je veux récupérer le nom de domaine complet du serveur Windows via le script powershell. J'ai trouvé 2 solutions jusqu'à présent:

$server =  Invoke-Command -ScriptBlock {hostname}

La ligne ci-dessus n’imprimera que le nom abrégé du serveur.

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

Au-dessus de deux lignes, je recevrai le nom de domaine complet (FQDN), mais le code qui apparaît pour récupérer uniquement le nom d’hôte est vraiment désagréable :(

Ma question est donc la suivante: existe-t-il un moyen plus facile d’obtenir le nom de domaine complet dans Powershell? Je suis un codeur bash/Perl et ai récemment ramassé PowerShell .. donc le trouver difficile.

Merci.

49
slayedbylucifer

Que diriez-vous: "$env:computername.$env:userdnsdomain"

En réalité, niquement fonctionne si l'utilisateur est connecté à un domaine (c'est-à-dire, aucun compte local), connecté au même domaine que le serveur et ne fonctionne pas avec les configurations AD d'espace de nom disjointes.

Utilisez ceci comme indiqué dans une autre réponse:

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

Write-Host $ myFQDN

67
aquinas

Pour obtenir le nom de domaine complet de l'ordinateur local:

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

ou

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

Pour obtenir le nom de domaine complet de l'ordinateur distant:

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

ou

Pour une meilleure utilisation de la valeur formatée:

[System.Net.Dns]::GetHostByName('mytestpc1').HostName
  • Pour les machines distantes, assurez-vous que l'hôte est accessible.
67
perilbrain

Nom de domaine complet de l'ordinateur local via la classe dotNet

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

ou

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

Référence:

méthodes Dns (System.Net)

remarque: la méthode GetHostByName est obsolète.


Nom de domaine complet de l'ordinateur local via une requête WMI

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

Référence:

classe Win32_ComputerSystem

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

$env:computerName renvoie le nom NetBIOS de l'hôte, de sorte que les deux exemples précédents renvoient netbioshostname.domainsuffix (pas le nom de domaine complet!) au lieu de dnshostname.domainsuffix (FQDN)

par exemple, l'hôte a le nom de domaine complet aa-w2k12sv-storage.something.com et le nom NetBIOS aa-w2k12sv-stor (cas simple, je change habituellement de nom NetBIOS).

l'utilitaire hostname renvoie dnshostname, c'est-à-dire la première partie du nom de domaine complet et le code

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

renvoie le bon nom de domaine complet

Commentaire: n'utilisez jamais les mêmes noms NetBIOS et DNS des domaines et hôtes AD. Si votre application ou une application tierce écrit dans le journal: "ne peut pas se connecter à hostname.domainsuffix", quel nom tente-t-elle de résoudre? Si vous voyez dans le journal "ne peut pas se connecter à netbiosname.domainsuffix", un programmeur paresseux a ajouté un suffixe de domaine au nom NetBIOS et vous êtes sûr qu'il s'agit d'un bogue et qu'il peut ouvrir un ticket pour les forcer à résoudre le problème. ...

7

Il peut également être récupéré à partir du registre:

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

J'utilise la syntaxe suivante:

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

peu importe si la $ VM est en hausse ou en baisse ...

1
SnakeNET

Voici un moyen de déterminer le nom de domaine complet d'un serveur en fonction du "Nom" et du "Nom distingué". Fonctionne pour plusieurs domaines:

$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

J'ai les ajouts suivants. Je dois séparer le suffixe DNS du nom d'hôte.

#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 dis-tu de ça

$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
"$env:computername.$env:userdnsdomain" 

travaillera si séparé comme ça

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

pour obtenir le fqdn correspondant à la première adresse IpAddress, il a fallu cette commande:

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

[System.Net.Dns]::GetHostByName($env:computerName).AddressList[0] représente le premier objet IpAddress et [System.Net.Dns]::GetHostByAddress en extrait l'objet-dns.

Si je prenais la solution gagnante sur mon Windows autonome, je n'ai que:

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

ce n'est pas ce que je voulais.

0
Oliver Gaida