5

Estoy tratando de ejecutar un script de PowerShell que consulta para las cuentas que vencen dentro de los 7 días, momento tengoPowershell encontrar usuarios con vencimiento en 7 días

$a = (get-date).AddDays(7) ; Search-ADAccount -AccountExpiring -TimeSpan "7" | Select-Object SamAccountName,AccountExpirationDate | Sort-Object AccountExpirationDate | Export-Csv 7_days.csv

Sin embargo cuando hago el siguiente cambio, parece tener algunos problemas y termino obteniendo un archivo CSV vacío. En última instancia, quiero que la cuenta expire en 7 días, ni más, ni menos.

$a = (get-date).AddDays(7) ; Search-ADAccount -AccountExpiring -TimeSpan "7" | Select-Object SamAccountName,AccountExpirationDate | Sort-Object AccountExpirationDate | Where-Object {$_.AccountExpirationDate -like $a } | Export-Csv 7_days.csv

¿Alguien me puede decir lo que estoy haciendo mal? He intentado mover la pieza "Where-Object {$ _. AccountExpirationDate -like $ a}", o "-match" en lugar de "-like", sin embargo, esto no me ha tenido mucho éxito. ¿Dónde me estoy equivocando con esto?

Respuesta

9

Actualización: puede obtener las cuentas si pasa un valor de cadena, pasar un número entero inicializa el intervalo de tiempo a 7 ticks! otros

Search-ADAccount -AccountExpiring -TimeSpan "7" 

opciones válidas:

Search-ADAccount -AccountExpiring -TimeSpan (New-TimeSpan -Days 7) 
Search-ADAccount -AccountExpiring -TimeSpan ([TimeSpan]::FromDays(7)) 

podría ser un error, que no funciona para mí también. Aquí hay una solución:

$NeverExpires = 9223372036854775807 
$ExpringIn = (Get-Date).AddDays(7) 

Get-ADUser -Filter * -Properties accountExpires | 
Where-Object {$_.accountExpires -ne $NeverExpires -and [datetime]::FromFileTime([int64]::Parse($_.accountExpires)) -lt $ExpringIn } 
+0

Esta es la respuesta más cercana hasta el momento, no he conseguido el resultado deseado todavía, pero gracias a su ayuda se ha acercado: $ NeverExpires = 9223372036854775807; $ ExpringIn = (Get-Date) .AddDays (7); foreach ($ item in Get -ADUser -Filter * -Properties accountExpires | Where-Object {$ _. AccountExpires -ne $ NeverExpires -and [datetime] :: FromFileTime ([int64] :: Parse ($ _. AccountExpires)) -lt $ ExpringIn} | select-object SamAccountName, accountExpires) {Write-Host $ item.SamAccountName ([datetime] :: FromFileTime (($ item.accountExpires). "msDS-UserPasswordExpiryTimeComputed"))} – perlnoob

+0

Hola, ¿dónde puedo obtener el cmdlet "Get- ADUser "de? –

+0

Es una parte del módulo AD que forma parte de RSAT (Herramientas de administración remota del servidor). http://www.microsoft.com/en-us/download/details.aspx?id=7887 –

2

El atributo en uso es accountExpires y se expresa en Pacquet 100 nano segundo desde 1600

PS C:\Windows\system32> Get-ADuser user1 -Properties accountExpires 


accountExpires : 129821976000000000 
DistinguishedName : CN=user1 users,OU=OUTest,DC=dom,DC=fr 
Enabled   : True 
GivenName   : user1 
Name    : user1 users 
ObjectClass  : user 
ObjectGUID  : b1bef798-8e36-45ff-ad11-e79f89769efc 
SamAccountName : user1 
SID    : S-1-5-21-3115856885-816991240-3296679909-1146 
Surname   : Users 
UserPrincipalName : [email protected] 

puede convertir a [fechaHora] así:

PS> [datetime](Get-ADuser user1 -Properties accountExpires).accountExpires 

mardi 22 mai 0412 22:00:00 
1

Aunque este es un hilo antiguo ... Permítanme agregar una nota rápida y una palabra de advertencia ...

Solicite las cuentas que tienen 7 días de antigüedad. 7 días y 2 horas no serán 7 días y, por lo tanto, no coincidirán con la consulta (es posible que su CSV esté vacío).

Por lo tanto, siempre querrá decir una cuenta que tenga más de 7 días, y menos de 8 (etc.) para capturar todos los que estén dentro del séptimo día. etc ...

Además, el código anterior
[fecha y hora] (Get-ADUser -Propiedades accountExpires usuario1) .accountExpires
dame un error
No se puede convertir el valor "9223372036854775807" a tipo "System.DateTime". Error: "Las marcas deben estar entre DateTime.MinValue.Ticks y DateTime.MaxValue.Ticks.Nombre Parámetro: garrapatas"

También podría revisar http://social.technet.microsoft.com/Forums/scriptcenter/en-US/b70113b1-a043-4543-afa0-dbba5757d035/powershell-windows-2008-getaduser-accountexpirationdate-returns-wrong-result?forum=ITCG

Cuestiones relacionadas