Подтвердить что ты не робот

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.. так что найти это трудно.

Спасибо.

4b9b3361

Ответ 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

это не то, что я хотел.