AD उपयोगकर्ताओं को खोजें जो 90 दिनों से अधिक समय से निष्क्रिय हैं और पिछले 90 दिनों में नहीं बनाए गए हैं


0

मैं एक AD क्लीनअप स्क्रिप्ट पर काम कर रहा हूं, लेकिन इसे सही तरीके से काम करने में परेशानी हो रही है। मैं जिन मापदंडों को पूरा करने का प्रयास कर रहा हूं, वे उपयोगकर्ता पिछले 90 दिनों से लॉग इन नहीं हुए हैं और 90 दिन पहले बनाए गए थे। समस्या यह है कि यह उन उपयोगकर्ताओं को मिल रहा है जो पिछले 90 दिनों के भीतर बनाए गए थे। यहां वह स्क्रिप्ट है जिस पर मैं काम कर रहा हूं:

Import-Module ActiveDirectory

$OU="ou=Users,ou=middle,ou=top,dc=contoso,dc=com"


$CSV_USERS=""


foreach ($x in $OU) {
$USERS=Search-ADAccount -AccountInactive -Timespan 90.00:00:00 -Searchbase $x | Where {$_.whenCreated -le ((Get-Date).AddDays(-90).toFileTime())}



if ($USERS) {
  $CSV_USERS=$CSV_USERS + $USERS
}
}

$date=Get-Date -Format "dMy"
$path="C:\Scripts\TestScript_disable_users_"+$date+".csv"
if($CSV_USERS) {
    Out-File -FilePath $path -InputObject $CSV_USERS
}

एक बार स्क्रिप्ट ठीक से काम करने के बाद मैं $ CSV_USERS = $ CSV_USERS + $ USERS के तहत निम्न पंक्तियाँ जोड़ूंगा

$USERS | Disable-AdAccount 
$USERS | Move-AdObject -TargetPath "OU=Inactive employees,dc=contoso,dc=com"

क्या कोई मुझे यह पता लगाने में मदद कर सकता है कि मेरे लिए "" कहाँ "पैरामीटर काम नहीं कर रहा है?"


कोई whenCreatedसंपत्ति नहीं है। और यह भी समझ में नहीं आता है। यदि search-adaccount -accountinactive -timespan 90उपयोगकर्ता लौटाते हैं, तो इन उपयोगकर्ताओं को 90 दिनों से अधिक समय पहले बनाया जाना होगा, अन्यथा यह समय के कारण उन्हें नहीं लौटाएगा। ताकि आप अपने की जरूरत नहीं है where90इसके बजाय अपने समय को बदलें 90.00:00:00और इसे ठीक से काम करना चाहिए
सिमोन

@ आप क्या त्रुटि या परिणाम प्राप्त कर रहे हैं? AD में एक विचित्र संपत्ति है, लेकिन खोज-Adaccount वापस नहीं आता है। इसके लिए आपको AD की दूसरी कॉल की आवश्यकता होगी।
uSlackr

ऐसा लगता है कि आपने दूसरा खाता बनाया है, जो आपके थ्रेड के भीतर टिप्पणी करने और उत्तर को स्वीकार करने की आपकी क्षमता में हस्तक्षेप करेगा। देखें कि दो खातों / उपयोगकर्ताओं को एक लिंक / मर्ज / संयोजित / संयोजित कैसे किया जा सकता है? और / या मैंने गलती से दो खाते बनाए हैं; मैं उनका विलय कैसे करूं? अपने खातों को मर्ज करने के तरीके के बारे में मार्गदर्शन के लिए।
DavidPostill

जवाबों:


1

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

Import-Module Active Directory

$thresholdDate = (get-date).AddDays(-90)

$oldUsers = get-aduser -filter * -searchbase "ou=Users,ou=middle,ou=top,dc=contoso,dc=com" -properties whenCreated,LastLogonDate | 
where {$_.whenCreated -lt $thresholdDate -And $_.LastLogonDate -lt $thresholdDate}

$date=Get-Date -Format "dMy"
$path="C:\Scripts\TestScript_disable_users_$date.csv"

$oldUsers | export-CSV -notypeinformation $path

$oldUsers | DisableADAccount

LastLogonDate का उपयोग करने के नुकसान से सावधान रहें । मान केवल प्रत्येक 12 दिनों या किसी भी उपयोगकर्ता के लिए अपडेट किया गया है: http://windowsitpro.com/systems-management/use-get-aduser-find-inactive-ad-users


0

परीक्षण नहीं किया गया लेकिन यह आपको गतिमान होना चाहिए।

Import-Module ActiveDirectory

$OU="ou=Users,ou=middle,ou=top,dc=contoso,dc=com"


$CSV_USERS=""
$OldUserAccts = ""

foreach ($x in $OU) {
    Search-ADAccount -AccountInactive -Timespan 90.00:00:00 -Searchbase $x | foreach {
        $user = get-aduser $_ -Properties whenCreated
        if ($user.whenCreated -le ((Get-Date).AddDays(-90).toFileTime())) { $oldUSerAccts = $oldUserAccts + $User}
    }            


if ($OldUserAccts) {
  $CSV_USERS=$CSV_USERS + $OldUserAccts
}
}

$date=Get-Date -Format "dMy"
$path="C:\Scripts\TestScript_disable_users_"+$date+".csv"
if($CSV_USERS) {
    Out-File -FilePath $path -InputObject $CSV_USERS
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.