2015-07-06 2 views
1

Я запускаю простой скрипт, чтобы получить все неактивные пользователи (включенное состояние), которые не вошли в систему в течение 60 дней, как показано ниже. Сценарий отлично работает на моей рабочей станции с ARS 6.7 & WinXP. Но если я запускаю тот же скрипт на другой рабочей станции с ARS 6.9 & Win7, использование ОЗУ в сценарии увеличивается с течением времени & наконец-то выдает исключение OutofMemory (после достижения 1,5+ ГБ) & прерывает. Тот же сценарий, который запускается на рабочей станции WinXP (ARS v6.7), не потребляет более 50 МБ ОЗУ. Домен, который я сканирую, довольно большой, имея более 550000 учетных записей. Я совершенно смущен этой проблемой здесь ... Помогите!Скрипт Powershell Использование памяти

[datetime]$TodayDate = Get-Date 
[datetime]$InActivityDate = $TodayDate.AddDays(-62).Date 

try 
{ 
Get-QADUser -SearchRoot $SearchOU -Service $Service -SizeLimit $SizeLimit -PageSize 1000 -Enabled -DontUseDefaultIncludedProperties -IncludedProperties SamAccountName,` 
Name,ParentContainer,DN,LastLogon,WhenCreated,PasswordLastSet,employeeID,` 
employeeNumber,Manager,AccountIsDisabled,co,scriptPath |` 

#Filter out inactive accounts 
Where-Object {$_.LastLogonTimeStamp -lt $InActivityDate} |` 

Select-Object SamAccountName,Name,ParentContainer,DN,LastLogon,WhenCreated,` 
PasswordLastSet,employeeID,employeeNumber,Manager,` 
AccountIsDisabled,co,scriptPath | Export-Csv $OutputFile -NoTypeInformation 
} 

catch 
{ 
$ErrorMessage = $_.Exception.Message 
$ErrTime = Get-Date 
Write-Host "Error occured:`n$ErrorMessage" -ForegroundColor Red 
Write-Output "[$ErrTime] Error occured:`n$ErrorMessage" | Out-File $OutputFile -Append 

} 

ответ

0

Вы должны делегировать фильтрацию на сторону AD, цитируя Get-ADUser помощи: Get-ADUser -filter { lastLogon -le $logonDate } В вашем случае Get-QADUser не может делегировать фильтрацию, поэтому обмен с модулем AD Microsoft: Get-ADUser -filter { lastLogon -le $InactivityDate }. Чтобы получить модуль, установите RSAT для версии oyur Windows, затем (если он не включен по умолчанию) перейдите «Добавить/удалить компоненты Windows - RSAT - Услуги администрирования ролей - AD/LDAP - Windows Powershell module» и включите его.

+0

thx для ответа Vesper. к сожалению, у меня нет локальных прав администратора и ядра powershell не упакованы. Я попробую убедить моего локального администратора sys для этого;) –

+0

Вы, скорее всего, получите одобрение, потому что модуль AD не требует ничего, кроме учетной записи домена, для извлечения данных. И вообще, вам, скорее всего, потребуется больше мониторинга, чем просто AD, поэтому, имея готовую RSAT, вы будете полезны как вам, так и вашему системному администратору. – Vesper

+0

понял, позвольте мне вернуться к вам. Thx снова! =) –

0

Запуск командной оболочки в MTA режим решил эту проблему. Это можно просто сделать, добавив параметр «-mta» в существующий ярлык.

например.

C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe -PSConsoleFile "C: \ Program Files \ Quest Software \ Management Shell для AD \ ConsoleSettings.psc1" -noexit -Mta -команда ". 'C: \ Program Файлы \ Программное обеспечение Quest \ Management Shell для AD \ qsft.ps1'"

Смежные вопросы