I am currently working on removing a replicas from all of our on-premise public folders. There is quite possibly 40,000 public folders nested inside of the structure. We are looking to remove 2 copies from all replicas and the Exchange 2010 tools, while working didn't provide any progress.
So, I grabbed all the 'good' replicas.
This was taking for ever and I couldn't tell if it was even running. I modified one of my previous progress bars, so that it would simply count to 100, then reset back to 1. Next I modified the code, to return the object I am currently parsing. This allows me to put the progress bar in-line with my code above and it keeps running.
You can see I use a few global variables. This helps maintain the counter between iterations. This also means that it will start at where you left off with the last run.
So, I grabbed all the 'good' replicas.
$firstPF = get-publicfolder ".\Top"
$GoodReplicas = $firstPF.Replicas | ?{$_ -notlike "remove this db name"}
Get-PublicFolder -recurse | ?{$_.replicas -ne $GoodReplicas} | Set-PublicFolder -replicas $GoodReplicas
This was taking for ever and I couldn't tell if it was even running. I modified one of my previous progress bars, so that it would simply count to 100, then reset back to 1. Next I modified the code, to return the object I am currently parsing. This allows me to put the progress bar in-line with my code above and it keeps running.
Get-PublicFolder -recurse | ?{$_.replicas -ne $GoodReplicas} | %{wp3 -passthru $_} | Set-PublicFolder -replicas $GoodReplicas
You can see I use a few global variables. This helps maintain the counter between iterations. This also means that it will start at where you left off with the last run.
function wp3 {
[CmdletBinding()] param(
[Parameter()][String]$JobName="Counter",
[Parameter()]$Passthru
)
$envVar = get-Variable -Name $JobName -Scope Global -ErrorAction SilentlyContinue -ValueOnly
$Times = $JobName+"_count"
$envVar2 = get-Variable -Name $Times -Scope Global -ErrorAction SilentlyContinue -ValueOnly
if ($EnvVar -eq $null) {
#Global Variable doesn't exist, create one called based on $JobName
$Env_WPIndex = 0
New-Variable -Name $JobName -Scope Global -Value 0 #-Visibility Private
} else {
#Use current global variable value.
$env_WPIndex = [double]$EnvVar
}
if ($envVar2 -eq $null) {
#Global Variable doesn't exist, create one called based on $JobName
$envTimeThru = 0
New-Variable -Name $Times -Scope Global -Value 0 #-Visibility Private
} else {
#Use current global variable value.
$envTimeThru = [double]$envVar2
}
Write-Progress -Activity ($JobName+"("+$envTimeThru+")") -Status $([string]$Env_WPIndex+"%") -PercentComplete $Env_WPIndex
$env_WPIndex = $env_wpIndex + 1
if ($env_wpIndex -lt 100) {
#if less then max object count, increment the global variable by one
Set-Variable -Name $JobName -Scope Global -ErrorAction SilentlyContinue -Value $env_WPIndex
} else {
$envTimeThru = $envTimeThru + 1
#if already greater than max, remove the global variable from machine.
Set-Variable -Name $JobName -Scope Global -Value 0 # -ErrorAction SilentlyContinue
}
Set-Variable -Name $Times -Scope Global -ErrorAction SilentlyContinue -Value $envTimeThru
return $Passthru
}
No comments:
Post a Comment