2016-05-29 11 views
0

Ich arbeite an einem Powershell-Skript zur Automatisierung der AD-Wartung und zur Verschiebung inaktiver AD-Computer mithilfe des Attributs lastLogonTimestamp von einer bestimmten Organisationseinheit in Windows 2008 R2.Verschieben von inaktiven AD-Computern mithilfe des lastLogonTimestamp-Attributs

Beim Ausführen des Skripts bekomme ich jedoch immer den folgenden Fehler. Ich bin ratlos und würde mich über jeden Beitrag freuen, warum dieses Skript sich darüber beschwert.

Move-ADObject : Cannot validate argument on parameter 'Identity'. The argument is null. Supply a non-null argument and try the command again.

Unten ist der Teil des Skripts, dass die obigen Fehler werfen:

### Find and all inactive computer objects 

import-module activedirectory 
$domain = "XXXXX.XXXXX.XXXXX" 
$DaysInactive = 120 
$time = (Get-Date).Adddays(-($DaysInactive)) 
$pwdset = (Get-Date).AddDays(-($DaysInactive)) 

### Get all AD computers with lastLogonTimestamp less than our time  
$OldComputers = Get-ADComputer -Filter {LastLogonTimeStamp -le $time} -Properties lastlogontimestamp | 
Where-Object { 
$_.DistinguishedName -like "OU=Source OU,DC=XXXX,DC=XXXX,DC=XXXX" 
} 

## Output computer accounts to be disabled to HTML table 
$OldComputersLog = $OldComputers | ConvertTo-HTML lastlogontimestamp ` 
-title "Computer Accounts that will be deleted" ` 
    -head $head ` 
    -body "<H2><center>Moved and disabled computers for more than 120 days</center></H2>"| ` 
out-file C:\AD\move\OldComputers.html 

### Move inactive computers to disabled OU 
$OldComputers | Disable-ADAccount |Move-ADObject -TargetPath "OU=Destination OU,DC=XXXX,DC=XXXX,DC=XXXX" 

Antwort

1

wie Disable-ADAccount Sieht nicht ausgegeben ein ADObject. Versuchen -PassThru

$OldComputers | 
Disable-ADAccount -PassThru | 
Move-ADObject -TargetPath "OU=Destination OU,DC=XXXX,DC=XXXX,DC=XXXX" 
0

Hier ist eine frühere Zugabe thread auf Inaktiv-Computern in einer bestimmten Domäne der OU basierend auf Last Logon Time Stamp zu erhalten.

Import AD-Modul

Import-Module ActiveDirectory 

define the time window --- we specify 90 days plus the official windows lag of 14 days 

$time = (Get-Date).Adddays(-104) 

prüfen Existenz OU und erstellen Sie dann vor, wenn nicht

[string] $Path = 'OU=OUName,DC=domain,DC=com' 
try 
{ 
    if (!([adsi]::Exists("LDAP://$Path"))) 
    { 
     #Create OU since it does not yet exist 
     NEW-ADOrganizationalUnit “StaleComputers” –path “OU=SomeOU, DC=domain, DC=com” 
    } 
    else { Write-Debug "OU Already Exists: $Path" } 
} 
catch [Exception] { 
    return $_.Exception.Message 
} 

jetzt gehen wir für Computer

Get-ADComputer -Filter { LastLogonTimeStamp -lt $time } | Move-ADObject -TargetPath $Path -WhatIf 

Jetzt prüfen wir für inaktiv überprüfen Computer, die inaktiv sind

Es gibt einige Attribute, die Ihnen bei der Entscheidung helfen, ob ein AD-Benutzerkonto oder ein Computerkonto aktiv oder inaktiv ist. Diese Attribute sind LastLogon und LastLogonTimeStamp.

Auf der anderen Seite, Um mögliche Konten zu vermuten, die inaktiv sind, können Sie die folgenden Schritte ausführen: -

-Check für die Benutzerkonten in dem das Computer-Konto-Kennwort für über eine nicht zurückgesetzt wurde beträchtlicher Zeitraum, sagen wir für 30 Tage, 60 Tage oder 90 Tage. - Ermitteln Sie eine Liste aller Computer in einer Tabelle, für die seit mehr als 90 Tagen kein Kennwort zurückgesetzt wurde, einschließlich Name, Definierter Name und Datum und Uhrzeit für die letzte Einstellung des Kennworts. - Sie können auch die folgenden 'dsquery'-Befehle verwenden, um inaktive Benutzer- und Computerkonten in Ihrem AD zu erkennen.

Um Benutzer zu ermitteln, die sich in den letzten Wochen nicht bei ihren Konten angemeldet haben, können Sie den folgenden Befehl dsquery ausführen.

dsquery Benutzer -inactive

Um in der Detail zu diesem Link finden: https://www.linkedin.com/pulse/cleaning-up-obsolete-user-computer-accounts-from-active-ajit-singh

hoffe, das hilft!