উইন্ডোজ ডিএইচসিপি সার্ভার - কোনও নন-এড যুক্ত ডিভাইস একটি আইপি ঠিকানা পেলে বিজ্ঞপ্তি পান


15

দৃশ্যকল্প

এটিকে সরল করার জন্য এটি সবচেয়ে সহজ উদাহরণ:

DHCP সার্ভারের ভূমিকা সহ আমার একটি উইন্ডোজ 2008 আর 2 মানক ডিসি রয়েছে। এটি বিভিন্ন আইপিভি 4 স্কোপের মাধ্যমে আইপিগুলি হস্তান্তর করে, কোনও সমস্যা নেই।

আমি যা পছন্দ করি

/ অনুরূপ যখনই একটি ডিভাইস DHCP ঠিকানা ইজারা পায় এবং ডিভাইস আমি একটি বিজ্ঞপ্তি / eventlog এন্ট্রি তৈরি করতে একটি উপায় চাই নয় সক্রিয় ডিরেক্টরি একটি ডোমেইন যোগদান কম্পিউটার। এটি কাস্টম পাওয়ারশেল ইত্যাদি আমার কাছে কিছু যায় আসে না

নীচের লাইন = আমি এই মুহুর্তে 802.1X ব্যবহার না করে নন-ডোমেন ডিভাইসগুলি কখন নেটওয়ার্কে থাকে তা জানার একটি উপায় চাই। আমি জানি এটি স্ট্যাটিক আইপি ডিভাইসগুলির জন্য অ্যাকাউন্ট করবে না। আমার কাছে মনিটরিং সফটওয়্যার রয়েছে যা নেটওয়ার্কটি স্ক্যান করবে এবং ডিভাইসগুলি সন্ধান করবে, তবে এটি বিস্তারিতভাবে এই দানাদার নয়।

গবেষণা সম্পন্ন / বিকল্পগুলি বিবেচনাধীন

বিল্ট ইন লগিংয়ের সাথে আমি এরকম কোনও সম্ভাবনা দেখতে পাচ্ছি না।

হ্যাঁ, আমি ৮০২.১ এক্স সম্পর্কে সচেতন এবং এই স্থানে এটি দীর্ঘমেয়াদে বাস্তবায়নের সক্ষমতা আছে তবে আমরা এর মতো একটি প্রকল্প থেকে কিছুটা দূরে রয়েছি এবং এটি নেটওয়ার্ক প্রমাণীকরণের সমস্যাগুলি সমাধান করতে পারে, এটি এখনও আমার পক্ষে সহায়ক is 802.1X লক্ষ্য।

আমি কিছু স্ক্রিপ্ট বিট ইত্যাদির আশেপাশে দেখেছি যা দরকারী প্রমাণিত হতে পারে তবে যে জিনিসগুলি আমি খুঁজে পেয়েছি তা বিশ্বাস করতে আমার নেতৃত্ব দেয় যে আমার গুগল-ফু এই মুহূর্তে আমাকে ব্যর্থ করছে।

আমি বিশ্বাস করি যে নীচের যুক্তিটি সুগঠিত ( ধরে নিলাম কিছু বিদ্যমান সমাধান নেই ):

  1. ডিভাইস ডিএইচসিপি ঠিকানা গ্রহণ করে
  2. ইভেন্ট লগ এন্ট্রি রেকর্ড করা হয় (ডিএইচসিপি অডিট লগের ইভেন্ট আইডি 10 কাজ করা উচিত (যেহেতু একটি নতুন ইজারা যা আমি সবচেয়ে বেশি আগ্রহী, এটি নবায়ন নয়): http://technet.microsoft.com/en-us/library /dd759178.aspx )
  3. এই মুহুর্তে সম্ভবত কোনও ধরণের একটি স্ক্রিপ্ট নীচে অবশিষ্ট "STEPS" এর জন্য নিতে হবে।
  4. এই ইভেন্ট আইডি 10 এর জন্য এই ডিএইচসিপি লগকে কোনওভাবে জিজ্ঞাসা করুন (আমি ধাক্কা পছন্দ করব, তবে আমি অনুমান করছি যে এখানে টানই একমাত্র অবলম্বন)
  5. নতুন ইজারা নির্ধারিত ডিভাইসের নামের জন্য ক্যোয়ারীটি পার্স করুন
  6. ডিভাইসের নামের জন্য এডি জিজ্ঞাসা করুন
  7. যদি না খ্রিস্টাব্দে পাওয়া যায় নি, একটি বিজ্ঞপ্তি ইমেল পাঠাতে

এটি সঠিকভাবে কীভাবে করা যায় সে সম্পর্কে কারও কোনও ধারণা থাকলে আমি সত্যিই এটির প্রশংসা করব। আমি কোনও "জিমে কোডজ" খুঁজছি না তবে উপরের তালিকার বিকল্প রয়েছে কিনা তা আমি জানতে আগ্রহী বা যদি আমি পরিষ্কার ভাবছি না এবং এই তথ্য সংগ্রহের জন্য অন্য একটি পদ্ধতি উপস্থিত রয়েছে। আপনার যদি কোড স্নিপেটস / পিএস কমান্ড থাকে তবে এটি সম্পাদন করতে সহায়তা করতে আপনি ভাগ করতে চান, আরও ভাল।


আপনি কি এগুলি অবরুদ্ধ করার জন্য সন্ধান করছেন, বা যদি তারা একটি আইপি পেয়ে থাকেন তবে কেবল অবহিত হন?
হোস্টবিটস

@ চেকালেক - কেবলমাত্র অবহিত করুন।
TheCleaner

DHCP ব্যবহার করে এমন নেটওয়ার্ক মুদ্রকগুলির সম্পর্কে কী?
jftuga

@ জফতুগা - আমরা নেটওয়ার্ক প্রিন্টারগুলির জন্য স্ট্যাটিক আইপি ব্যবহার করি।
TheCleaner

উত্তর:


6

এরিক এবং এখানকার অন্যদের অনেক ধন্যবাদ সহ আমি একটি পথ অবতরণ করেছি ... আমি এটি সঠিক পথটি বলব না, তবে যে পাওয়ারশেল লিপিটি আমি নিয়ে এসেছি তা কৌতুকটি করে।

কেউ চাইলে কোডটি নীচে রয়েছে। প্রতিটি ডিএইচসিপি সার্ভারটিতে ম্যানুয়ালি এটিকে চালিত করুন বা তফসিল করুন (আবার স্ক্রিপ্টের প্রতিটি ডিএইচসিপি সার্ভারের দিকে নির্দেশ করুন)।

স্ক্রিপ্টটি কী করে:

  1. ডিএইচসিপি সার্ভারের কাছ থেকে ইজারা সংক্রান্ত তথ্য পান (আইপিভি 4 ইজারা)
  2. সিএসভি ফাইলের ইজারা আউটপুট দেয়
  3. AD এর অনুসন্ধানের জন্য সেই CSV ফাইলে আবার পড়ে back
  4. কম্পিউটারের জন্য এডি
  5. যদি কোনও নতুন টেক্সট ফাইলের আউটপুট না পাওয়া যায়
  6. উপরের # 5-এ তৈরি করা একটি থেকে একটি অনন্য তালিকা চূড়ান্ত txt ফাইল তৈরি করে (যেহেতু ক্লায়েন্ট একাধিকবার বা একাধিক অ্যাডাপ্টারের সাথে নিবন্ধন করতে পারে সেখানে ডুপস থাকতে পারে)
  7. চূড়ান্ত আউটপুট ফাইলের বিষয়বস্তু প্রশাসকের কাছে ইমেল করে

আপনার যা প্রয়োজন:

স্ক্রিপ্টটি AD মডিউলটি ব্যবহার করে ( import-module activedirectory) সুতরাং এটি কোনও AD ডিসি চালিত ডিএইচসিপি-তে সেরাভাবে চালিত হয়। যদি এটি আপনার ক্ষেত্রে না হয় তবে আপনি এডি পাওয়ারশেল মডিউলটি ইনস্টল করতে পারেন: http://blogs.msdn.com/b/rkramesh/archive/2012/01/17/how-to-add-active-directory- মডিউল-ইন-PowerShell-ইন-জানালা-7.aspx

আপনার এখানে কোয়েস্টের AD পাওয়ারশেল সেন্টিমিলেটগুলিও পাওয়া দরকার: http://www.quest.com/powershell/activeroles-server.aspx । স্ক্রিপ্টটি চালানোর আগে এটি ইনস্টল করুন বা এটি ব্যর্থ হবে।

স্ক্রিপ্ট নিজেই (স্যানিটাইজড, আপনার প্রয়োজনীয়তার সাথে সামঞ্জস্য করার জন্য কিছু ভেরিয়েবল সেটআপ করতে হবে যেমন ইনপুট ফাইলের নাম, সংযোগের জন্য ডোমেন, সংযোগের জন্য ডিএইচসিপি সার্ভার, শেষের নিকটে ইমেল সেটিংস ইত্যাদি):

# Get-nonADclientsOnDHCP.ps1

# Author : TheCleaner http://serverfault.com/users/7861/thecleaner with a big thanks for a lot of the lease grab code to Assaf Miron on code.google.com

# Description : This Script grabs the current leases on a Windows DHCP server, outputs it to a csv
# then takes that csv file as input and determines if the lease is from a non-AD joined computer.  It then emails
# an administrator notification.  Set it up on a schedule of your choosing in Task Scheduler.
# This helps non-802.1X shops keep track of rogue DHCP clients that aren't part of the domain.

#

# Input : leaselog.csv

# Output: Lease log = leaselog.csv
# Output: Rogue Clients with dupes = RogueClients.txt
# Output: Rogue Clients - unique = RogueClientsFinal.txt

$DHCP_SERVER = "PUT YOUR SERVER NAME OR IP HERE" # The DHCP Server Name

$LOG_FOLDER = "C:\DHCP" # A Folder to save all the Logs

# Create Log File Paths

$LeaseLog = $LOG_FOLDER+"\LeaseLog.csv"

#region Create Scope Object

# Create a New Object

$Scope = New-Object psobject

# Add new members to the Object

$Scope | Add-Member noteproperty "Address" ""

$Scope | Add-Member noteproperty "Mask" ""

$Scope | Add-Member noteproperty "State" ""

$Scope | Add-Member noteproperty "Name" ""

$Scope | Add-Member noteproperty "LeaseDuration" ""

# Create Each Member in the Object as an Array

$Scope.Address = @()

$Scope.Mask = @()

$Scope.State = @()

$Scope.Name = @()

$Scope.LeaseDuration = @()

#endregion


#region Create Lease Object

# Create a New Object

$LeaseClients = New-Object psObject

# Add new members to the Object

$LeaseClients | Add-Member noteproperty "IP" ""

$LeaseClients | Add-Member noteproperty "Name" ""

$LeaseClients | Add-Member noteproperty "Mask" ""

$LeaseClients | Add-Member noteproperty "MAC" ""

$LeaseClients | Add-Member noteproperty "Expires" ""

$LeaseClients | Add-Member noteproperty "Type" ""

# Create Each Member in the Object as an Array

$LeaseClients.IP = @()

$LeaseClients.Name = @()

$LeaseClients.MAC = @()

$LeaseClients.Mask = @()

$LeaseClients.Expires = @()

$LeaseClients.Type = @()

#endregion


#region Create Reserved Object

# Create a New Object

$LeaseReserved = New-Object psObject

# Add new members to the Object

$LeaseReserved | Add-Member noteproperty "IP" ""

$LeaseReserved | Add-Member noteproperty "MAC" ""

# Create Each Member in the Object as an Array

$LeaseReserved.IP = @()

$LeaseReserved.MAC = @()

#endregion


#region Define Commands

#Commad to Connect to DHCP Server

$NetCommand = "netsh dhcp server \\$DHCP_SERVER"

#Command to get all Scope details on the Server

$ShowScopes = "$NetCommand show scope"

#endregion


function Get-LeaseType( $LeaseType )

{

# Input : The Lease type in one Char

# Output : The Lease type description

# Description : This function translates a Lease type Char to it's relevant Description


Switch($LeaseType){

"N" { return "None" }

"D" { return "DHCP" }

"B" { return "BOOTP" }

"U" { return "UNSPECIFIED" }

"R" { return "RESERVATION IP" }

}

}


function Check-Empty( $Object ){

# Input : An Object with values.

# Output : A Trimmed String of the Object or '-' if it's Null.

# Description : Check the object if its null or not and return it's value.

If($Object -eq $null)

{

return "-"

}

else

{

return $Object.ToString().Trim()

}

}


function out-CSV ( $LogFile, $Append = $false) {

# Input : An Object with values, Boolean value if to append the file or not, a File path to a Log File

# Output : Export of the object values to a CSV File

# Description : This Function Exports all the Values and Headers of an object to a CSV File.

#  The Object is recieved with the Input Const (Used with Pipelineing) or the $inputObject

Foreach ($item in $input){

# Get all the Object Properties

$Properties = $item.PsObject.get_properties()

# Create Empty Strings - Start Fresh

$Headers = ""

$Values = ""

# Go over each Property and get it's Name and value

$Properties | %{ 

$Headers += $_.Name + ","

$Values += $_.Value

}

# Output the Object Values and Headers to the Log file

If($Append -and (Test-Path $LogFile)) {

$Values | Out-File -Append -FilePath $LogFile -Encoding Unicode

}

else {

# Used to mark it as an Powershell Custum object - you can Import it later and use it

# "#TYPE System.Management.Automation.PSCustomObject" | Out-File -FilePath $LogFile

$Headers | Out-File -FilePath $LogFile -Encoding Unicode

$Values | Out-File -Append -FilePath $LogFile -Encoding Unicode

}

}

}


#region Get all Scopes in the Server 

# Run the Command in the Show Scopes var

$AllScopes = Invoke-Expression $ShowScopes

# Go over all the Results, start from index 5 and finish in last index -3

for($i=5;$i -lt $AllScopes.Length-3;$i++)

{

# Split the line and get the strings

$line = $AllScopes[$i].Split("-")

$Scope.Address += Check-Empty $line[0]

$Scope.Mask += Check-Empty $line[1]

$Scope.State += Check-Empty $line[2]

# Line 3 and 4 represent the Name and Comment of the Scope

# If the name is empty, try taking the comment

If (Check-Empty $line[3] -eq "-") {

$Scope.Name += Check-Empty $line[4]

}

else { $Scope.Name += Check-Empty $line[3] }

}

# Get all the Active Scopes IP Address

$ScopesIP = $Scope | Where { $_.State -eq "Active" } | Select Address

# Go over all the Adresses to collect Scope Client Lease Details

Foreach($ScopeAddress in $ScopesIP.Address){

# Define some Commands to run later - these commands need to be here because we use the ScopeAddress var that changes every loop

#Command to get all Lease Details from a specific Scope - when 1 is amitted the output includes the computer name

$ShowLeases = "$NetCommand scope "+$ScopeAddress+" show clients 1"

#Command to get all Reserved IP Details from a specific Scope

$ShowReserved = "$NetCommand scope "+$ScopeAddress+" show reservedip"

#Command to get all the Scopes Options (Including the Scope Lease Duration)

$ShowScopeDuration = "$NetCommand scope "+$ScopeAddress+" show option"

# Run the Commands and save the output in the accourding var

$AllLeases = Invoke-Expression $ShowLeases 

$AllReserved = Invoke-Expression $ShowReserved 

$AllOptions = Invoke-Expression $ShowScopeDuration

# Get the Lease Duration from Each Scope

for($i=0; $i -lt $AllOptions.count;$i++) 

{ 

# Find a Scope Option ID number 51 - this Option ID Represents  the Scope Lease Duration

if($AllOptions[$i] -match "OptionId : 51")

{ 

# Get the Lease Duration from the Specified line

$tmpLease = $AllOptions[$i+4].Split("=")[1].Trim()

# The Lease Duration is recieved in Ticks / 10000000

$tmpLease = [int]$tmpLease * 10000000; # Need to Convert to Int and Multiply by 10000000 to get Ticks

# Create a TimeSpan Object

$TimeSpan = New-Object -TypeName TimeSpan -ArgumentList $tmpLease

# Calculate the $tmpLease Ticks to Days and put it in the Scope Lease Duration

$Scope.LeaseDuration += $TimeSpan.TotalDays

# After you found one Exit the For

break;

} 

}

# Get all Client Leases from Each Scope

for($i=8;$i -lt $AllLeases.Length-4;$i++)

{

# Split the line and get the strings

$line = [regex]::split($AllLeases[$i],"\s{2,}")

# Check if you recieve all the lines that you need

$LeaseClients.IP += Check-Empty $line[0]

$LeaseClients.Mask += Check-Empty $line[1].ToString().replace("-","").Trim()

$LeaseClients.MAC += $line[2].ToString().substring($line[2].ToString().indexOf("-")+1,$line[2].toString().Length-1).Trim()

$LeaseClients.Expires += $(Check-Empty $line[3]).replace("-","").Trim()

$LeaseClients.Type += Get-LeaseType $(Check-Empty $line[4]).replace("-","").Trim()

$LeaseClients.Name += Check-Empty $line[5]

}

# Get all Client Lease Reservations from Each Scope

for($i=7;$i -lt $AllReserved.Length-5;$i++)

{

# Split the line and get the strings

$line = [regex]::split($AllReserved[$i],"\s{2,}")

$LeaseReserved.IP += Check-Empty $line[0]

$LeaseReserved.MAC += Check-Empty $line[2]

}

}

#endregion 


#region Create a Temp Scope Object

# Create a New Object

$tmpScope = New-Object psobject

# Add new members to the Object

$tmpScope | Add-Member noteproperty "Address" ""

$tmpScope | Add-Member noteproperty "Mask" ""

$tmpScope | Add-Member noteproperty "State" ""

$tmpScope | Add-Member noteproperty "Name" ""

$tmpScope | Add-Member noteproperty "LeaseDuration" ""

#endregion

#region Create a Temp Lease Object

# Create a New Object

$tmpLeaseClients = New-Object psObject

# Add new members to the Object

$tmpLeaseClients | Add-Member noteproperty "IP" ""

$tmpLeaseClients | Add-Member noteproperty "Name" ""

$tmpLeaseClients | Add-Member noteproperty "Mask" ""

$tmpLeaseClients | Add-Member noteproperty "MAC" ""

$tmpLeaseClients | Add-Member noteproperty "Expires" ""

$tmpLeaseClients | Add-Member noteproperty "Type" ""

#endregion

#region Create a Temp Reserved Object

# Create a New Object

$tmpLeaseReserved = New-Object psObject

# Add new members to the Object

$tmpLeaseReserved | Add-Member noteproperty "IP" ""

$tmpLeaseReserved | Add-Member noteproperty "MAC" ""

#endregion

# Go over all the Client Lease addresses and export each detail to a temporary var and out to the log file

For($l=0; $l -lt $LeaseClients.IP.Length;$l++)

{

# Get all Scope details to a temp var

$tmpLeaseClients.IP = $LeaseClients.IP[$l] + ","

$tmpLeaseClients.Name = $LeaseClients.Name[$l] + ","

$tmpLeaseClients.Mask =  $LeaseClients.Mask[$l] + ","

$tmpLeaseClients.MAC = $LeaseClients.MAC[$l] + ","

$tmpLeaseClients.Expires = $LeaseClients.Expires[$l] + ","

$tmpLeaseClients.Type = $LeaseClients.Type[$l]

# Export with the Out-CSV Function to the Log File

$tmpLeaseClients | out-csv $LeaseLog -append $true

}



#Continue on figuring out if the DHCP lease clients are in AD or not

#Import the Active Directory module
import-module activedirectory

#import Quest AD module
Add-PSSnapin Quest.ActiveRoles.ADManagement

#connect to AD
Connect-QADService PUTTHEFQDNOFYOURDOMAINHERE_LIKE_DOMAIN.LOCAL | Out-Null

# get input CSV
$leaselogpath = "c:\DHCP\LeaseLog.csv"
Import-csv -path $leaselogpath | 
#query AD for computer name based on csv log
foreach-object `
{ 
   $NameResult = Get-QADComputer -DnsName $_.Name
   If ($NameResult -eq $null) {$RogueSystem = $_.Name}
   $RogueSystem | Out-File C:\DHCP\RogueClients.txt -Append
   $RogueSystem = $null

}
Get-Content C:\DHCP\RogueClients.txt | Select-Object -Unique | Out-File C:\DHCP\RogueClientsFinal.txt
Remove-Item C:\DHCP\RogueClients.txt

#send email to netadmin
$smtpserver = "SMTP SERVER IP"
$from="DHCPSERVER@domain.com"
$to="TheCleaner@domain.com"
$subject="Non-AD joined DHCP clients"
$body= (Get-Content C:\DHCP\RogueClientsFinal.txt) -join '<BR>&nbsp;<BR>'
$mailer = new-object Net.Mail.SMTPclient($smtpserver)
$msg = new-object Net.Mail.MailMessage($from,$to,$subject,$body)
$msg.IsBodyHTML = $true
$mailer.send($msg)

আশা করি যে অন্য কাউকে সাহায্য করবে!


3

ঠিক আছে, আমি নিশ্চিত নই যে আমি এখানে শিষ্টাচার অনুসরণ করছি কিন্তু আমার পূর্ববর্তীটি সম্পাদনা করার পরিবর্তে দ্বিতীয় উত্তর পোস্ট করছি, কারণ এতে কিছু তথ্য রয়েছে যা কারও পক্ষে এই ক্ষেত্রে অপ্রাসঙ্গিক প্রমাণিত হলেও কার্যকর হতে পারে। যদি এটি আমাকে এই ফোরামে একজন নির্বোধ করে তবে আমার ভুল পদ্ধতি সম্পর্কে আমাকে নির্দ্বিধায় জানায়।

সমস্যাটি বেশ কয়েকটি অংশে বিভক্ত, এখানে আমি যাদের সবচেয়ে আকর্ষণীয় মনে করি তার জন্য পরামর্শ দেওয়া হল। লগের উদাহরণ ছাড়াই এটি আমি করতে পারি সেরা, সুতরাং এটি কেবল পরামর্শ নয় সমাধান।

পরামিতি get-contentদিয়ে লগ ব্যবহার বিশ্লেষণ -wait। আমার ব্যবহারের ক্ষেত্রে ত্রুটি লগতে ত্রুটি খুঁজে পাওয়া যথেষ্ট।

এটি আমার নিজের ব্যবহারের ক্ষেত্রে কাজ করেছে, বিন্যাসটি ক্ষমা করুন:

get-content E:\temp13\log.txt -tail(1) -wait | where {$_ -match "ERROR"} |
    foreach {
        send-mailmessage `
        -port 25 `
        -smtpserver my.mail.server `
        -from logmon@a.b `
        -to erike@a.b `
        -subject "test logmonitor" `
        -body "ERROR found: $_" `
        }

এর পরিবর্তে $_ -match "ERROR"আপনার কোনওভাবে লগ আইডি ক্ষেত্র এবং কম্পিউটারের নাম পৃথক করতে হবে। আমি এখনই সর্বোত্তম উপায়ে এটি সম্পর্কে কীভাবে যাব তা নিশ্চিত নই, তবে যেহেতু where-object -matchরেজেক্স সমর্থন দেয় আমি অনুমান করি এটি একটি বিকল্প হতে পারে। আপনি অন্য নতুন ভেরিয়েবলের মধ্যে $ _ ভেরিয়েবল সংরক্ষণ করে, পাইপলাইনে পরে আপনার সুবিধার্থে এটি বাছাই করতে সক্ষম হতে, নেস্টেড ফোরচ লুপের অভ্যন্তরে ইত্যাদি করতে পারেন $

অনুমান করে আপনি কম্পিউটারটি পেতে পারেন, আমি অনুমান করি যে get-adcomputerসেমিডলেটটি আপনার এডি ( import-module activedirectory) কে জিজ্ঞাসা করার সহজতম উপায় হবে এবং আমি অনুমান করি যে ত্রুটি মেইল ​​প্রেরণ হয়েছে?

ব্যবহার import-csvঅবশ্যই অনেক বেশী আপনার ক্ষেত্রে মার্জিত হতে পারে, কিন্তু আমি এটা পিছাড়ী (যদি কেহ এই পড়া ঘটবে এবং যে সরু গলি তারপর দয়া করে, দয়া করে ভাগ আপ একটি কৌতুক জানে) এর অন্য কোন উপায়ে সচেতন নই।


ধন্যবাদ এরিক, আমি এটি নিয়ে ছুটে যাব এবং আপনাকে জানাবো। আমাকে তথ্যটি ধরার, এডি ক্যোয়ারির উপায় খুঁজে বের করতে হবে, তারপরে "সতর্কতা" দেওয়ার পরে সেই একই ইনপুটটির ভবিষ্যতের চেকগুলিকে উপেক্ষা করবেন। উদাহরণস্বরূপ, যদি এটি প্রতি পাঁচ মিনিটে ফাইলটি জিজ্ঞাসা করে তবে আমি চাই না যে এটি একই তথ্যটি পুনঃসংশ্লিষ্ট করে এবং প্রতি 5 মিনিটে একটি ডুপ সতর্কতা প্রেরণ করে।
TheCleaner

দুটি জিনিস আমি সামান্য ঝরঝরে দেখতে পেলাম: আপনি যদি কেবল স্ক্রিপ্টটি চালাতে দেন, অপেক্ষার পরামিতিটি ক্রমাগত একটি নতুন লাইন উপস্থিত হওয়ার অপেক্ষায় থাকবে। আপনাকে স্ক্রিপ্টটি পুনরায় চালু করতে হবে না। এটি টানার পরিবর্তে পুশ এফেক্ট দেবে। এছাড়াও, লেজ (1) এ এটি শুরুতে কেবল সর্বশেষ 1 লাইনটি বিশ্লেষণ করবে। সুতরাং, যদি টাস্ক ম্যানেজারটিকে এটি স্ক্রিপ্টটি পুনরায় চালু করতে হবে এবং আপনি কোনও সতর্কতা ট্রিগার করতে শেষ পংক্তিটি স্থানচ্যুত করার জন্য কোনও স্থানধারক লাইন ইনজেকশনের একটি উপায় খুঁজে পান, আপনি পুনঃস্থাপনের বিরক্তি নিরস্ত করতে পারবেন।
এরিকE

1
এরিক, আমি সিএসভি ফাইলে ডিএইচসিপি (2012 এর জন্য পিএস সেমিডলেট আছে তবে ২০০ doesn't এর জন্য নয়) এর ইজারা রফতানি করার একটি উপায় খুঁজে পেয়েছি। এইভাবে আমি আসল নিরীক্ষণ লগগুলিতে গণ্ডগোল করব না এবং ইনপুট দিয়ে কোনও কিছু ভাঙ্গার বিষয়ে উদ্বিগ্ন হতে হবে না। আমি বাকী কোডটি দিয়ে কাজ করতে শুরু করব এবং শীঘ্রই আপডেট করব।
TheCleaner

1

এই ধারণার অধীনে যে আপনি ইভেন্ট আইডি সম্পর্কে নিশ্চিত এবং অন্য কোনও ইভেন্ট এই আইডিতে ডিএইচসিপি লগে লগ করেন না তবে আপনার আগ্রহী, ধাক্কা আসলেই একটি বিকল্প।

1) সার্ভার ম্যানেজারটি খুলুন, ইভেন্ট ভিউয়ারে DHCP লগ এ যান।

২) কোনও প্রতিনিধি প্রবেশের সন্ধান করুন যা আপনি নিজের ক্রিয়ায় সংযুক্ত করতে চান। এটি নির্বাচন করুন এবং ডান ক্লিক করুন।

3) "এই ইভেন্টে টাস্ক সংযুক্ত করুন" নির্বাচন করুন।

4) টাস্ক ক্রিয়েশন উইজার্ড খোলে, সেখান থেকে সরিয়ে নিয়ে যান ...

প্রকৃতপক্ষে একটি স্পষ্ট ইমেল বিকল্প রয়েছে, তবে আপনার যদি এর চেয়ে আরও যুক্তিযুক্ত প্রয়োজন হয় তবে আপনি অবশ্যই পাওয়ারশেল.এক্সই ফায়ার করতে এবং এটির সাথে একটি স্ক্রিপ্ট সংযুক্ত করার জন্য স্টার্ট-এ-প্রোগ্রাম বিকল্পটি ব্যবহার করতে পারেন free আপনার যদি গাইডেন্সের প্রয়োজন হয় তবে টাস্ক ম্যানেজারকে পাওয়ারশেল স্ক্রিপ্টগুলি কীভাবে চালাতে দেওয়া যায় সে সম্পর্কে প্রচুর চমৎকার গুগলযোগ্য হাওটো রয়েছে os

সরাসরি যে বিকল্পটি আমি দেখছি তা হ'ল নির্ধারিত বিরতিতে পাওয়ার শেল ব্যবহার করে ইভেন্ট লগকে পার্স করে টান ব্যবহার। "মাইক্রোসফ্ট স্ক্রিপ্টিং গাই", ওরফে এড উইলসন পাওয়ার-শেলের বিভিন্ন সংস্করণে উপলব্ধ সেমিডলেট ব্যবহার করে কীভাবে ইভেন্ট লগকে পার্স করতে পারে সে সম্পর্কে কয়েকটি দুর্দান্ত ব্লগ পোস্ট লিখেছেন, সুতরাং তাঁর ব্লগটিকে একটি সূচনা পয়েন্ট হিসাবে গ্রহণ করা আমার পরামর্শ হবে।

প্রকৃত সেমিডলেটগুলির জন্য এখন আমার হাতে থাকা স্নিপেটগুলি সরিয়ে ফেলতে এখনই সময় দেওয়া উচিত নয়, তবে দু'একদিনের মধ্যে আবার দেখা হবে এবং অন্য কেউ যদি কিছু নির্বাচিত বাছাই করে না থাকে বা অবদান রাখতে পারে or এটি নিজেই সমাধান করেছেন :-)


2
এরিক, আপনাকে ধন্যবাদ। এখানে সমস্যাটি হ'ল DHCPsrvlog- "দিন" সি: \ উইন্ডোজ \ system32 \ DHCP (ডিএইচসিপি সার্ভার জিইউআই-তে সক্রিয় ডিএইচসিপি অডিটিং সহ), ডিএইচসিপি-সার্ভার ইভেন্ট দর্শকের লগ সহ কোনও ইভেন্ট ভিউয়ার লগকে লিখেনি doesn't Applications and Services Logs(এখনও পর্যন্ত আমার গবেষণা / পরীক্ষার ভিত্তিতে)
TheCleaner

আমি এই লগ সম্পর্কে ভুলে গিয়েছিলাম। তবে আমি বিশ্বাস করি এটি একটি সম্ভাব্য স্থান: ওয়েট এবং টেইল নির্দেশাবলীর সাহায্যে গেট-সামগ্রী ব্যবহার করে পাঠ্য লগটি পার্স করুন। এটি * নিক্সের লেজের মতো। কোনও ঘটনা সর্বদা লগকে পার্স করে চলেছে তা নিশ্চিত করার জন্য, টাস্ক ম্যানেজার স্ক্রিপ্টটি সিস্টেম স্টার্টআপের সময়সূচি নির্ধারণ করতে পারে, তারপরে প্রতিটি (সংক্ষিপ্ততম অন্তর অন্তর) শুরু করতে পারে তবে কেবল একটি চলমান ঘটনার অনুমতি দেয়। যদি আপনার ইভেন্টটি পপ আপ হয় তবে অগ্নিযুক্ত যুক্তি।
এরিক

দেখা যাচ্ছে উইন্ডোজটিতে সমাধান করার জন্য আমারও অনুরূপ লগ পার্সিংয়ের সমস্যা রয়েছে, আমি আমার বিশেষ অনুসন্ধানগুলি নির্দিষ্ট অংশে পোস্ট করব যখন আমি নিশ্চিতভাবে এটি কাজ করে এবং সম্ভবত আমার আশেপাশে থাকা অন্য কোনও বিল্ডিং ব্লকগুলি আপনার পক্ষে কার্যকর হতে পারে। আপনি কি আপনার ডিএইচসিপি লগ থেকে বেশ কয়েকজন প্রতিনিধি তবে অস্পষ্ট সারিগুলি পেস্ট করতে পারবেন? আমি বিশেষ করে ডিভাইসের নাম ফর্ম্যাটটিতে আগ্রহী।
এরিক

1

যদিও এটি আপনার কাঙ্ক্ষিত সমাধানটিকে সম্বোধন করে না, এমন একটি বিকল্প যা আপনার লক্ষ্য অর্জন করতে পারে তা হল নেটওয়ার্কে কোনও নতুন (পূর্বে অদেখা) হোস্ট দেখা গেলে আপনাকে অবহিত করা arpwatch( লিঙ্ক ) ব্যবহার করা to

উইন্ডোজ বিকল্পটি ডেকাফেইনিয়েটেডarpwatch হিসাবে উপস্থিত বলে মনে হচ্ছে তবে আমি কখনও এটি ব্যবহার করি নি তাই এটির পক্ষে ভাল বা খারাপ কথা বলতে পারে না।


ধন্যবাদ। সেখানে ধারণাটি শোনান। প্রয়োজনে আমি সেই পথে নামতে পারি।
TheCleaner

যোগ করা সুবিধাটি হ'ল এটি নতুন মেশিনগুলিকেও ধরে ফেলবে যা স্ট্যাটিক আইপি ব্যবহার করে, যা আপনার বর্ণিত সুযোগে ছিল না তবে সম্ভবত হওয়া উচিত।
mfinni
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.