【问题标题】:Powershell script Memory usagePowershell 脚本内存使用情况
【发布时间】:2015-07-06 12:24:54
【问题描述】:

我正在运行一个简单的脚本来让所有非活动用户(启用状态)在 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

}

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢 Vesper 的回复。不幸的是,我没有本地管理员权限,核心 powershell 没有打包。我会尝试说服我的本地系统管理员;)
    • 您可能会获得批准,因为 AD 模块不需要域帐户以外的任何东西来检索数据。无论如何,您可能需要进行更多的监控,而不仅仅是 AD,因此准备好 RSAT 对您和您的系统管理员都有好处。
    • 明白,让我回复你。再次感谢! =)
    • 不幸的是,我被要求坚持使用 QAD cmdlet。奇怪的是,即使是最简单的脚本也会发生这种情况,例如。获取用户详细信息脚本 - 此脚本将从输入文件中读取获取用户详细信息并写入输出文件,如果我输入大用户(8000+),那么即使此脚本也会引发 OutOfMemory 异常,同时在带有 ARS v6 的 WinXP 工作站上运行顺畅.7?我似乎不明白这里的问题……是操作系统还是 ARS 版本?请帮忙!
    • 这似乎是 ARS 版本,see here 用于类似问题。显然,使用较新的库版本在内存中保存多个 QADObject 会占用太多内存,脚本无法处理其中的很多。我认为这是 ARS Powershell 模块中的错误,请考虑联系戴尔进行修复。另外,如果你能向他证明最新版本有漏洞,你的系统管理员是否有任何理由坚持 qith QAD?
    【解决方案2】:

    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 Files\Quest Software\Management Shell for AD\qsft.ps1'"

    【讨论】:

      猜你喜欢
      • 2012-04-13
      • 2011-01-29
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多