मैं PowerShell का उपयोग करके सक्रिय निर्देशिका में अनाथ कंप्यूटर ऑब्जेक्ट कैसे खोज सकता हूं?


10

मैं अपने सक्रिय निर्देशिका डोमेन में उन सभी कंप्यूटर खातों को कैसे पा सकता हूं जो PowerShell का उपयोग करके x दिनों से निष्क्रिय हैं?

ध्यान दें कि मैं वास्तव में यह करना जानता हूं। यह एक स्व-उत्तरित प्रश्न है, जिससे कि ज्ञान प्राप्त किया जा सके। अगर किसी और के पास एक बेहतर तरीका है, तो इसे पोस्ट करने के लिए स्वतंत्र महसूस करें!

जवाबों:


10

यह आपको उन सभी कंप्यूटर खातों को देगा, जिनमें पिछले 365 दिनों से कोई गतिविधि नहीं है।

Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 365.00:00:00

यह अंतिम रूप से आपके लिए इसे क्रमबद्ध करेगा।

Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 365.00:00:00 | Sort-Object lastlogondate | Ft name,lastlogondate -auto

यह आपको अक्षम कंप्यूटर खाते देगा।

Search-ADAccount -AccountDisabled -ComputersOnly 

दिलचस्प! मैं (जाहिर है) उस cmdlet के बारे में नहीं जानता था। "खाता सक्रिय" के लिए किस विशेषता को मापा जाता है? lastlogondate? passwordlastset?
एमडीएमरा

मैं 100% निश्चित रूप से देखने जा रहा हूं, लेकिन मुझे पता है कि लास्टगॉन्डेट उन विशेषताओं में से एक है जो यदि आप ऑब्जेक्ट को देखते हैं, तो वापस लौटा दिया जाता है। तकनीकी लेख वास्तव में विस्तार नहीं करता है कि यह किस विशेषता का उपयोग करता है।
माइक

1
इसे थोड़ा और अधिक और अंतिम रूप में देखा जाए तो ऐसा लगता है कि यह लास्टलॉग्टिमेस्टैम्प का रूपांतरण है। स्कीमा में लास्टलॉन्डेट नामक कोई विशेषता नहीं है। उम्मीद है की वो मदद करदे।
माइक

5

कंप्यूटर हर 30 दिन में डिफ़ॉल्ट रूप से अपना खाता पासवर्ड बदलते हैं। यदि किसी कंप्यूटर ने विस्तारित समय अवधि में अपना पासवर्ड नहीं बदला है, तो इसका मतलब है कि वे अब नेटवर्क से नहीं जुड़े हैं।

यह PowerShell स्क्रिप्ट 2 पाठ फ़ाइलों को आउटपुट करेगी। एक विकलांग कंप्यूटर के लिए है, एक अनाथ कंप्यूटर अकाउंट ऑब्जेक्ट के लिए है। आपके पास सक्रिय निर्देशिका PowerShell मॉड्यूल स्थापित होना चाहिए।

इस उदाहरण में, मैं एक "एन्क्रिप्टेड लैपटॉप" OU को बाहर कर देता हूं, क्योंकि वे मोबाइल लैपटॉप हैं जो समय की विस्तारित अवधि के लिए डिस्कनेक्ट हो गए हैं। यदि आपके पास समान सेटअप नहीं है तो आप उस अनुभाग को हटा सकते हैं

Import-Module ActiveDirectory

$Date = [DateTime]::Today

#Sets the deadline for when computers should have last changed their password by.
$Deadline = $Date.AddDays(-365)   

#Makes the date string for file naming
$FileName = [string]$Date.month + [string]$Date.day + [string]$Date.year 


#Generates a list of computer accounts that are enabled and aren't in the Encrypted Computers OU, but haven't set their password since $Deadline
$OldList = Get-ADComputer -Filter {(PasswordLastSet -le $Deadline) -and (Enabled -eq $TRUE)} -Properties PasswordLastSet -ResultSetSize $NULL |
Where {$_.DistinguishedName -notlike "*Encrypted Laptops*"} | 
Sort-Object -property Name | FT Name,PasswordLastSet,Enabled -auto 

#Generates a list of computer accounts that are disabled and sorts by name.
$DisabledList = Get-ADComputer -Filter {(Enabled -eq $FALSE)} -Properties PasswordLastSet -ResultSetSize $null | 
Sort-Object -property Name | FT Name,PasswordLastSet,Enabled -auto

#Creates the two files, assuming they are not $NULL. If they are $NULL, the file will not be created.
if ($OldList -ne $NULL) {
    Out-File "C:\users\marra\desktop\Old$Filename.txt" -InputObject $OldList
}

if ($DisabledList -ne $NULL) {
    Out-File "C:\users\marra\desktop\Disabled$Filename.txt" -InputObject $DisabledList
}

0

एक लाख धन्यवाद! मैं इसमें अपना ट्विस्ट जोड़ना चाहता था। मुझे केवल उन सर्वरों को खोजने की आवश्यकता थी जो या तो अक्षम हैं या अक्षम नहीं हैं और उत्पादन में नहीं हैं। यह वही है जिसके साथ मैं आया था और यह काम करने के लिए लग रहा था।

Import-Module ActiveDirectory

$Date = [DateTime]::Today

#Sets the deadline for when computers should have last changed their password by.
$Deadline = $Date.AddDays(-365)   

#Makes the date string for file naming
$FileName = [string]$Date.month + [string]$Date.day + [string]$Date.year 

#Generates a list of computer server accounts that are enabled, but haven't set their password since $Deadline
$OldList = Get-ADComputer -Filter {(PasswordLastSet -le $Deadline) -and (Enabled -eq $TRUE) -and (OperatingSystem -Like "Windows *Server*")} -Properties PasswordLastSet -ResultSetSize $NULL |
Sort-Object -property Name | FT Name,PasswordLastSet,Enabled -auto 

#Generates a list of computer server accounts that are disabled and sorts by name.
$DisabledList = Get-ADComputer -Filter {(Enabled -eq $FALSE) -and (OperatingSystem -Like "Windows *Server*")} -Properties PasswordLastSet -ResultSetSize $null | 
Sort-Object -property Name | FT Name,PasswordLastSet,Enabled -auto

#Creates the two files, assuming they are not $NULL. If they are $NULL, the file will not be created.
if ($OldList -ne $NULL) {
    Out-File "C:\temp\Old$Filename.txt" -InputObject $OldList
}

if ($DisabledList -ne $NULL) {
    Out-File "C:\temp\Disabled$Filename.txt" -InputObject $DisabledList
} 

0

मुझे पता है कि ओपी ने स्पष्ट रूप से PowerShell के लिए कहा है, लेकिन अगर आपको यह पसंद नहीं है, तो यह नहीं है, और अभी तक एक और Microsoft सिंटैक्स नहीं सीखना चाहते हैं तो निम्नलिखित पायथन स्निपेट आपको उपयोग करने के लिए सही प्रारूप में एक तारीख देगा। LDAP क्वेरी के साथ।

import datetime, time
def w32todatetime(w32):
    return datetime.fromtimestamp((w32/10000000) - 11644473600)
def datetimetow32(dt):
    return int((time.mktime(dt.timetuple()) + 11644473600) * 10000000)

90daysago = datetime.datetime.now() - datetime.timedelta(days=90)
print datetimetow32(90daysago)

जिसे तब सभी विंडोज़ कंप्यूटरों को खोजने के लिए निम्नानुसार इस्तेमाल किया जा सकता था, जिन्होंने पिछले 90 दिनों में अपने पासवर्ड नहीं बदले हैं।

(&(objectCategory=computer)(objectClass=computer)(operatingSystem=Windows*)(pwdLastSet<=130604356890000000))

आपको शायद केवल 30 दिनों की आवश्यकता है क्योंकि विंडोज़ मशीनों के लिए पासवर्ड बदलने के लिए डिफ़ॉल्ट अवधि 30 दिन है, लेकिन 90 ऐसा लगता है कि अगर आप उस पीसी के बारे में भूल गए जो बॉब के डेस्क के नीचे बैठा है और कभी चालू नहीं होता है।

संपादित करें: ओह, मैंने इसमें टाइम-ज़ोन समर्थन भी छोड़ दिया है जो शायद इस उपयोग के मामले में कोई फर्क नहीं पड़ता, लेकिन दूसरों में हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.