88350dbb-6049-46c5-8e39-1285c9a634d3
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
QwAAMBEAQHgIAAAmAgAIDwEAwEQAAOEhAACYCAAgPAQAABMBAISHAABgIgCA8BAAAEwEABAeAgCA
iQAAwkMAADARAEB4CAAAJgIACA8BAMBEAADhIQAAmAgAIDwEAAATAQCEhwAAYCIAgPAQAABMBAAQ
HgIAgIkAAMJDAAAwEQBAeAgAACYCAAgPAQDARAAA4SEAAJgIACA8BAAAEwEAhIcAAGAiAIDwEAAA
TAQAEB4CAICJAADCQwAAMBEAQHgIAAAmAgAIDwEAwEQAAOEhAACYCAAgPAQAABMBAISHAABgIgCA
8BAAAEwEABAeAgCAiQAAwkMAADARAEB4CAAAJgIACA8BAMBEAADhIQAAmAgAIDwEAAATAQCEhwAA
YCIAgPAQAABMBAAQHgIAgIkAAMJDAAAwEQBAeAgAACYCAAgPAQDARAAA4SEAAJgIACA8BAAAEwEA
hIcAAGAiAIDwEAAATAQAEB4CAICJAADCQwAAMBEAQHgIAAAmAgAIDwEAwEQAAOEhAACYCAAgPAQA
ABMBAISHAABgIgCA8BAAAEwEABAeAgCAiQAAwkMAADARAEB4CAAAJgIACA8BAMBEAADhIQAAmAgA
IDwEAAATAQCEhwAAYCIAgPAQAABMBAAQHgIAgIkAAMJDAAAwEQBAeAgAACYCAAgPAQDARAAA4SEA
AJgIACA8BAAAEwEAhIcAAGAiAIDwEAAATAQAEB4CAICJAADCQwAAMBEAQHgIAAAmAgAIDwEAwEQA
AOEhAACYCAAgPAQAABMBAISHAABgIgCA8BAAAEwEABAeAgCAiQAAwkMAADARAEB4CAAAJgIACA8B
AMBEAADhIQAAmAgAIDwEAAATAQCEhwAAYCIAgPAQAABMBAAQHgIAgIkAAMJDAAAwEQBAeAgAACYC
AAgPAQDARAAA4SEAAJgIACA8BAAAEwEAhIcAAGAiAIDwEAAATAQAEB4CAICJAADCQwAAMBEAQHgI
AAAmAgAIDwEAwEQAAOEhAACYCAAgPAQAABMBAISHAABgIgCA8BAAAEwEABAeAgCAiQAAwkMAADAR
AEB4CAAAJgIACA8BAMBEAADhIQAAmAgAIDwEAAATAQCEhwAAYCIAgPAQAABMBAAQHgIAgIkAAMJD
AAAwEQBAeAgAACYCAAgPAQDARAAA4SEAAJgIACA8BAAAEwEAhIcAAGAiAIDwEAAATAQAEB4CAICJ
AADCQwAAMBEAQHgIAAAmAgAIDwEAwEQAAOEhAACYCAAgPAQAABMBAISHAABgIgCA8BAAAEwEABAe
AgCAiQAAwkMAADARAEB4CAAAJgIACA8BAMBEAADhIQAAmAgAIDwEAAATAQCEhwAAYCIAgPAQAABM
BAAQHgIAgIkAAMJDAAAwEQBAeAgAACYCAAgPAQDARAAA4SEAAJgIACA8BAAAEwEAhIcAAGAiAIDw
EAAATAQAEB4CAICJAADCQwAAMBEAQHgIAAAmAgAIDwEAwEQAAOEhAACYCAAgPAQAABMBAISHAABg
IgCA8BAAAEwEABAeAgCAiQAAwkMAADARAEB4CAAAJgIACA8BAMBEAADhIQAAmAgAIDwEAAATAQCE
hwAAYCIAgPAQAABMBAAQHgIAgIkAAMJDAAAwEQBAeAgAACYCAAgPAQDARAAA4SEAAJgIACA8BAAA
EwEAhIcAAGAiAIDwEAAATAQAEB4CAICJAADCQwAAMBEAQHgIAAAmAgAIDwEAwEQAAOEhAACYCAAg
PAQAABMBAISHAABgIgCA8BAAAEwEABAeAgCAiQAAwkMAADARAEB4CAAAJgIACA8BAMBEAADhIQAA
mAgAIDwEAAATAQCEhwAAYCIAgPAQAABMBAAQHgIAgIkAAMJDAAAwEQBAeAgAACYCAAgPAQDARAAA
4SEAAJgIACA8BAAAEwEAhIcAAGAiAIDwEAAATAQAEB4CAICJAADCQwAAMBEAQHgIAAAmAgAIDwEA
wEQAAOEhAACYCAAgPAQAABMBAISHAABgIgCA8BAAAEwEABAeAgCAiQAAwkMAADARAEB4CAAAJgIA
CA8BAMBEAADhIQAAmAgAIDwEAAATAQCEhwAAYCIAgPAQAABMBAAQHgIAgIkAAMJDAAAwEQBAeAgA
ACYCAAgPAQDARAAA4SEAAJgIACA8BAAAEwEAhIcAAGAiAIDwEAAATAQAEB4CAICJAADCQwAAMBEA
QHgIAAAmAgAIDwEAwEQAAOEhAACYCAAgPAQAABMBAISHAABgIgCA8BAAAEwEABAeAgCAiQAAwkMA
ADARAEB4CAAAJgIACA8BAMBEAADhIQAAmAgAIDwEAAATAQCEhwAAYCIAgPAQAABMBAAQHgIAgIkA
AMJDAAAwEQBAeAgAACYCAAgPAQDARAAA4SEAAJgIACA8BAAAEwEAhIcAAGAiAIDwEAAATAQAEB4C
AICJAADCQwAAMBEAQHgIAAAmAgAIDwEAwEQAAOEhAACYCAAgPAQAABMBAISHAABgIgCA8BAAAEwE
ABAeAgCAiQAAwkMAADARAEB4CAAAJgIACA8BAMBEAADhIQAAmAgAIDwEAAATAQCEhwAAYCIAgPAQ
AABMBAAQHgIAgIkAAMJDAAAwEQBAeAgAACYCAAgPAQDARAAA4SEAAJgIACA8BAAAEwEAhIcAAGAi
AIDwEAAATAQAEB4CAICJAADCQwAAMBEAQHgIAAAmAgAIDwEAwEQAAOEhAACYCAAgPAQAABMBAISH
AABgIgCA8BAAAEwEABAeAgCAiQAAwkMAADARAEB4CAAAJgIACA8BAMBEAADhIQAAmAgAIDwEAAAT
AQCEhwAAYCIAgPAQAABMBAAQHgIAgIkAAMJDAAAwEQBAeAgAACYCAAgPAQDARAAA4SEAAJgIACA8
BAAAEwEAhIcAAGAiAIDwEAAATAQAEB4CAICJAADCQwAAMBEAQHgIAAAmAgAIDwEAwEQAAOEhAACY
CAAgPAQAABMBAISHAABgIgCA8BAAAEwEABAeAgCAiQAAwkMAADARAEB4CAAAJgIACA8BAMBEAADh
IQAAmAgAIDwEAAATAQCEhwAAYCIAgPAQAABMBAAQHgIAgIkAAMJDAAAwEQBAeAgAACYCAAgPAQDA
RAAA4SEAAJgIACA8BAAAEwEAhIcAAGAiAIDwEAAATAQAEB4CAICJAADCQwAAMBEAQHgIAAAmAgAI
DwEAwEQAAOEhAACYCAAgPAQAABMBAISHAABgIgCA8BAAAEwEABAeAgCAiQAAwkMAADARAEB4CAAA
JgIACA8BAMBEAADhIQAAmAgAIDwEAAATAQCEhwAAYCIAgPAQAABMBAAQHgIAgIkAAMJDAAAwEQBA
eAgAACYCAAgPAQDARAAA4SEAAJgIACA8BAAAEwEAhIcAAGAiAIDwEAAATAQAEB4CAICJAADCQwAA
MBEAQHgIAAAmAgAIDwEAwEQAAOEhAACYCAAgPAQAABMBAISHAABgIgCA8BAAAEwEABAeAgCAiQAA
wkMAADARAEB4CAAAJgIACA8BAMBEAADhIQAAmAgAIDwEAAATAQCEhwAAYCIAgPAQAABMBAAQHgIA
gIkAAMJDAAAwEQBAeAgAACYCAAgPAQDARAAA4SEAAJgIACA8BAAAEwEAhIcAAGAiAIDwEAAATAQA
EB4CAICJAADCQwAAMBEAQHgIAAAmAgAIDwEAwEQAAOEhAACYCAAgPAQAABMBAISHAABgIgCA8BAA
AEwEABAeAgCAiQAAwkMAADARAEB4CAAAJgIACA8BAMBEAADhIQAAmAgAIDwEAAATAQCEhwAAYCIA
gPAQAABMBAAQHgIAgIkAAMJDAAAwEQBAeAgAACYCAAgPAQDARAAA4SEAAJgIACA8BAAAEwEAhIcA
AGAiAIDwEAAATAQAEB4CAICJAADCQwAAMBEAQHgIAAAmAgAIDwEAwEQAAOEhAACYCAAgPAQAABMB
AISHAABgIgCA8BAAAEwEABAeAgCAiQAAwkMAADARAEB4CAAAJgIACA8BAMBEAADhIQAAmAgAIDwE
AAATAQCEp76BAABguFUAFJdU6tPLl3WZYZi7avz9tqq6XocbmwgAALd2YwDUuQCoau1VTm6BimIl
isVKGYa5i6bITXZOvro6u3T+bH+0yN9qzvX3qZ0AAEanzwWAmwb3eXtPv9qO9zEMcxeOv//68Uf3
txu/+Dd2DS78BAAwytwsAPz4I4KajrMMw9y1M3w/vv0ML/4EADDK3CoAGIYZfUMAAKPIcADUugDw
d36GYUbv1LjpIgCA0WHSpEklA5KOnXPj7vgMw4ze8Yv/J+7xYGv8LgIACN2vnnii3N/ZN8RtZRiG
UfyO3Xr77XcIAAAAAAAAAAAAAAAAgLvSV77yfwBQa5slqzRwtgAAAABJRU5ErkJggg==
param (
[ValidateNotNull()]
[System.Windows.Forms.TreeNodeCollection]$NodeCollection,
[ValidateNotNull()]
[System.Collections.ArrayList]$CheckedNodes
)
foreach ($Node in $NodeCollection)
{
if ($Node.Checked)
{
[void]$CheckedNodes.Add($Node)
}
Get-CheckedNodes $Node.Nodes $CheckedNodes
}
}
function Build-TreeView
{
param ($DomainDN,
$DomainName)
$treeNodes = $Treeview.Nodes[0]
If ($DomainDN)
{
$RootDomainNode = Add-Node -dname $DomainDN -name $DomainName -RootNode $treeNodes -Type Domain
}
else
{
$CurrentDomain = $forest.Domains | ?{ $_.Name -eq $env:USERDNSDOMAIN }
$Domain = $CurrentDomain.GetDirectoryEntry()
$RootDomainNode = Add-Node -dname $Domain.distinguishedName -name $CurrentDomain.Name -RootNode $treeNodes -Type Domain
}
#Copy the RootDomainNode to parent scope
New-Variable -Name RootDomainNode -Value $RootDomainNode -Scope 1
$treeNodes.Expand()
$RootDomainNode.Expand()
}
function Get-NextLevel {
param (
$RootNode,
$Type
)
$global:CurrentRN = $RootNode
#Create a New Job using the Job Tracker
$paramAddJobTracker = @{
Name = "JobName-$($RootNode.Name)"
JobScript = {
param ($RootNodeName)
$root = [ADSI]''
$ADsearcher = New-Object System.DirectoryServices.DirectorySearcher($root)
$ADsearcher.SearchRoot = "LDAP://$RootNodeName"
$ADsearcher.SearchScope = 'OneLevel'
$ADsearcher.filter = "(|(objectClass=organizationalUnit)(ObjectClass=container)(ObjectClass=builtinDomain))"
$ADsearcher.PageSize = 1000
$props = @('name', 'distinguishedname', 'objectclass')
$ADsearcher.PropertiesToLoad.AddRange($props)
$ADObjects = $ADsearcher.FindAll()
return $ADObjects
}
ArgumentList = "$($RootNode.Name)"
CompletedScript = {
Param ($Job)
$ADObjects = Receive-Job -Job $Job
if (($ADObjects | Measure-Object).Count -ne 0)
{
$global:CurrentRN.Nodes.Clear()
$ADObjects | % {
$Type = $_.properties.objectclass | ?{ $_ -ne 'top' }
$ADsearcher.SearchRoot = $_.Path
If ($ADsearcher.FindOne())
{
Add-Node $global:CurrentRN $_.properties.distinguishedname[0] $_.properties.name[0] -Type $Type -HasChildren $true
}
else
{
Add-Node $global:CurrentRN $_.properties.distinguishedname[0] $_.properties.name[0] -Type $Type -HasChildren $false
}
}
}
else
{
$global:CurrentRN.Nodes.Clear()
}
}
UpdateScript = {}
}
Add-JobTracker @paramAddJobTracker
}
function Add-Node {
param (
$RootNode,
$dname,
$name,
$Type,
$HasChildren = $true
)
$newNode = new-object System.Windows.Forms.TreeNode
$newNode.Name = $dname
$newNode.Text = $name
If ($HasChildren) {
$newNode.Nodes.Add('') | Out-Null
}
switch ($Type) {
organizationalunit {
$newnode.ImageIndex = 1
$newNode.SelectedImageIndex = 1
}
Domain {
$newNode.ImageIndex = 0
$newNode.SelectedImageIndex = 0
}
Default {
$newnode.ImageIndex = 2
$newNode.SelectedImageIndex = 2
}
}
$RootNode.Nodes.Add($newNode) | Out-Null
$newNode
}
#endregion
$jobTracker_FormClosed=[System.Windows.Forms.FormClosedEventHandler]{
#Event Argument: $_ = [System.Windows.Forms.FormClosedEventArgs]
#Stop any pending jobs
Stop-JobTracker
}
$timerJobTracker_Tick={
Update-JobTracker
}
#region Job Tracker
$JobTrackerList = New-Object System.Collections.ArrayList
function Add-JobTracker
{
<#
.SYNOPSIS
Add a new job to the JobTracker and starts the timer.
.DESCRIPTION
Add a new job to the JobTracker and starts the timer.
.PARAMETER Name
The name to assign to the Job
.PARAMETER JobScript
The script block that the Job will be performing.
Important: Do not access form controls from this script block.
.PARAMETER ArgumentList
The arguments to pass to the job
.PARAMETER CompletedScript
The script block that will be called when the job is complete.
The job is passed as an argument. The Job argument is null when the job fails.
.PARAMETER UpdateScript
The script block that will be called each time the timer ticks.
The job is passed as an argument. Use this to get the Job's progress.
.EXAMPLE
Add-JobTracker -Name 'JobName' `
-JobScript {
Param($Argument1)#Pass any arguments using the ArgumentList parameter
#Important: Do not access form controls from this script block.
Get-WmiObject Win32_Process -Namespace "root\CIMV2"
}`
-CompletedScript {
Param($Job)
$results = Receive-Job -Job $Job
}`
-UpdateScript {
Param($Job)
#$results = Receive-Job -Job $Job -Keep
}
.LINK
#>
Param(
[ValidateNotNull()]
[Parameter(Mandatory=$true)]
[string]$Name,
[ValidateNotNull()]
[Parameter(Mandatory=$true)]
[ScriptBlock]$JobScript,
$ArgumentList = $null,
[ScriptBlock]$CompletedScript,
[ScriptBlock]$UpdateScript)
#Start the Job
$job = Start-Job -Name $Name -ScriptBlock $JobScript -ArgumentList $ArgumentList
if($null -ne $job)
{
#Create a Custom Object to keep track of the Job & Script Blocks
$members = @{ 'Job' = $Job;
'CompleteScript' = $CompletedScript;
'UpdateScript' = $UpdateScript}
$psObject = New-Object System.Management.Automation.PSObject -Property $members
[void]$JobTrackerList.Add($psObject)
#Start the Timer
if(-not $timerJobTracker.Enabled)
{
$timerJobTracker.Start()
}
}
elseif($null -ne $CompletedScript)
{
#Failed
Invoke-Command -ScriptBlock $CompletedScript -ArgumentList $null
}
}
function Update-JobTracker
{
<#
.SYNOPSIS
Checks the status of each job on the list.
#>
#Poll the jobs for status updates
$timerJobTracker.Stop() #Freeze the Timer
for($index = 0; $index -lt $JobTrackerList.Count; $index++)
{
$psObject = $JobTrackerList[$index]
if($null -ne $psObject)
{
if($null -ne $psObject.Job)
{
if ($psObject.Job.State -eq 'Blocked')
{
#Try to unblock the job
Receive-Job $psObject.Job | Out-Null
}
elseif($psObject.Job.State -ne 'Running')
{
#Call the Complete Script Block
if($null -ne $psObject.CompleteScript)
{
#$results = Receive-Job -Job $psObject.Job
Invoke-Command -ScriptBlock $psObject.CompleteScript -ArgumentList $psObject.Job
}
$JobTrackerList.RemoveAt($index)
Remove-Job -Job $psObject.Job
$index-- #Step back so we don't skip a job
}
elseif($null -ne $psObject.UpdateScript)
{
#Call the Update Script Block
Invoke-Command -ScriptBlock $psObject.UpdateScript -ArgumentList $psObject.Job
}
}
}
else
{
$JobTrackerList.RemoveAt($index)
$index-- #Step back so we don't skip a job
}
}
if($JobTrackerList.Count -gt 0)
{
$timerJobTracker.Start()#Resume the timer
}
}
function Stop-JobTracker
{
<#
.SYNOPSIS
Stops and removes all Jobs from the list.
#>
#Stop the timer
$timerJobTracker.Stop()
#Remove all the jobs
while($JobTrackerList.Count -gt 0)
{
$job = $JobTrackerList[0].Job
$JobTrackerList.RemoveAt(0)
Stop-Job $job
Remove-Job $job
}
}
#endregion
]]>
1
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a