Как получить мошеннических клиентов DHCP с помощью PowerShell? - PullRequest
0 голосов
/ 31 октября 2019

Мне нужно получить список клиентов / компьютеров, которые не являются членами домена AD, но получили аренду от DHCP.

Код, который я использую, похоже, работает для других пользователей, но я не получаюлюбые имена хостов в моем выходном файле.

Get-DhcpServerv4Lease -allleases -ScopeId 191.168.1.1 | Select-Object @{expression= {$_.hostname}; label='name' } | export-CSV -notypeinformation C:\dhcp\LeaseLog.csv

$leaselogpath = "c:\DHCP\LeaseLog.csv"
Import-csv -path $leaselogpath | foreach-object {
    $ComputerName = $_.name.Replace(".domain.com",$null)
    $Result = Get-ADComputer $ComputerName
    If ($Result -eq $null) {
        $RogueSystem = $_.Name
    }
    $RogueSystem | Out-File C:\DHCP\RogueClients.txt -Append $RogueSystem = $null
}

При выполнении я получаю сообщения об ошибках о компьютерах, отсутствующих в домене - именно те компьютеры, которые мне нужны указаны в выходном файле, но выходной файл остается пустым.

Get-ADComputer: не удается найти объект с идентификатором: 'TEST-PC1' ....

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Использование Try ... Catch добавит ясности

# query AD for computer name based on csv log 
Import-csv -path $leaselogpath | foreach-object {
    Try {
        $ComputerName = $_.name.Replace(".domain.com",$null)
        $Result = Get-ADComputer $ComputerName -ErrorAction Stop
    }
    Catch {
         Write-Error $_
         $RogueSystem = $_.Name
         $RogueSystem | Out-File C:\DHCP\RogueClients.txt -Append
         $RogueSystem = $null 
    }
}
0 голосов
/ 31 октября 2019

Похоже, проблема была в сбросе $ Result


$ScopeID = Get-DhcpServerv4Scope -ComputerName DC1 | select ScopeID

$ScopeID | foreach-object `
{
    Get-DhcpServerv4Lease -allleases -ScopeId $_.ScopeID -ComputerName DC1  | Select-Object @{expression= {$_.hostname}; label='name' } | export-CSV -notypeinformation C:\dhcp\LeaseLog.csv -Append
}

$leaselogpath = "c:\DHCP\LeaseLog.csv"
Import-csv -path $leaselogpath | 
#query AD for computer name based on csv log
foreach-object `
{ 
   $ComputerName = $_.name.Replace(".domain.com",$null)
   $Result = $null
   $Result = Get-ADComputer $ComputerName -ErrorAction Continue
   If ($Result -eq $null) {$RogueSystem = $_.Name}
   $RogueSystem | Out-File C:\DHCP\RogueClients.txt -Append
   $RogueSystem = $null

}

Просто добавили команду, чтобы получить все ScopeID от указанного контроллера домена и перечислить все аренды в CSV-файле.

Спасибо

...