ES1_Policy.psm1
<# .NOTES =========================================================================== Copyright � 2018 Dell Inc. or its subsidiaries. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 =========================================================================== THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. IF THIS CODE AND INFORMATION IS MODIFIED, THE ENTIRE RISK OF USE OR RESULTS IN CONNECTION WITH THE USE OF THIS CODE AND INFORMATION REMAINS WITH THE USER. =========================================================================== .DESCRIPTION A collection of function and cmdlets used for managing SourceOne Policies and Activities #> function Pause-ES1Policies { <# .SYNOPSIS Pause all active SourceOne Policies .DESCRIPTION Pause all active SourceOne Policies .NOTES This function name does not follow Powershell verb naming conventions. However for consistency with the SourceOne MMC menu item it uses the verb "Pause" instead of "Suspend" .EXAMPLE Pause-ES1Policies #> [CmdletBinding()] Param( ) BEGIN { try { [bool] $loaded = Add-ES1Types #-ErrorAction SilentlyContinue if (-not $loaded ) { Write-Error 'Error loading SourceOne Objects and Types' break } } catch { Write-Error $_ break } } PROCESS { try { $jdfapiMgr=new-object -comobject ExJDFAPI.CoExJDFAPIMgr.1 $policies=@() $policies=@($jdfapiMgr.GetPolicies()) #$policies | Format-Table -AutoSize | Out-String -Width 10000 # $PolicyStates=[enum]::GetNames([EMC.Interop.ExBase.exPolicyState]) # # Disable each policy one at a time foreach ($policy in $policies) { if ($policy.state -eq [int] [EMC.Interop.ExBase.exPolicyState]::exPolicyState_Active ) { Write-Host 'Pausing Active Policy: ' $policy.name # # Set the state to suspended $policy.state = [int][EMC.Interop.ExBase.exPolicyState]::exPolicyState_Suspended #Save the policy $policy.Save() } else { Write-Warning "Policy ""$($policy.name)"" is not in a state that can be suspended !" } } } catch { Write-Error $_ } } END {} } function Resume-ES1Policies { <# .SYNOPSIS Resumes all paused and stopped SourceOne Policies .DESCRIPTION Resumes all paused and stopped SourceOne Policies .OUTPUTS .EXAMPLE TBD #> [CmdletBinding()] Param( ) BEGIN { try { [bool] $loaded = Add-ES1Types #-ErrorAction SilentlyContinue if (-not $loaded ) { Write-Error 'Error loading SourceOne Objects and Types' break } } catch { Write-Error $_ break } } PROCESS { try { $jdfapiMgr=new-object -comobject ExJDFAPI.CoExJDFAPIMgr.1 $policies=@() $policies=@($jdfapiMgr.GetPolicies()) #$policies | Format-Table -AutoSize | Out-String -Width 10000 # $PolicyStates=[enum]::GetNames([EMC.Interop.ExBase.exPolicyState]) # # Enable each policy one at a time foreach ($policy in $policies) { if (($policy.state -eq [int] [EMC.Interop.ExBase.exPolicyState]::exPolicyState_Suspended) -or ` ($policy.state -eq [int] [EMC.Interop.ExBase.exPolicyState]::exPolicyState_User_Terminated)) { Write-Host 'Enabling Suspended or Stopped Policy: ' $policy.name # # Set the state to Active $policy.state = [int][EMC.Interop.ExBase.exPolicyState]::exPolicyState_Active #Save the policy $policy.Save() } else { Write-Warning 'Policy is not in a state that can be resumed !' } } } catch { Write-Error $_ } } END {} } Function Show-ES1Policies { <# .SYNOPSIS Displays all SourceOne policies .DESCRIPTION Displays all SourceOne policies Must be running in a 32 bit PowerShell AND on a machine with SourceOne COM objects installed and registered .OUTPUTS .EXAMPLE Show-ES1Policies Policy Id Name Description State Created Last Modified Modified By --------- ---- ----------- ----- ------- ------------- ----------- 1 foo Active 12/30/1899 12:00:00 AM 11/4/2015 6:41:49 PM #> [CmdletBinding()] Param( ) BEGIN { try { [bool] $loaded = Add-ES1Types #-ErrorAction SilentlyContinue if (-not $loaded ) { Write-Error 'Error loading SourceOne Objects and Types' break } } catch { Write-Error $_ break } } PROCESS { try { $jdfapiMgr=new-object -comobject ExJDFAPI.CoExJDFAPIMgr.1 $policies=@() $policies=@($jdfapiMgr.GetPolicies()) # Make the output look nice $fmt = @{ Expression = { $_.id }; label = "Policy Id" }, @{ Expression = { $_.name }; label = "Name" }, @{ Expression = { $_.description }; label = "Description" }, @{ Expression = { ([EMC.Interop.ExBase.exPolicyState]$_.state).ToString().Substring(14) }; label = "State" }, @{ Expression = { $_.createTime }; label = "Created" }, @{ Expression = { $_.lastModified }; label = "Last Modified" }, @{ Expression = { $_.modifiedBy }; label = "Modified By" } $policies | Format-Table -AutoSize $fmt | Out-String -Width 10000 } catch { Write-Error $_ } } END {} } function Pause-ES1Activities { <# .SYNOPSIS Pauses all SourceOne Activities with the specified type ID .DESCRIPTION Pauses all SourceOne Activities with the specified type ID .NOTES This function name does not follow PowerShell verb naming conventions. However for consistency with the SourceOne MMC menu item it uses the verb "Pause" instead of "Suspend" .EXAMPLE Pause-ES1Activities 12 .EXAMPLE Pause-ES1Activities -activityTypeID 12 #> [CmdletBinding()] Param([Parameter( Mandatory=$True)] [Alias('type')] [int] $activityTypeID=0 ) BEGIN { try { [bool] $loaded = Add-ES1Types #-ErrorAction SilentlyContinue if (-not $loaded ) { Write-Error 'Error loading SourceOne Objects and Types' break } } catch { Write-Error $_ break } } PROCESS { try { if ($activityTypeID -eq 0) { Write-Error 'Invalid job/activity type id: ' $activityTypeID return } $jdfapiMgr=new-object -comobject ExJDFAPI.CoExJDFAPIMgr.1 $policies=@() $activities=@() $policies=@($jdfapiMgr.GetPolicies()) $activityType= $jdfapiMgr.GetTaskTypeById($activityTypeID) Write-Host "Searching for activities matching: $($activityType.Name) - Type: $activityTypeID" foreach ($policy in $policies) { $actFilter= $jdfapiMgr.CreateNewObject([EMC.Interop.ExJDFAPI.exJDFObjectType]::exJDFObjectType_ActivityFilter) $actFilter.policyID = $policy.id $activities= @($jdfapiMgr.GetActivities($actFilter)) foreach($act in $activities) { Write-Debug "Activity ID $($act.id), Name $($act.name), taskTypeID $($act.taskTypeID), $($act.description)" #$availStates=$act.GetAvailableActions() if ($activityTypeID -eq $act.taskTypeID) { Write-Host 'Pausing Activity: ' $act.name try { # Will throw if activity is not in a state which can be paused... $act.ApplyAction([EMC.Interop.ExBase.exActivityActions]::exActivityAction_Suspend) } catch { Write-Warning 'Activity could not be Paused.' Write-Error $_ } } } [System.Runtime.Interopservices.Marshal]::ReleaseComObject($actFilter) > $null } } catch { Write-Error $_ } } END {} } function Resume-ES1Activities { <# .SYNOPSIS Resumes all SourceOne Activities with the specified type ID .DESCRIPTION Resumes all SourceOne Activities with the specified type ID .OUTPUTS .EXAMPLE Resume-ES1Activities 12 .EXAMPLE Resume-ES1Activities -activityTypeID 12 #> [CmdletBinding()] Param([Parameter( Mandatory=$True)] [Alias('type')] [int] $activityTypeID=0 ) BEGIN { try { [bool] $loaded = Add-ES1Types #-ErrorAction SilentlyContinue if (-not $loaded ) { Write-Error 'Error loading SourceOne Objects and Types' break } } catch { Write-Error $_ break } } PROCESS { try { if ($activityTypeID -eq 0) { Write-Error 'Invalid job/activity type id: ' $activityTypeID return } $jdfapiMgr=new-object -comobject ExJDFAPI.CoExJDFAPIMgr.1 $policies=@() $activities=@() $policies=@($jdfapiMgr.GetPolicies()) $activityType= $jdfapiMgr.GetTaskTypeById($activityTypeID) Write-Host "Searching for activities matching: $($activityType.Name) - Type: $activityTypeID" foreach ($policy in $policies) { $actFilter= $jdfapiMgr.CreateNewObject([EMC.Interop.ExJDFAPI.exJDFObjectType]::exJDFObjectType_ActivityFilter) $actFilter.policyID = $policy.id $activities= @($jdfapiMgr.GetActivities($actFilter)) foreach($act in $activities) { Write-Debug "Activity ID $($act.id), Name $($act.name), taskTypeID $($act.taskTypeID), $($act.description)" if ($activityTypeID -eq $act.taskTypeID) { Write-Host 'Resuming Activity: ' $act.name try { # Will throw if activity is not in a state which can be resumed... $act.ApplyAction([EMC.Interop.ExBase.exActivityActions]::exActivityAction_Resume) } catch { Write-Warning 'Activity could not be Resumed.' Write-Error $_ } } } [System.Runtime.Interopservices.Marshal]::ReleaseComObject($actFilter) > $null } } catch { Write-Error $_ } } END {} } Function Show-ES1Activities { <# .SYNOPSIS Display a list of all the configured SourceOne activities .DESCRIPTION Display a list of all the configured SourceOne activities .EXAMPLE Policy Name Activity Name State TaskType TaskTypeID Created Last Modified Modified By ----------- ------------- ----- -------- ---------- ------- ------------- ----------- foo Test 1 Active Journaling JBS 16 6/10/2015 6:59:19 PM 11/13/2015 6:53:29 PM foo TestHAForReclassify Active Mailbox Management Archive JBS 3 8/3/2015 7:00:50 PM 11/13/2015 6:53:53 PM #> [CmdletBinding()] Param( ) BEGIN { try { [bool] $loaded = Add-ES1Types #-ErrorAction SilentlyContinue if (-not $loaded ) { Write-Error 'Error loading SourceOne Objects and Types' break } } catch { Write-Error $_ break } } PROCESS { try { $jdfapiMgr=new-object -comobject ExJDFAPI.CoExJDFAPIMgr.1 $policies=@() $activities=@() $policies=@($jdfapiMgr.GetPolicies()) foreach ($policy in $policies) { $policyName=$policy.name $actFilter= $jdfapiMgr.CreateNewObject([EMC.Interop.ExJDFAPI.exJDFObjectType]::exJDFObjectType_ActivityFilter) $actFilter.policyID = $policy.id $activities= @($jdfapiMgr.GetActivities($actFilter)) # # Ad some new columns $activities | Add-Member NoteProperty -Name "Policy" -Value $policyName $activities | Add-Member NoteProperty -Name "TaskType" -Value "" foreach ($act in $activities) { $taskString=$jdfapiMgr.GetTaskTypeByID($act.taskTypeID) $act.TaskType = $taskString.Name } $AllActivities+=$activities [System.Runtime.Interopservices.Marshal]::ReleaseComObject($actFilter) > $null } # Make the output look nice # The object does NOT return the DB value of lastState !! So no reason to display it !! $fmt = @{ Expression = { $_.Policy }; label = "Policy Name" }, @{ Expression = { $_.name }; label = "Activity Name" }, #@{ Expression = { $_.description }; label = "Description" }, @{ Expression = { ([EMC.Interop.ExBase.exActivityState]$_.state).ToString().Substring(16) }; label = "State" }, # @{ Expression = { ([EMC.Interop.ExBase.exActivityState]$_.lastState).ToString().Substring(16) }; label = "Previous State" }, @{ Expression = { $_.TaskType }; label = "TaskType" }, @{ Expression = { $_.taskTypeID }; label = "TaskTypeID" }, @{ Expression = { $_.timeCreated }; label = "Created" }, @{ Expression = { $_.timeLastModified }; label = "Last Modified" }, @{ Expression = { $_.modifiedBy }; label = "Modified By" } $AllActivities | sort policyID, id | Format-Table -AutoSize $fmt | Out-String -Width 10000 } catch { Write-Error $_ } } END {} } Function Get-ES1Activities { <# .SYNOPSIS Gets a list of all the configured SourceOne activities .DESCRIPTION Gets a list of all the configured SourceOne activities .EXAMPLE #> [CmdletBinding()] Param( ) BEGIN { try { [bool] $loaded = Add-ES1Types #-ErrorAction SilentlyContinue if (-not $loaded ) { Write-Error 'Error loading SourceOne Objects and Types' break } } catch { Write-Error $_ break } } PROCESS { try { $jdfapiMgr=new-object -comobject ExJDFAPI.CoExJDFAPIMgr.1 $policies=@() $activities=@() $policies=@($jdfapiMgr.GetPolicies()) foreach ($policy in $policies) { $policyName=$policy.name $actFilter= $jdfapiMgr.CreateNewObject([EMC.Interop.ExJDFAPI.exJDFObjectType]::exJDFObjectType_ActivityFilter) $actFilter.policyID = $policy.id $activities= @($jdfapiMgr.GetActivities($actFilter)) # # Ad some new columns $activities | Add-Member NoteProperty -Name "Policy" -Value $policyName $activities | Add-Member NoteProperty -Name "TaskType" -Value "" foreach ($act in $activities) { $taskString=$jdfapiMgr.GetTaskTypeByID($act.taskTypeID) $act.TaskType = $taskString.Name } $AllActivities+=$activities [System.Runtime.Interopservices.Marshal]::ReleaseComObject($actFilter) > $null } $AllActivities } catch { Write-Error $_ } } END {} } New-Alias Show-S1Policies Show-ES1Policies New-Alias Pause-S1Policies Pause-ES1Policies New-Alias Resume-S1Policies Resume-ES1Policies # # Public Exports # Export-ModuleMember -function * -Alias * |