
Для исправления сложившейся ситуации можно обойти все компьютеры, у которых есть подобная проблема и исправить значания параметров реестра руками или, что более рационально, использовать следующий PowerShell-скрипт
#фильтр для включённых машин
Filter Where-Online
{
$ping = new-object System.Net.NetworkInformation.Ping
trap {Write-Verbose "ping error"; Continue}
if ($ping.send($_).Status -eq "Success" ) { $_ }
}
function Registry-Fix {
param ($strIP)
#создание wmi объекта
$reg = "\\"+$strIP+"\root\default:stdRegProv"
$wmi = [wmiclass]$reg
$hklm = 2147483650
#Чтение имени компьютера
$KeyRead = "SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName\"
$PropRead = "ComputerName"
$ComputerName = $wmi.GetStringValue($hklm,$KeyRead,$PropRead).sValue
#Исправление занчений реестра
$KeyWrite = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\"
$ValueDomain = "domain.local"
$ValueHostname = $ComputerName
$wmi.SetStringValue($hklm,$KeyWrite,"Domain",$ValueDomain)
$wmi.SetStringValue($hklm,$KeyWrite,"Hostname",$ValueHostname)
$wmi.SetStringValue($hklm,$KeyWrite,"NV Domain",$ValueDomain)
$wmi.SetStringValue($hklm,$KeyWrite,"NV Hostname",$ValueHostname)
}
#Имя DHCP-сервера
$DHCP_SERVER = "dhcp"
#Запрос всех арендованных адресов
$ShowLeases = "netsh dhcp server \\$DHCP_SERVER scope 192.168.0.0 show clients 1"
$AllLeases = Invoke-Expression $ShowLeases
$LeaseClients = @()
#Выделение строк и выбор необходимых IP-адресов
for($i=8;$i -lt $AllLeases.Length-4;$i++)
{
$line = [regex]::split($AllLeases[$i],"\s{2,}")
$IP = $line[0]
$Name = $line[5]
If ($Name.Length -eq 0) {$LeaseClients += $IP}
}
#Перебор компьютеров
foreach ($comp in $LeaseClients | Where-Online) {Registry-Fix $comp}
Если при выполнении запроса арендованных адресов появляется сообщение о том, что такая команда не найдена, то необходимо скачать Средства удалённого администрирования сервера или выполнить скрипт на том компьютере, на котором установлен DHCP-сервер.
Комментариев нет:
Отправить комментарий