5

Sto cercando di eseguire uno script PowerShell che interroga per gli account che scadono entro 7 giorni, ho attualmentePowerShell trovare utenti con scadenza 7 giorni

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

Tuttavia quando faccio la seguente modifica, sembra avere qualche problema e finisco per ottenere un file CSV vuoto. In definitiva voglio che il conto scada tra 7 giorni, non di più, non di meno.

$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

Qualcuno può farmi sapere cosa sto facendo male? Ho provato a spostare il pezzo "Where-Object {$ _. AccountExpirationDate -like $ a}", o "-match" invece di "-like", tuttavia questi non mi hanno dato molto successo. Dove sto andando male con questo?

risposta

9

Aggiornamento: è possibile ottenere gli account se si passa un valore stringa, passando un intero inizializza il periodo di tempo a 7 tick!

Search-ADAccount -AccountExpiring -TimeSpan "7" 

altre opzioni valide:

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

potrebbe essere un bug, non funziona anche per me. Ecco una soluzione:

$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

Questa è la risposta più vicina finora, non ho ottenuto il risultato desiderato ancora, ma grazie al tuo aiuto sono diventato più vicino: $ 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

Ciao, dove posso ottenere il cmdlet "Get- ADUser "da? –

+0

È una parte del modulo AD che fa parte di RSAT (Remote Server Administration Tools). http://www.microsoft.com/en-us/download/details.aspx?id=7887 –

2

L'attributo in uso è accountExpires ed è espressa in Pacquet di 100 nanosecondo dal 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] 

è possibile convertirlo in [dateTime] in questo modo:

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

mardi 22 mai 0412 22:00:00 
1

Anche se questo è un thread vecchio .. Vorrei aggiungere una breve nota e una parola di cautela ..

Becreful chiede account per 7 giorni. 7 giorni e 2 ore non saranno 7 giorni e pertanto non corrisponderanno alla query (potrebbe essere il motivo per cui il tuo CSV è vuoto).

Avrai quindi sempre un account che è più di 7 giorni e meno di 8 (ecc.) Per catturare tutto ciò che è all'interno del settimo giorno. ecc ...

Inoltre, il codice di cui sopra
[datetime] .accountExpires
Dammi un errore (user1 -properties accountExpires ADUser Get-)
Impossibile convertire il valore "9223372036854775807" per digitare "System.DateTime". Errore: "Le zecche devono essere comprese tra DateTime.MinValue.Ticks e DateTime.MaxValue.Ticks.Nome parametro: zecche"

Si potrebbe anche rivedere http://social.technet.microsoft.com/Forums/scriptcenter/en-US/b70113b1-a043-4543-afa0-dbba5757d035/powershell-windows-2008-getaduser-accountexpirationdate-returns-wrong-result?forum=ITCG

Problemi correlati