我正在运行 MySQL Query 来更新 MS AD 并将错误输出到 txt 文件。代码工作正常,但几分钟后我收到错误“System.OutOfMemoryException”。
下面是一小段代码。
Function Addmembers {
$query = "SELECT * FROM allstudents_groups"
$dtResult = New-Object "System.Data.DataTable"
$hashOptions = @{ }
$hashOptions["strServer"] = "servername"
$hashOptions["strDatabase"] = "DB"
$hashOptions["strUser"] = "user"
$hashOptions["strPassword"] = "pass"
$hashOptions["strQuery"] = $query
$dtResult = executeMYSQLQuery($hashOptions)
$OU = "OU=Class Group,DC=company,DC=internal"
ForEach ($row in $dtResult){
$result = $row.GroupName
$resmember = $row.Members
$out_file = "C:\Scripts\Users.txt"
$studentOU = "OU=Users,OU=CHS,OU=Est,DC=Company,DC=internal"
$resmember | %{$_.Split(',')} | %{
If(Get-QADUser -PageSize 1000 -DontUseDefaultIncludedProperties -SizeLimit 0 -SearchRoot "$studentOU" -LdapFilter "(name=$_)")
{Add-ADGroupMember -Identity $result -Members "$($_)"
[System.GC]::Collect()
}
Else
{"$_" | out-file "$out_file" -append}
}}
[System.GC]::Collect()
}
$dtResult = $Null
}
Addmembers
我相信这是由于代码获取了所有数据库内容并试图将其保存在内存中。我认为 ForEach-Object 会阻止内存填满,但这似乎不支持逻辑。我也尝试在 IF 语句中添加一个 [System.GC]::Collect() 但这并不能阻止 RAM 爬升