SMLetsExt.psm1
#region ReviewActivities Function Get-SCSMActivityReviewer { <# .SYNOPSIS This function gets the Review users from a review acitivity in SCSM. .DESCRIPTION A function gets the Review users from a review activity in SCSM. The object used must be from the get-scsmobject in the smlets module (the -Useradd variable is the user object from SCSM). .PARAMETER ID .PARAMETER ReviewActivity .EXAMPLE Get-SCSMActivityReviewer -ID RA1234 .EXAMPLE $RA = Get-SCSMObject -class (Get-SCSMClass -Name System.WorkItem.Activity.ReviewActivity$) -Filter "ID -eq RA125" Get-SCSMActivityReviewer -ReviewActivity $RA #> [CmdletBinding(DefaultParameterSetName="string")] [OutputType([PSObject])] param( [Parameter(Mandatory=$true,ParameterSetName="string")] [string]$ID, [Parameter(Mandatory=$true,ParameterSetName="object")] [PSObject]$ReviewActivity ) Begin { Write-Verbose "*** $($MyInvocation.MyCommand.CommandType) $($MyInvocation.MyCommand.Name) Started ***" #Create Collection to return $Users = @() $RAC = Get-SCSMClass -Name System.WorkItem.Activity.ReviewActivity$ $ReviewerRelationship = Get-SCSMRelationshipClass -Name System.ReviewActivityHasReviewer$ $ReviewerIsUser = Get-SCSMRelationshipClass -Name System.ReviewerIsUser$ } process { try { if($PSCmdlet.ParameterSetName -eq "string") { $ReviewActivity = Get-SCSMObject -Class $RAC -Filter "ID -eq $ID" } $Reviewers = Get-SCSMRelatedObject -SMObject $ReviewActivity -Relationship $ReviewerRelationship foreach($Reviewer in $Reviewers) { $user = Get-SCSMRelatedObject -SMObject $Reviewer -Relationship $ReviewerIsUser $Users += $user } } catch { Write-Error $PSCmdlet.ThrowTerminatingError($_) } } End { if($Users.count -gt 0) { Write-Output $Users } Write-Verbose "*** $($MyInvocation.MyCommand.CommandType) $($MyInvocation.MyCommand.Name) Finished ***" } } Function Add-SCSMActivityReviewer { <# .SYNOPSIS This function adds a user to a review acitivity in SCSM. .DESCRIPTION A function to add a user to a review activity in SCSM. The object used must be from the get-scsmobject in the smlets module (the -Useradd variable is the user object from SCSM). .EXAMPLE Add-SCSMActivityReviewer -Useradd $SCSMUser -RActivity $RAObject .EXAMPLE Add-SCSMActivityReviewer -Username rplank -ActivityID RA123 .EXAMPLE Add-SCSMActivityReviewer -username rplank -ActivityID RA1234 -domain <DomainNetbiosName> #> [CmdletBinding(DefaultParameterSetName="string")] Param( [Parameter(Mandatory=$true,ParameterSetName="string")] [string]$ActivityID, [Parameter(Mandatory=$true,ParameterSetName="string")] [string]$username, [Parameter(Mandatory=$false,ParameterSetName="string")] [string]$domain, [Parameter(Mandatory=$True,ParameterSetName="Object")] [PSObject[]]$Useadd, [Parameter(Mandatory=$True,ParameterSetName="Object")] [PSObject]$RActivity ) begin { Write-Verbose "*** $($MyInvocation.MyCommand.CommandType) $($MyInvocation.MyCommand.Name) Started ***" $relClassReviewerIsUser = Get-SCSMRelationshipClass System.ReviewerIsUser$ $relClassReviewActivityHasReviewer = Get-SCSMRelationshipClass System.ReviewActivityHasReviewer$ $Reviewers = @() $ReviewActivityClass = Get-SCSMClass -Name System.WorkItem.Activity.ReviewActivity$ } Process { try { if($PSCmdlet.ParameterSetName -eq "Object") { # Build a Collection of current Reviewers $ReviewerList = Get-SCSMRelatedObject -SMObject $RActivity -relationship $relClassReviewActivityHasReviewer foreach($Reviewer in $ReviewerList) { $Review = Get-SCSMRelatedObject -SMObject $Reviewer -Relationship $relClassReviewerIsUser $Reviewers += $Review } foreach ($User in $Useadd) { if($Reviewers -notcontains $user) { $reviewerClass = get-scsmclass System.Reviewer $reviewerArgs = @{ ReviewerId = "Reviewer{0}" } $reviewer = new-scsmobject -class $reviewerClass -PropertyHashtable $reviewerArgs -nocommit $rel01 = new-scsmrelationshipobject -nocommit -Relationship $relClassReviewActivityHasReviewer -sou $RActivity -tar $reviewer $rel02 = new-scsmrelationshipobject -nocommit -rel $relClassReviewerIsUser -Sour $reviewer -targ $User $rel01.commit() $rel02.commit() } } } if($PSCmdlet.ParameterSetName -eq "string") { Write-Verbose "Get Review Activity from Id" $RActivity = Get-SCSMObject -Class $ReviewActivityClass -Filter "ID -eq $ActivityID" Write-Verbose "Build a Collection of current Reviewers" $ReviewerList = Get-SCSMRelatedObject -SMObject $RActivity -relationship $relClassReviewActivityHasReviewer foreach($Reviewer in $ReviewerList) { $Review = Get-SCSMRelatedObject -SMObject $Reviewer -Relationship $relClassReviewerIsUser $Reviewers += $Review } $user = Get-SCSMuser -username $username if($domain -ne $null) { if($user.Count -gt 1) { foreach($u in $user) { if($u.Domain -eq $domain) { $user = $u } } } } if($Reviewers -notcontains $user) { $reviewerClass = get-scsmclass System.Reviewer $reviewerArgs = @{ ReviewerId = "Reviewer{0}" } $reviewer = new-scsmobject -class $reviewerClass -PropertyHashtable $reviewerArgs -nocommit $rel01 = new-scsmrelationshipobject -nocommit -Relationship $relClassReviewActivityHasReviewer -sou $RActivity -tar $reviewer $rel02 = new-scsmrelationshipobject -nocommit -rel $relClassReviewerIsUser -Sour $reviewer -targ $User $rel01.commit() $rel02.commit() } } } catch { Write-Error $PSCmdlet.ThrowTerminatingError($_) } } end { Write-Verbose "*** $($MyInvocation.MyCommand.CommandType) $($MyInvocation.MyCommand.Name) Finished ***" } } Function Remove-SCSMActivityReviewer { <# .SYNOPSIS This function removes a user from a review acitivity in SCSM. .DESCRIPTION A function to remove a user from a review activity in SCSM. The object used must be from the get-scsmobject in the smlets module (the -Useradd variable is the user object from SCSM). .PARAMETER ActivityID .PARAMETER UserName .PARAMETER Activity .PARAMETER User .EXAMPLE Remove-SCSMActivityReviewer -ActivityID RA1234 -username userA .EXAMPLE $user = Get-SCSMObject -class (Get-SCSMClass -name System.domain.User$) -Filter "username -eq <username>" $RA = Get-SCSMObject -class (Get-SCSMClass -Name System.WorkItem.Activity.ReviewActivity$) -Filter "ID -eq RA125" Remove-SCSMActivityReviewer -Activity $RA -username $user #> [CmdletBinding(DefaultParameterSetName="string")] Param( [Parameter(Mandatory=$true,ParameterSetName="string")] [string]$ActivityID, [Parameter(Mandatory=$true,ParameterSetName="string")] [string]$username, [Parameter(Mandatory=$true,ParameterSetName="object")] [PSObject]$Activity, [Parameter(Mandatory=$true,ParameterSetName="object")] [PSObject]$user ) begin { Write-Verbose "*** $($MyInvocation.MyCommand.CommandType) $($MyInvocation.MyCommand.Name) Started ***" try { $ReviewActivityClass = Get-SCSMClass -Name System.WorkItem.Activity.ReviewActivity$ $ReviewerIsUser = Get-SCSMRelationshipClass System.ReviewerIsUser$ $ReviewerRelationship = Get-SCSMRelationshipClass -Name System.ReviewActivityHasReviewer$ } catch { Write-Error $PSCmdlet.ThrowTerminatingError($_) } } process { try { if($PSCmdlet.ParameterSetName -eq "string") { $ReviewActivity = Get-SCSMObject -Class $ReviewActivityClass -Filter "ID -eq $ActivityID" } $Reviewers = Get-SCSMRelatedObject -SMObject $ReviewActivity -Relationship $ReviewerRelationship foreach($Reviewer in $Reviewers) { $userobj = Get-SCSMRelatedObject -SMObject $Reviewer -Relationship $ReviewerIsUser if($PScmdlet.ParameterSetName -eq "string") { if($userobj.username -eq $username) { $ReviewertoUserRelationship =(Get-SCSMRelationshipObject -TargetObject $userobj -TargetRelationship $ReviewerIsUser) | where {$_.sourceobject.ID -eq $Reviewer.ID} $ActivitytoReviewerRelationship = Get-SCSMRelationshipObject -TargetObject $ReviewertoUserRelationship.SourceObject -TargetRelationship $ReviewerRelationship $ActivitytoReviewerRelationship | Remove-SCSMRelationshipObject $ReviewertoUserRelationship | Remove-SCSMRelationshipObject } } Elseif($PSCmdlet.ParameterSetName -eq "object") { if($user.username -eq $userobj.username) { $ReviewertoUserRelationship = $ReviewertoUserRelationship = (Get-SCSMRelationshipObject -TargetObject $userobj -TargetRelationship $ReviewerIsUser) | where {$_.sourceobject.ID -eq $Reviewer.ID} $ActivitytoReviewerRelationship = Get-SCSMRelationshipObject -TargetObject $ReviewertoUserRelationship.SourceObject -TargetRelationship $ReviewerRelationship $ActivitytoReviewerRelationship | Remove-SCSMRelationshipObject $ReviewertoUserRelationship | Remove-SCSMRelationshipObject } } } } catch { Write-Error $PSCmdlet.ThrowTerminatingError($_) } } End { Write-Verbose "*** $($MyInvocation.MyCommand.CommandType) $($MyInvocation.MyCommand.Name) Finished ***" } } Function Update-SCSMActivityReviewer { <# .SYNOPSIS This function replaces a Reviewer of a review acitivity in SCSM. .DESCRIPTION A function replaces a Reviewer of a review activity in SCSM. The object used must be from the get-scsmobject in the smlets module (the -Useradd variable is the user object from SCSM). .PARAMETER ExistingReviewer .PARAMETER NewReviewer .PARAMETER ActivityID .PARAMETER InProgress .PARAMETER Pending .EXAMPLE Bulk update all Review Activites in Progess Update-SCSMActivityReviewer -ExistingReviewer <username> -NewReviewer <userName> -Inprogress .EXAMPLE Bulk Update all Review Activities in Pending status Update-SCSMActivityReviewer -ExistingReviewer <username> -NewReviewer <userName> -Pending .EXAMPLE To Update a single Activity Update-SCSMActivityReviewer -ExistingReviewer <username> -NewReviewer <userName> -ActivityID RA123 #> [cmdletbinding(DefaultParameterSetName="Single")] Param( [Parameter(Mandatory=$true,ParameterSetName="Single")] [string]$ExistingReviewer, [Parameter(Mandatory=$true,ParameterSetName="Single")] [string]$NewReviewer, [Parameter(Mandatory=$True,ParameterSetName="Single")] [string]$ActivityID, [Parameter(Mandatory=$false,ParameterSetName="Bulk")] [switch]$InProgress, [Parameter(Mandatory=$false,ParameterSetName="Bulk")] [switch]$Pending ) begin { Write-Verbose "*** $($MyInvocation.MyCommand.CommandType) $($MyInvocation.MyCommand.Name) Started ***" $ReviewActivityClass = Get-SCSMClass -Name System.WorkItem.Activity.ReviewActivity$ $MatchedRAs = @() } Process { try { if($PSCmdlet.ParameterSetName -eq "Bulk") { if($InProgress -eq $true) { $InProgressID = (Get-SCSMEnumeration -name activitystatusenum.active$).ID $ReviewActivities = Get-SCSMobject -class $ReviewActivityClass -Filter "Status -eq $InProgressID" } if($Pending -eq $true) { $PendingID = (get-SCSMEnumeration -name ActivityStatusEnum.Ready).ID $ReviewActivities = Get-SCSMobject -class $ReviewActivityClass -Filter "Status -eq $PendingID" } if($InProgress -eq $false -and $Pending -eq $false) { Write-Error "Select a switch for Bulk editing" } } else { $ReviewActivities = Get-SCSMobject -class $ReviewActivityClass -Filter "ID -eq $ActivityID" } foreach($RA in $ReviewActivities) { $Reviewers = Get-SCSMActivityReviewer -ReviewActivity $RA foreach($Reviewer in $Reviewers) { if($Reviewer.username -eq $ExistingReviewer) { $MatchedRAs += $RA.ID } } } if($MatchedRAs.count -gt 0) { Foreach($RA in $MatchedRAs) { Remove-SCSMActivityReviewer -ActivityID $RA -username $ExistingReviewer Add-SCSMActivityReviewer -ActivityID $RA -username $NewReviewer } } else { Write-output "No Review Activities Matched your Criteria" } } catch { Write-Error $PSCmdlet.ThrowTerminatingError($_) } } end { Write-Verbose "*** $($MyInvocation.MyCommand.CommandType) $($MyInvocation.MyCommand.Name) Finished ***" } } #endregion |