我正在运行MySQL Query来更新MS AD并将错误输出到txt文件。代码工作正常,但几分钟后我得到错误'System.OutOfMemoryException'。PowerShell - Get-QADUser ='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(),但它没有做任何事情来阻止内存不断向上爬
如果你直接管它,会发生什么情况$ dtResult = New-Object“System.Data.DataTable” foreach? – 2013-04-23 16:21:48