diff --git a/centreon/common/powershell/veeam/functions.pm b/centreon/common/powershell/veeam/functions.pm new file mode 100644 index 000000000..64d39a338 --- /dev/null +++ b/centreon/common/powershell/veeam/functions.pm @@ -0,0 +1,75 @@ +# +# Copyright 2021 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# 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 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package centreon::common::powershell::veeam::functions; + +use strict; +use warnings; + +sub powershell_init { + my (%options) = @_; + + my $ps = ' +$register_snaps=Get-PSSnapin -Registered +$all_snaps=Get-PSSnapin +$load_snaps=@("VeeamPSSnapin") +$registered=0 +foreach ($snap_name in $load_snaps) { + if (@($register_snaps | Where-Object {$_.Name -Match $snap_name} ).count -gt 0) { + if (@($all_snaps | Where-Object {$_.Name -Match $snap_name} ).count -eq 0) { + Try { + $register_snaps | Where-Object {$_.Name -Match $snap_name} | Add-PSSnapin -ErrorAction STOP + $registered=1 + } Catch { + Write-Host $Error[0].Exception + exit 1 + } + } + } +} +if ($registered -eq 0) { + if (@(Get-Module | Where-Object {$_.Name -Match "Veeam.Backup.PowerShell"} ).count -eq 0) { + Try { + Import-Module -Name "Veeam.Backup.PowerShell" + $registered=1 + } Catch { + Write-Host $Error[0].Exception + exit 1 + } + } + if ($registered -eq 0) { + Write-Host "Snap-In/Module Veeam no present or not registered" + exit 1 + } +} +'; + + return $ps; +} + +1; + +__END__ + +=head1 DESCRIPTION + +Powershell commands + +=cut diff --git a/centreon/common/powershell/veeam/jobstatus.pm b/centreon/common/powershell/veeam/jobstatus.pm index 95ab1a5a8..804f1f6f1 100644 --- a/centreon/common/powershell/veeam/jobstatus.pm +++ b/centreon/common/powershell/veeam/jobstatus.pm @@ -23,6 +23,7 @@ package centreon::common::powershell::veeam::jobstatus; use strict; use warnings; use centreon::common::powershell::functions; +use centreon::common::powershell::veeam::functions; sub get_powershell { my (%options) = @_; @@ -34,22 +35,9 @@ $culture = new-object "System.Globalization.CultureInfo" "en-us" $ps .= centreon::common::powershell::functions::escape_jsonstring(%options); $ps .= centreon::common::powershell::functions::convert_to_json(%options); + $ps .= centreon::common::powershell::veeam::functions::powershell_init(); $ps .= ' -If (@(Get-PSSnapin -Registered | Where-Object {$_.Name -Match "VeeamPSSnapin"} ).count -gt 0) { - If (@(Get-PSSnapin | Where-Object {$_.Name -Match "VeeamPSSnapin"} ).count -eq 0) { - Try { - Get-PSSnapin -Registered | Where-Object {$_.Name -Match "VeeamPSSnapin"} | Add-PSSnapin -ErrorAction STOP - } Catch { - Write-Host $Error[0].Exception - exit 1 - } - } -} else { - Write-Host "Snap-In Veeam no present or not registered" - exit 1 -} - $ProgressPreference = "SilentlyContinue" Try { diff --git a/centreon/common/powershell/veeam/listjobs.pm b/centreon/common/powershell/veeam/listjobs.pm index 504e13ce0..ec087e7e7 100644 --- a/centreon/common/powershell/veeam/listjobs.pm +++ b/centreon/common/powershell/veeam/listjobs.pm @@ -23,6 +23,7 @@ package centreon::common::powershell::veeam::listjobs; use strict; use warnings; use centreon::common::powershell::functions; +use centreon::common::powershell::veeam::functions; sub get_powershell { my (%options) = @_; @@ -34,22 +35,9 @@ $culture = new-object "System.Globalization.CultureInfo" "en-us" $ps .= centreon::common::powershell::functions::escape_jsonstring(%options); $ps .= centreon::common::powershell::functions::convert_to_json(%options); + $ps .= centreon::common::powershell::veeam::functions::powershell_init(); $ps .= ' -If (@(Get-PSSnapin -Registered | Where-Object {$_.Name -Match "VeeamPSSnapin"} ).count -gt 0) { - If (@(Get-PSSnapin | Where-Object {$_.Name -Match "VeeamPSSnapin"} ).count -eq 0) { - Try { - Get-PSSnapin -Registered | Where-Object {$_.Name -Match "VeeamPSSnapin"} | Add-PSSnapin -ErrorAction STOP - } Catch { - Write-Host $Error[0].Exception - exit 1 - } - } -} else { - Write-Host "Snap-In Veeam no present or not registered" - exit 1 -} - $ProgressPreference = "SilentlyContinue" Try { diff --git a/centreon/common/powershell/veeam/tapejobs.pm b/centreon/common/powershell/veeam/tapejobs.pm index bcb1b5038..4071e30c8 100644 --- a/centreon/common/powershell/veeam/tapejobs.pm +++ b/centreon/common/powershell/veeam/tapejobs.pm @@ -23,6 +23,7 @@ package centreon::common::powershell::veeam::tapejobs; use strict; use warnings; use centreon::common::powershell::functions; +use centreon::common::powershell::veeam::functions; sub get_powershell { my (%options) = @_; @@ -34,22 +35,9 @@ $culture = new-object "System.Globalization.CultureInfo" "en-us" $ps .= centreon::common::powershell::functions::escape_jsonstring(%options); $ps .= centreon::common::powershell::functions::convert_to_json(%options); + $ps .= centreon::common::powershell::veeam::functions::powershell_init(); $ps .= ' -If (@(Get-PSSnapin -Registered | Where-Object {$_.Name -Match "VeeamPSSnapin"} ).count -gt 0) { - If (@(Get-PSSnapin | Where-Object {$_.Name -Match "VeeamPSSnapin"} ).count -eq 0) { - Try { - Get-PSSnapin -Registered | Where-Object {$_.Name -Match "VeeamPSSnapin"} | Add-PSSnapin -ErrorAction STOP - } Catch { - Write-Host $Error[0].Exception - exit 1 - } - } -} else { - Write-Host "Snap-In Veeam no present or not registered" - exit 1 -} - $ProgressPreference = "SilentlyContinue" Try {