DataGen/Initialize-Change.ps1
param ( $count = 10 , [switch]$whatif, [switch]$Verbose, [switch]$debug) BEGIN { . ./Common.ps1 $PTYPE = "System.WorkItem.ChangeRequestProjection" # RESOURCES NEEDED BUILT BY COMMON.PS1 # # INSTANCEHASH[$UserClass] # INSTANCEHASH[$CIClass] # ENUMHASH["ProblemStatusEnum"] # ENUMHASH["ProblemSourceEnum"] # ENUMHASH["ProblemResolutionEnum"] # ENUMHASH["ProblemClassificationEnum"] # ENUMHASH["System.WorkItem.TroubleTicket.ImpactEnum"] # ENUMHASH["System.WorkItem.TroubleTicket.UrgencyEnum"] # Add to ENUMHASH "ChangeAreaEnum", "ChangeCategoryEnum", "ChangeImpactEnum", "ChangeImplementationResultsEnum", "ChangePriorityEnum", "ChangeRiskEnum", "ChangeStatusEnum" | %{ $ENUMHASH[$_] = Get-EnumList $_ } # Add to ENUMHASH for Activities "ApprovalEnum", "ActivityAreaEnum", "ActivityPriorityEnum", "ActivityStageEnum", "ActivityStatusEnum" | %{ $ENUMHASH[$_] = Get-EnumList $_ } $ENUMHASH['DecisionEnum'] = Get-EnumList DecisionEnum # INSTANCEHASH needs a System.WorkItem $INSTANCEHASH['System.WorkItem'] = Get-Instances "System.WorkItem" 60 # SEED PROPERTIES #CreatedDate DateTime #ScheduledStartDate DateTime #ScheduledEndDate DateTime #ActualStartDate DateTime #ActualEndDate DateTime # Projection components # Activity System.WorkItem.Activity # CreatedBy System.User # AssignedTo System.User # AffectedUser System.User # RelatedWorkItem System.WorkItem # RelatedWorkItemSource System.WorkItem # RelatedConfigItem System.ConfigItem # AboutConfigItem System.ConfigItem # RelatedKnowledge System.Knowledge.Article Write-Progress -Activity "Setting Up Environment" -Status "Starting Problem Creation" } END { # THIS MUST BE DONE BY FOREACH-OBJECT TO GET BULK OPERATIONS 1..$count|foreach-object { $i = $_ Write-Progress -Activity "Creating Problem" -Status $i -perc ([int]($i/$count * 100)) # This is the created date for the projection $CreatedDate = [datetime]::Now.AddDays(-$RANDOM.Next(30,90)) $ACIs = Get-RandomListFromList $INSTANCEHASH[$CIClass] 4 $Status = Get-RandomItemFromList $ENUMHASH['ActivityStatusEnum'] $Classification = Get-RandomItemFromList $ENUMHASH['ProblemClassificationEnum'] $Resolution = Get-RandomItemFromList $ENUMHASH['ProblemResolutionEnum'] $ResolvedBy = Get-RandomItemFromList $INSTANCEHASH[$UserClass] $ClosedBy = Get-RandomItemFromList $INSTANCEHASH[$UserClass] # CREATE THE SEED HASH TABLE # WorkItem.Problem $Seed = @{ Id = "CustomCR{0}" Reason = Get-LoremIpsum 12 Notes = Get-LoremIpsum 24 ImplementationPlan = Get-LoremIpsum 30 RiskAssessmentPlan = Get-LoremIpsum 40 BackoutPlan = Get-LoremIpsum 80 TestPlan = Get-LoremIpsum 60 PostImplementationReview = Get-LoremIpsum 32 Title = Get-LoremIpsum 8 Description = Get-LoremIpsum 32 ContactMethod = Get-LoremIpsum 5 Category = Get-RandomItemFromList $ENUMHASH['ChangeCategoryEnum'] Priority = Get-RandomItemFromList $ENUMHASH['ChangePriorityEnum'] Impact = Get-RandomItemFromList $ENUMHASH['System.WorkItem.TroubleTicket.ImpactEnum'] Risk = Get-RandomItemFromList $ENUMHASH['ChangeRiskEnum'] ImplementationResults = Get-RandomItemFromList $ENUMHASH['ChangeImplementationResultsEnum'] Status = $Status CreatedDate = $CreatedDate } $Activites = 1..3 | %{ #set-psdebug -trace 2 $Start = $CreatedDate.Addhours((Get-RandomPercentage)) $End = $Start.AddHours((Get-RandomPercentage)*2) #set-psdebug -off $activitySeed = @{ ActualCost = Get-RandomDouble ActualDowntimeEndDate = $end.AddMinutes((Get-RandomPercentage)) ActualDowntimeStartDate = $start.AddMinutes((Get-RandomPercentage)) ActualEndDate = $end.AddMinutes((Get-RandomPercentage)) ActualStartDate = $start.AddMinutes((Get-RandomPercentage)) ActualWork = Get-RandomDouble ApprovalCondition = Get-RandomItemFromList $ENUMHASH['ApprovalEnum'] ApprovalPercentage = Get-RandomPercentage Area = Get-RandomItemFromList $ENUMHASH['ActivityAreaEnum'] Comments = get-loremipsum 22 ContactMethod = get-loremipsum 22 CreatedDate = $date Description = get-loremipsum 22 Documentation = Get-LoremIpsum Id = "CustomRA{0}" IsDowntime = Get-RandomBool IsParent = Get-RandomBool LineManagerShouldReview = Get-RandomBool Notes = get-loremipsum 12 OwnersOfConfigItemShouldReview = Get-RandomBool PlannedCost = Get-RandomDouble PlannedWork = Get-RandomDouble Priority = Get-RandomItemFromList $ENUMHASH['ActivityPriorityEnum'] RequiredBy = $end ScheduledDowntimeEndDate = $end ScheduledDowntimeStartDate = $start ScheduledEndDate = $End ScheduledStartDate = $Start SequenceId = $_ Skip = Get-RandomBool Stage = Get-RandomItemFromList $ENUMHASH['ActivityStageEnum'] Status = Get-RandomItemFromList $ENUMHASH['ActivityStatusEnum'] Title = get-loremipsum 12 } $ActivityProjectionType = "System.WorkItem.Activity.ReviewActivityProjection" @{ __CLASS = "System.WorkItem.Activity.ReviewActivity" __OBJECT = $seed ActivityCreatedBy = Get-RandomItemFromList $INSTANCEHASH[$UserClass] ActivityAssignedTo = Get-RandomItemFromList $INSTANCEHASH[$UserClass] Reviewer = @{ __CLASS = "System.Reviewer" __OBJECT = @{ Comments = Get-LoremIpsum 22 Decision = Get-RandomItemFromList $ENUMHASH['DecisionEnum'] DecisionDate = $CreatedDate.AddHours(12) ReviewerId = [guid]::NewGuid().ToString() } } }| new-scsmobjectprojection -Type $ActivityProjectionType -nocommit -whatif:$whatif -verbose:$verbose } # CREATE THE PROJECTION HASH TABLE $p = @{ __CLASS = "System.WorkItem.Problem" __OBJECT = $Seed # Now for the Aliases AssignedTo = Get-RandomItemFromList $INSTANCEHASH[$UserClass] CreatedBy = Get-RandomItemFromList $INSTANCEHASH[$UserClass] AffectedConfigItems = $ACIs } # FINISH THE PROJECTION if ( $Urgency -match "high" ) { $TargetResolutionTime = $CreatedDate.AddHours(4) } elseif ( $Urgency -match "medium" ) { $TargetResolutionTime = $CreatedDate.AddHours(24) } elseif ( $Urgency -match "high" ) { $TargetResolutionTime = $CreatedDate.AddHours(72) } else { $TargetResolutionTime = $CreatedDate.AddHours(48) } # set up for closed and resolved status if ( $status -match "Closed" -or $status -match "Resolved" ) { $p.__OBJECT['ResolutionDescription'] = get-lorem 22 $ResolveDiff = ($TargetResolutionTime - $CreatedDate).TotalHours $TimeVariance = $RANDOM.Next(-$ResolveDiff,$ResolveDiff) $ResolvedDate = $TargetResolutionTime.AddHours($TimeVariance) $p.__OBJECT['ResolvedDate'] = $ResolvedDate if ( $status -match "Closed" ) { $p.__OBJECT['ClosedDate'] = $ResolvedDate.AddHours($RANDOM.Next(0,2)*24) $p['ResolvedBy'] = $ResolvedBy $p['ClosedBy'] = $ClosedBy } else { $p['ResolvedBy'] = $ResolvedBy } } # HAND THE PROJECTION TO THE CMDLET $p } | new-SCSMOBjectProjection -Type $PType -bulk -verbose:$verbose -whatif:$whatif -debug:$debug } |