我正在开发一个Powershell脚本来自动执行AD维护,并通过在Windows 2008 R2中利用从一个特定OU到另一个特定OU的lastLogonTimestamp属性来移动非活动AD计算机。
但是,在运行脚本时,我不断收到以下错误。我很难过,并且很感激为什么这个脚本抱怨这个。
Move-ADObject : Cannot validate argument on parameter 'Identity'. The argument is null. Supply a non-null argument and try the command again.
以下是引发上述错误的脚本部分:
### 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"
答案 0 :(得分:1)
看起来Disable-ADAccount
没有输出ADobject。尝试添加-PassThru
$OldComputers |
Disable-ADAccount -PassThru |
Move-ADObject -TargetPath "OU=Destination OU,DC=XXXX,DC=XXXX,DC=XXXX"
答案 1 :(得分:0)
这是一个较早的thread,用于根据上次登录时间戳在特定域的OU中获取非活动计算机。
导入AD模块
Import-Module ActiveDirectory
define the time window --- we specify 90 days plus the official windows lag of 14 days
$time = (Get-Date).Adddays(-104)
检查是否存在OU并创建(如果不存在)
[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
}
现在我们继续检查计算机
Get-ADComputer -Filter { LastLogonTimeStamp -lt $time } | Move-ADObject -TargetPath $Path -WhatIf
现在我们检查非活动的非活动计算机
Search-ADAccount -accountinactive -ComputersOnly | ? { $_.lastlogondate -lt $time } | Move-ADObject -TargetPath $Path -WhatIf
有一些属性可帮助您确定AD用户帐户或计算机帐户是处于活动状态还是非活动状态。这些属性是LastLogon和LastLogonTimeStamp。
另一方面,为了怀疑潜在的帐户处于非活动状态,您可以执行以下步骤 - :
- 检查计算机帐户密码在相当长的一段时间内未重置的用户帐户,例如30天,60天或90天。 - 获取表中所有未在90天内重置密码的计算机列表,包括名称,专有名称和密码最后设置日期和时间。 - 您还可以使用以下“dsquery”命令来检测AD中的非活动用户和计算机帐户。
要查找过去几周未登录其帐户的用户,可以运行以下dsquery命令。
dsquery user -inactive
要详细了解此链接:https://www.linkedin.com/pulse/cleaning-up-obsolete-user-computer-accounts-from-active-ajit-singh
希望这有帮助!
答案 2 :(得分:0)
导入模块ActiveDirectory
$ SourceOU =“ OU =目的地OU,DC = XXXX,DC = XXXX,DC = XXXX”
$ DestinationOU =“ OU =目标OU,DC = XXXX,DC = XXXX,DC = XXXX”
$ lldate = [DateTime] :: Today.AddDays(-90);
$ computers = Get-ADComputer -Filter‘PasswordLastSet -le $ lldate’-Searchbase $ SourceOU
foreach($ computers在$ computers中){
$ desc =“联系支持,已在$(Get-Date)-$($ computer.Description)上禁用”
Set-ADComputer $ Computer-说明$ desc-启用$ false
Move-ADObject $ computer -TargetPath $ destinationOU
添加内容C:\ PShell \ computers.txt-值“找到$ computer,已移动并禁用”
}