Powershell脚本内存使用情况

时间:2015-07-06 12:24:54

标签: powershell memory-leaks out-of-memory

我正在运行一个简单的脚本来让所有非活动用户(启用状态)未登录60天,如下所示。该脚本似乎在我的工作站上使用ARS 6.7& WinXP。但是,如果我在另一个工作站上运行相同的脚本ARS 6.9& Win7脚本的RAM使用量随着时间的推移而不断增加。它最终抛出OutofMemory异常(在达到1.5+ GB之后)&中止。在WinXP工作站(ARS v6.7)上运行时,相同的脚本不会消耗超过50 MB的RAM。我扫描的域名非常大,拥有超过550000个帐户。我对这个问题感到很困惑......请帮忙!

[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

}

2 个答案:

答案 0 :(得分:0)

您应该将过滤委派给AD端,引用Get-ADUser帮助:Get-ADUser -filter { lastLogon -le $logonDate }在您的情况下,Get-QADUser无法委派过滤,因此请与Microsoft的AD模块交换:{ {1}}。要获取模块,请为oyur Windows版安装RSAT,然后(如果未默认启用)go"添加/删除Windows组件 - RSAT - 角色管理服务 - AD / LDAP - Windows Powershell模块"并启用它。

答案 1 :(得分:0)

MTA 模式启动Quest Shell已解决此问题。这可以通过在现有快捷方式中添加“-mta”参数来完成。

例如

  

C:\ Windows \ System32下\ WindowsPowerShell \ V1.0 \ powershell.exe   -psconsolefile“C:\ Program Files \ Quest Software \ Management Shell for AD \ ConsoleSettings.psc1”-noexit -Mta -command“。'C:\ Program   文件\ Quest Software \ Management Shell for AD \ qsft.ps1'“