inaktív felhasználói fiókok keresése a tartományban
az Active Directory egy címtárszolgáltatás, amely információkat tárol a felhasználókról, a számítógépekről és a kapcsolódó objektumokról. Így találhat inaktív felhasználói fiókokat.
ez egy relációs információk adatbázisa, amelyet idővel karbantartani kell, hogy hasznos és releváns legyen. Egy könyvtárnak már nem használt fiókjai lesznek. A fiókok megtalálása az Active Directory – ban nem olyan egyszerű, mint amilyennek első pillantásra hangzik. Vegyük át az inaktív felhasználói fiókok keresését és az eltávolításuk automatizálását.
keresési feltételek meghatározása
határozzuk meg, mi szükséges ehhez a folyamathoz. Célunk, hogy megtaláljuk azokat a munkavállalói fiókokat, amelyek hosszabb ideig nem jelentkeztek be a hálózatba. Mindig 90 vagy 120 napot használtam jó intézkedésként az inaktivitás lekérdezésére, de ez a szám olyan alacsony lehet 14 napok. El kell döntenie, hogy mi a megfelelő a szervezet számára. 90 nap ad egy elég nagy párna, hogy az emberek az irodából a nyaralás, családi vészhelyzetek, vagy kiterjesztett orvosi levelek. Amint a fiókok elérik a 90 napos inaktivitást, szeretnénk letiltani ezeket a fiókokat, és áthelyezni őket egy külön szervezeti egységbe.
annak meghatározása, hogy mit keresünk először, lehetővé teszi számunkra, hogy egy egyszerű szabálykészletet hozzunk létre. A szabályrendszerünk így néz ki:
- keresse meg és tiltsa le azokat az aktív fiókokat, amelyek 90 napig nem rendelkeznek bejelentkezési tevékenységgel.
- minden letiltott fiók áthelyezése a letiltott felhasználók OU
- minden letiltott felhasználót jelöljön meg egy megjegyzéssel, hogy egy automatizált folyamat letiltotta.
fiók inaktivitási tulajdonságok keresése
minden felhasználói fiók több attribútummal rendelkezik, amelyek bejelentkezési információkat tartalmaznak. Olyan attribútumokat akarunk találni, amelyek az utolsó bejelentkezési időt mutatják. Ha megtaláljuk ezeket az attribútumokat, felhasználhatjuk őket olyan fiókok lekérdezésére, amelyek egy bizonyos dátum óta nincsenek bejelentkezve. A PowerShell segítségével megjeleníthetjük az összes szabálykészletet, és kiválaszthatjuk a használni kívánt attribútumot.
a Get-ADUser a leggyakrabban használt parancsmag a felhasználói információk megjelenítéséhez. Használhatod a Get-ADObject és a Search-ADAccount parancsmagot, de a Get-ADUser a legjobb parancsmag a feladatunkhoz. Az összes felhasználói tulajdonság megjelenítéséhez hozzá kell adnunk a-properties * parancsot a parancsmag szintaxisához. Ha kihagyjuk ezt a szintaxist, akkor csak az alapértelmezett tulajdonságokat fogjuk látni, ami csak 10 tulajdonság.
Get-ADUser Michael_Kanakos -Properties *
a lekérdezésből hosszú mezőlistát adunk vissza (több mint 150!). Kereshetünk attribútumok tartalmaznak bizonyos szavakat helyettesítő karakterek használatával. Ez segít megtalálni azokat az attribútumokat, amelyek hasznosak lehetnek a feladatunk szempontjából. Meg akarjuk találni a bejelentkezési információkat, ezért keressük meg a Logon szót tartalmazó attribútumokat.
miután elmondtuk a PowerShell-nek, hogy minden tulajdonságot megkapjon, hasznos lenne, ha korlátoznánk a tulajdonságok listáját, hogy csak azokat a tulajdonságokat jelenítsük meg, amelyek megfelelnek a word bejelentkezésének. Select-Object lehetővé teszi, hogy nem egy wild-card mérkőzés és korlátozza az eredményeket. A / karakter (az úgynevezett “cső”) veszi az eredményeket a bal oldalon, és átadja őket a Select-Object. A Select-Object ezután végrehajtja a wild-card egyezést, majd korlátozza az eredményeket a wild-card kritériumaink alapján.
Get-ADUser username -Properties * | Select-Object *logon*
BadLogonCount : 0
lastLogon : 132181280348543735
LastLogonDate : 11/11/2019 9:08:45 PM
lastLogonTimestamp : 132179981259860013
logonCount : 328
LogonWorkstations :
MNSLogonAccount : False
SmartcardLogonRequired : False
az eredmények kissé eltérnek attól függően, hogy mi az Active Directory tartomány funkcionális szintje. A keresés nyolc attribútumot ad vissza. Három ígéretesnek tűnik: LastLogon, LastLogonDate és LastLogonTimeStamp. Néhány érték kissé furcsának tűnhet, ha nem ismeri, hogy az Active Directory hogyan tárolja a dátum/idő információkat bizonyos attribútumokban. Néhány dátuminformáció hagyományos dátum-idő információ,néhányat pedig “kullancsként” mentenek.”
PowerShell és. NET-keretrendszer dátum – az időértékek a dátumokat jelölik a kullancsok számaként 12: 00 óta január 1, 0001. A kullancsok egy tízmilliomod másodpercnek felelnek meg, ami azt jelenti, hogy milliszekundumonként 10 000 kullancs van. Vannak matematikai parancsmagok, amelyek a kullancsokat szabványos dátumformátumba konvertálhatják.
a PowerShell a dátumot/időt jelző tényleges pipát jeleníti meg. Ha kényelmesen konvertálja a kullancsokat dátumformátumba, akkor megnézheti ezeket a mezőket Az Active Directory felhasználói és számítógépek vagy az Active Directory felügyeleti központjában. Mindkét alkalmazásban, a kullancsok idő-dátum formátumban vannak ábrázolva.
ADUser-Logon-Properties
bejelentkezési attribútumok magyarázata
keresésünk több olyan tulajdonságot talált, amelyek dátum/idő bejelentkezési információkat mutatnak. Két tulajdonságnak ugyanaz a dátuma és ideje, és az egyik nem. Mi folyik itt?
a dátum-idő információ varianciája a tervezés szerint van, és azért van érvényben, hogy megvédje a DC-ket a replikációs forgalomtól, hogy megpróbálja az összes bejelentkezési információt szinkronban tartani. A lastlogon tulajdonság minden alkalommal frissül, amikor hitelesítést végez, de az adatokat azon a DC-n tárolja, amelyhez hitelesített, és nem replikálja a többi DC-re. a LastLogonTimeStamp és a LastLogonDate tulajdonságok minden DC-re replikálódnak, de a replikáció csak ritkán történik.
ha megnézzük a dátumokat, láthatjuk, hogy a késleltetett replikáció hogyan befolyásolhatja lekérdezésünket. Figyeljük meg, hogy LastLogonTimeStamp valójában két nap mögött ebben a példában. Minden alkalommal, amikor egy felhasználó interaktív módon bejelentkezik, megérinti a hálózati fájlmegosztást, vagy más olyan tevékenységet végez, amelyhez a hálózatnak hitelesítenie kell a fiókot, a bejelentkezési adatokat az Active Directoryban tárolja. Ha a dc lemásolja ezeket az adatokat minden alkalommal, amikor valaki megérintett valamit a hálózaton, akkor a DC-k túlterheltek lehetnek egy nagy környezetben. Ennek eredményeként egyes bejelentkezési információk pontosak, de nem replikálódnak, egyes bejelentkezési információk pedig ismétlődnek, de csak alkalmanként.
igényeinkhez nincs szükségünk a pontos bejelentkezési időbélyegre. Csak olyan fiókokat kell találnunk, amelyek hosszú ideje nem jelentkeztek be (több mint 90 nap). Bármely érték hasznos lehet, még akkor is, ha a dátum néhány nappal ki van kapcsolva. Ha a bejelentkezési dátumokat használjuk példaként, a lekérdezett idő lehet 11/11 vagy 11/13, az általunk használt értéktől függően. Gyorsan előre három hónapot, és tegyük fel, hogy soha többé nem jelentkeztem be. Egy dátum inaktívként jelölné meg, ha meghaladja a 90 napot, egy mező pedig nem. De ha ezt a folyamatot havonta futtatom, akkor a következő ellenőrzéskor elkapom a fiókot. Ez a kritikus rész. Ha ezt rendszeresen tesszük, akkor bármelyik mezőt használhatjuk, amíg következetesen ellenőrizzük.
a LastLogonDate tulajdonságot két okból használtam. Először is, ez már dátumérték, tehát nem kell foglalkoznom az érték konvertálásával. Másodszor, ez egy replikált érték, és ez megkönnyíti az életemet. Ha a Lastlogont használnám, olyan dátumokkal rendelkeznék, amelyek nem naprakészek azok számára, akik a hálózatom más tartományvezérlőivel szemben hitelesítenek. Minden felhasználónak meg kell kérdeznie a helyi DC-t, hogy megkapja a legújabb időbélyeget, és ez sok munka, és nem túl hatékony.
ahhoz, hogy az információ egyetlen fiókra kerüljön, a kód egyszerű.
get-aduser Michael_Kanakos -properties LastLogonDate | Select-Object Name, LastLogonDate
Name LastLogonDate
---- -------------
mkanakos 11/11/2019 9:08:45 PM
ehhez minden felhasználóm számára csak egy kicsit több kód szükséges. Szűrőt kell használnunk az összes felhasználói fiók lekérdezéséhez.
Get-ADUser -filter * -properties LastLogonDate | Select-Object Name, LastLogonDate
most csak azokat a fiókokat keressük meg, amelyek bejelentkezési dátuma 90 napnál régebbi. Szükségünk van az aktuális dátum mentett használni, mint egy összehasonlító operátor.
$date = (get-date).AddDays(-90)
Get-ADUser -Filter {LastLogonDate -lt $date} -properties LastLogonDate | Select-Object Name, LastLogonDate
ez a kód minden olyan felhasználót lekér, aki 90 napja nem jelentkezett be. A 90 nappal ezelőtti dátumot egy változóba mentjük. Létrehozhatunk egy hirdetési szűrőt, hogy az adott dátumnál kevesebb bejelentkezést találjunk. Ezután hozzá kell adnunk a csak aktív fiókok lekérdezésének követelményét. Ebben a példában a splatting segítségével olvashatóbbá teszem a kódot, mert a szintaxis nagyon hosszú. A splatting ad parancsmagok bonyolultak lehetnek, ezért a szintaxis hosszú formájú változatát is megmutattam a splatting példa alatt.
$date = (get-date).AddDays(-90)
$paramhash = @{
Filter = "LastLogonDate -lt $date -and Enabled -eq $true"
Properties = 'LastLogonDate'
}
$SelectProps = 'Name','LastLogonDate','Enabled','DistinguishedName'
$InactiveUsers = Get-Aduser @paramhash | Select-Object $SelectProps
$InactiveUsers = Get-ADUser -Filter {LastLogonDate -lt $date -and Enabled -eq $true} -properties LastLogonDate, DistinguishedName | Select-Object Name, LastLogonDate, Enabled, DistinguishedName
ez lehetővé teszi számunkra az inaktív felhasználókat, akik engedélyezve vannak. Az eredményeket egy változóba mentjük újrafelhasználás céljából. A DistinguishedName tulajdonságra később van szükség. Miután megtaláltuk a felhasználókat, dolgozhatunk a következő lépésen: a fiókok letiltása. A Set-ADUser parancsmagot használjuk az AD felhasználói fiók módosításához.
$Today = Get-Date
$DisabledUsers = (
$InactiveUsers | Foreach-object {
Set-User $_.DistinguishedName -Enabled $false -Description "Acct disabled on $Today via Inactive Users script"}
)
letiltottuk felhasználói fiókjainkat. Itt az ideje, hogy áthelyezzük őket egy új OU-ba. Példánkban a fogyatékkal élő felhasználók nevű OU-t fogjuk használni. Az OU megkülönböztető neve “OU=Disabled-Users, DC=Contoso, DC=Com” a Move-ADObject parancsmagot használjuk a felhasználók áthelyezésére a cél OU-ra.
$DisabledUsers | ForEach-Object {
Move-ADObject $_.DistinguishedName -TargetPath "OU=Disabled-Users,DC=Contoso,DC=Com"}
utolsó lépésünk során a Move-ADObject-et használtuk a felhasználók új szervezeti egységbe történő áthelyezéséhez. Most már megvan a szükséges alapkód egy megbízható, megismételhető automatizált feladat elvégzéséhez. Mi a következő lépés? Ez az Ön egyéni igényeitől függ. Ezt a kódot úgy lehet beállítani, hogy minden hónapban ugyanabban az időben automatikusan fusson. Ennek egyik egyszerű módja egy ütemezett feladat létrehozása a kód havi futtatásához.
van még hozzá, hogy ezt a kódot, hogy jobb. A hibakeresés kódja és a további felhasználói információs mezők két hasznos kiegészítés lenne. Az ilyen típusú feladatokat futtató legtöbb csapat jelentést készít arról, hogy mi volt letiltva, hogy valaki áttekinthesse, így a További mezők var. A jelentés hasznosabbá tétele érdekében további mezőket is felvehet az Active Directoryból. Ezt a feladatot egy lépéssel tovább vihetjük, ha létrehozunk egy másik feladatot a fogyatékkal élő felhasználók 6 hónap elteltével történő törlésére.
a kihívást jelentő automatizálási kérelmek megoldása sokkal könnyebb, ha a feladatokat kezelhető darabokra osztják. A követelményekkel kezdtük, és kis lépésekben építettük fel szintaxisunkat; megerősítve, hogy minden lépés működik, Mielőtt megpróbálnánk hozzáadni egy másik változót. Ezzel megkönnyítettük ezt a feladatot, és remélhetőleg nagyszerű tanulási élményt nyújtottunk.