У меня есть сценарий powershell, который выполняет некоторую команду на локальном или удаленном компьютере. Когда компьютер удален, команда вызывается через Invoke-Command, и пользователю предлагается ввести дополнительные учетные данные.Как проверить в Powershell, если IP-адрес или имя хоста является локальным хостом? Без домена DNS
Пользователь может ввести параметр сценария, который может быть: hostname, IP, 127.0.0.1, alias из файла hosts. Мне нужно проверить, является ли этот параметр для локальной или удаленной машины, чтобы вызвать локальную команду или Invoke-Command. я делал это так:
Function IsLocalhost {
Param([string] $srvname)
$script:AVLserverHost = $srvname.Split('\')[0]
#Write-Host ("HOST: " + $script:AVLserverHost)
if ((get-content env:computername) -eq $script:AVLserverHost) {
return $true;
} else {
$AddressList = @(([net.dns]::GetHostEntry($script:AVLserverHost)).AddressList)
$script:HostIp = $AddressList.IpAddressToString
$name = [System.Net.Dns]::gethostentry($script:HostIp)
if ((get-content env:computername) -eq $name.HostName) {
return $true
}
}
return $false
}
Но это работает только на домене DNS. Наши компьютеры находятся на рабочей группе или автономных компьютерах, которые мы можем подключать только по IP или псевдониму из файла hosts.
Так, как проверить в powershell (или код C#), если данный хост является локальным или нет, если хост не находится в домене DNS. Я бы хотел иметь true/false, если он локальный или нет, и его реальный IP-адрес, если было введено имя хоста или псевдоним хоста.
В IPv4 любой адрес из диапазон 127.0.0.0/8 (да, все 16 миллионов адресов) относится к localhost. –
Спасибо за этот код, но он не охватывает все сценарии. На моем локальном хосте я могу редактировать файлы хостов следующим образом: 127.0.0.1 MyAlias1, 10.148.0.1 MyAlias2. Обе псевдонимы относятся к моему локальному хосту (10.148.0.1 - это мой фактический IP). Сценарий должен распознавать MyAlias1 и MyAlias2 как localhost. Может быть, скрипт мог читать файл hosts и расширять из него все псевдонимы, которые ссылаются на IP-адреса, которые уже находятся в $ LocalArray. – scar80
Фактически $ LocalArray -contains $ IP не работает, потому что первые адреса, возвращаемые из gwmi, - это [Microsoft.PowerShell.Commands.MatchInfo ], и его нельзя сравнивать со строкой $ IP. Мне пришлось написать цикл foreach и преобразовать все элементы из $ LocalArray в строку. – scar80