Powershell: Получить имя домена FQDN
Я хочу получить имя FQDN сервера Windows через powershell script. До сих пор я нашел 2 решения:
$server = Invoke-Command -ScriptBlock {hostname}
Над строкой будет напечатано только короткое имя сервера
$sysinfo = Get-WmiObject -Class Win32_ComputerSystem
$server = "{0}.{1}" -f $sysinfo.Name, $sysinfo.Domain
Выше две строки получат мне FQDN, но это выглядит действительно неприятным кодом, чтобы получить только имя хоста: (
Итак, мой вопрос: есть ли более простой способ получить полное доменное имя в powershell. Я bash/perl-кодер и недавно подобрал powershell.. так что найти это трудно.
Спасибо.
Ответы
Ответ 1
Как насчет: "$env:computername.$env:userdnsdomain"
Это фактически работает только в том случае, если пользователь зарегистрирован в домене (т.е. нет локальных учетных записей), зарегистрирован в том же домене, что и сервер, и не работает с конфигурациями AD с разнесенными именами.
Используйте это, как указано в другом ответе:
$myFQDN=(Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain
Write-Host $myFQDN
Ответ 2
Чтобы получить полное доменное имя локального компьютера:
[System.Net.Dns]::GetHostByName($env:computerName)
или же
[System.Net.Dns]::GetHostByName($env:computerName).HostName
Чтобы получить полное доменное имя удаленного компьютера:
[System.Net.Dns]::GetHostByName('mytestpc1')
или же
Для лучшего форматированного значения используйте:
[System.Net.Dns]::GetHostByName('mytestpc1').HostName
- Для удаленных машин убедитесь, что хост доступен.
Ответ 3
Локальное FQDN через класс dotNet
[System.Net.Dns]::GetHostEntry([string]$env:computername).HostName
или
[System.Net.Dns]::GetHostEntry([string]"localhost").HostName
Ссылка:
Dns Methods (System.Net)
note: метод GetHostByName устарел
Локальное FQDN компьютера через запрос WMI
$myFQDN=(Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain
Write-Host $myFQDN
Ссылка:
класс Win32_ComputerSystem
Ответ 4
[System.Net.Dns]::GetHostByName((hostname)).HostName
$env:computerName
возвращает имя NetBIOS хоста, так что оба предыдущих примера возвращаются
netbioshostname.domainsuffix(не полное доменное имя!)
вместо
dnshostname.domainsuffix(FQDN)
например, хост имеет
Полное доменное имя
aa-w2k12sv-storage.something.com
и имя NetBIOS
aa-w2k12sv-stor (простой случай, я обычно меняю имя NetBIOS)
Утилита hostname возвращает имя dnshostname, то есть первую часть FQDN и код
[System.Net.Dns]::GetHostByName((hostname)).HostName
возвращает полное FQDN
Комментарий: никогда не используйте те же NetBIOS и DNS-имена доменов и хостов AD. Если ваше или стороннее приложение записывает в журнал: "не удается подключиться к hostname.domainsuffix", какое имя он пытается решить? Если вы видите, что в журнале "невозможно подключиться к netbiosname.domainsuffix", без сомнения, ленивый программист добавил суффикс домена к имени NetBIOS, и вы уверены, что это ошибка, и можете открыть билет, чтобы заставить их исправить проблему...
Ответ 5
Я использую следующий синтаксис:
$Domain=[System.Net.Dns]::GetHostByName($VM).Hostname.split('.')
$Domain=$Domain[1]+'.'+$Domain[2]
неважно, находится ли $VM вверх или вниз...
Ответ 6
Его также можно получить из реестра:
Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters' |
% { $_.'NV HostName', $_.'NV Domain' -join '.' }
Ответ 7
"$env:computername.$env:userdnsdomain"
будет работать, если его выделить следующим образом
"$env:computername"+"$env:userdnsdomain"
Ответ 8
Как насчет этого
$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(".")
Ответ 9
Ниже приведен способ определения полного доменного имени сервера на основе "Имя" и "Различаемое имя". Работает для нескольких доменов:
$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
Ответ 10
У меня есть следующее добавление.. Мне нужно отделить суффикс dns от имени хоста.. и я только "знаю" псевдоним сервера... и хочу знать, что такое суффикс 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
Ответ 11
чтобы получить fqdn, соответствующий первому IpAddress, потребовалась эта команда:
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]
представляет первый объект IpAddress, а [System.Net.Dns]::GetHostByAddress
из него dns-объект.
Если я выбрал выигрышное решение на своей автономной Windows, я получил только:
PS C:\Windows\system32> (Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain
WIN-1234567890.WORKGROUP
это не то, что я хотел.