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.
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
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
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:
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:
[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. ...
Il peut également être récupéré à partir du registre:
Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters' |
% { $_.'NV HostName', $_.'NV Domain' -join '.' }
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 ...
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
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
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(".")
"$env:computername.$env:userdnsdomain"
travaillera si séparé comme ça
"$env:computername"+"$env:userdnsdomain"
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
où [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.