Get-ADComputer -Filter * -Properties *
Obtenha apenas as propriedades que você pretende usar ... é mais eficiente. Recuperar todas as propriedades de todos os computadores no domínio quando você realmente não precisa de todas as propriedades é desnecessariamente exigente em seu controlador de domínio. É um desperdício.
Get-ADComputer -Filter * -Properties OperatingSystem, LastLogonDate
é melhor, pois você não precisa de todas as propriedades. (A propriedade 'Nome' está sempre incluída.)
| FT Name, OperatingSystem, LastLogonDate -Autosize
Não formate a saída até o final. Em outras palavras, Format-Table e Format-List devem ser os cmdlets muito finais em toda a cadeia de cmdlets para os quais os dados são canalizados.
Get-ADComputer -Filter * -Properties OperatingSystem, LastLogonDate |
Where { $_.LastLogonDate -GT (Get-Date).AddDays(-30) }
Isso é um pouco melhor, mas ainda há alguma ineficiência, já que você ainda está recuperando um conjunto de dados de todos computadores ... você pode deixar o controlador de domínio fazer a filtragem para você.
$LastMonth = $(((Get-Date).AddDays(-30)).ToFileTime())
Get-ADComputer -LDAPFilter "(lastLogonTimeStamp>=$LastMonth)" -Properties OperatingSystem,LastLogonDate
A razão pela qual eu usei o lastLogonTimeStamp lá (que é um "tempo de arquivo", não um .NET DateTime,) é porque "LastLogonDate" não é um atributo LDAP real. LastLogonDate é simplesmente uma maneira útil do PowerShell de converter automaticamente o atributo lastLogonTimestamp para você. lastLogonTimestamp é o atributo LDAP "real".
Permitir que o controlador de domínio retorne um conjunto filtrado a você, em vez do conjunto completo de TODOS os computadores, significa que há menos dados sendo transmitidos e menos dados para o PowerShell processar.
Observe também que você terá que lidar com computadores que:
- Tenha um (null) LastLogonDate
- Tenha um LastLogonDate de 1/1/1601 ou o início da época.