diff --git a/centreon-plugins/apps/microsoft/wsus/local/mode/computersstatus.pm b/centreon-plugins/apps/microsoft/wsus/local/mode/computersstatus.pm index 7cf71d958..967bf557e 100644 --- a/centreon-plugins/apps/microsoft/wsus/local/mode/computersstatus.pm +++ b/centreon-plugins/apps/microsoft/wsus/local/mode/computersstatus.pm @@ -100,7 +100,7 @@ sub new { 'ps-display' => { name => 'ps_display' }, 'wsus-server:s' => { name => 'wsus_server', default => 'localhost' }, 'wsus-port:s' => { name => 'wsus_port', default => 8530 }, - 'not-updated-since:s' => { name => 'not_updated_since', default => 10 }, + 'not-updated-since:s' => { name => 'not_updated_since', default => 30 }, 'use-ssl' => { name => 'use_ssl' } }); @@ -210,21 +210,15 @@ Set WSUS port. =item B<--not-updated-since> -Time in minutes to count computers not updated since. +Time in days to count computers not updated since (Default: 30). =item B<--use-ssl> Set if WSUS use ssl. -=item B<--warning-*> +=item B<--warning-*> B<--critical-*> -Warning thresholds. -Can be: 'needing-updates', 'with-update-errors', -'up-to-date', 'not-contacted', 'unassigned' - -=item B<--critical-*> - -Critical thresholds. +Thresholds. Can be: 'needing-updates', 'with-update-errors', 'up-to-date', 'not-contacted', 'unassigned' diff --git a/centreon-plugins/apps/microsoft/wsus/local/mode/synchronisationstatus.pm b/centreon-plugins/apps/microsoft/wsus/local/mode/synchronisationstatus.pm index 6b23fb90c..c8b45741c 100644 --- a/centreon-plugins/apps/microsoft/wsus/local/mode/synchronisationstatus.pm +++ b/centreon-plugins/apps/microsoft/wsus/local/mode/synchronisationstatus.pm @@ -33,8 +33,7 @@ use DateTime; sub custom_status_output { my ($self, %options) = @_; - my $msg = sprintf("status is '%s'", $self->{result_values}->{status}); - return $msg; + return sprintf("status is '%s'", $self->{result_values}->{status}); } sub custom_status_calc { @@ -47,8 +46,7 @@ sub custom_status_calc { sub custom_last_status_output { my ($self, %options) = @_; - my $msg = sprintf("status is '%s'", $self->{result_values}->{status}); - return $msg; + return sprintf("status is '%s'", $self->{result_values}->{status}); } sub custom_last_status_calc { @@ -73,9 +71,13 @@ sub custom_progress_perfdata { sub custom_progress_threshold { my ($self, %options) = @_; - my $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{progress}, - threshold => [ { label => 'critical-' . $self->{label}, exit_litteral => 'critical' }, - { label => 'warning-'. $self->{label}, exit_litteral => 'warning' } ]); + my $exit = $self->{perfdata}->threshold_check( + value => $self->{result_values}->{progress}, + threshold => [ + { label => 'critical-' . $self->{label}, exit_litteral => 'critical' }, + { label => 'warning-'. $self->{label}, exit_litteral => 'warning' } + ] + ); return $exit; } @@ -117,9 +119,13 @@ sub custom_duration_perfdata { sub custom_duration_threshold { my ($self, %options) = @_; - my $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{duration}, - threshold => [ { label => 'critical-' . $self->{label}, exit_litteral => 'critical' }, - { label => 'warning-'. $self->{label}, exit_litteral => 'warning' } ]); + my $exit = $self->{perfdata}->threshold_check( + value => $self->{result_values}->{duration}, + threshold => [ + { label => 'critical-' . $self->{label}, exit_litteral => 'critical' }, + { label => 'warning-'. $self->{label}, exit_litteral => 'warning' } + ] + ); return $exit; } @@ -146,12 +152,24 @@ sub custom_duration_calc { return 0; } +sub prefix_output_current { + my ($self, %options) = @_; + + return "Current Synchronisation "; +} + +sub prefix_output_last { + my ($self, %options) = @_; + + return "Last Synchronisation "; +} + sub set_counters { my ($self, %options) = @_; $self->{maps_counters_type} = [ { name => 'current', type => 0, cb_prefix_output => 'prefix_output_current' }, - { name => 'last', type => 0, cb_prefix_output => 'prefix_output_last' }, + { name => 'last', type => 0, cb_prefix_output => 'prefix_output_last' } ]; $self->{maps_counters}->{current} = [ @@ -160,7 +178,7 @@ sub set_counters { closure_custom_calc => $self->can('custom_status_calc'), closure_custom_output => $self->can('custom_status_output'), closure_custom_perfdata => sub { return 0; }, - closure_custom_threshold_check => \&catalog_status_threshold, + closure_custom_threshold_check => \&catalog_status_threshold } }, { label => 'synchronisation-progress', set => { @@ -168,10 +186,11 @@ sub set_counters { closure_custom_calc => $self->can('custom_progress_calc'), closure_custom_output => $self->can('custom_progress_output'), closure_custom_perfdata => $self->can('custom_progress_perfdata'), - closure_custom_threshold_check => $self->can('custom_progress_threshold'), + closure_custom_threshold_check => $self->can('custom_progress_threshold') } - }, + } ]; + $self->{maps_counters}->{last} = [ { label => 'last-synchronisation-status', threshold => 0, set => { key_values => [ { name => 'LastSynchronizationResult' } ], @@ -186,24 +205,12 @@ sub set_counters { closure_custom_calc => $self->can('custom_duration_calc'), closure_custom_output => $self->can('custom_duration_output'), closure_custom_perfdata => $self->can('custom_duration_perfdata'), - closure_custom_threshold_check => $self->can('custom_duration_threshold'), + closure_custom_threshold_check => $self->can('custom_duration_threshold') } }, ]; } -sub prefix_output_current { - my ($self, %options) = @_; - - return "Current Synchronisation "; -} - -sub prefix_output_last { - my ($self, %options) = @_; - - return "Last Synchronisation "; -} - sub new { my ($class, %options) = @_; my $self = $class->SUPER::new(package => __PACKAGE__, %options); diff --git a/centreon-plugins/centreon/common/powershell/wsus/computersstatus.pm b/centreon-plugins/centreon/common/powershell/wsus/computersstatus.pm index 6dd363d29..2a5cf53be 100644 --- a/centreon-plugins/centreon/common/powershell/wsus/computersstatus.pm +++ b/centreon-plugins/centreon/common/powershell/wsus/computersstatus.pm @@ -55,13 +55,22 @@ Try { $wsusObject = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($wsusServer, $useSsl, $wsusPort) - $wsusStatus = $wsusObject.GetStatus() + $computerTargetScope = New-object Microsoft.UpdateServices.Administration.ComputerTargetScope + $computerTargetScope.IncludeDownstreamComputerTargets = $true + $updateSource = "All" + $wsusStatus = $wsusObject.GetComputerStatus($computerTargetScope, $updateSource) $notUpdatedSinceTimespan = new-object TimeSpan($notUpdatedSince, 0, 0, 0) - $computersNotContactedSinceCount = $wsusObject.GetComputersNotContactedSinceCount([DateTime]::UtcNow.Subtract($notUpdatedSinceTimespan)) + $computerTargetScopeNotContactedSince = new-object Microsoft.UpdateServices.Administration.ComputerTargetScope + $computerTargetScopeNotContactedSince.ToLastReportedStatusTime = [DateTime]::UtcNow.Subtract($notUpdatedSinceTimespan) + $computerTargetScopeNotContactedSince.IncludeDownstreamComputerTargets = $true + $computersNotContactedSinceCount = $wsusObject.GetComputerTargetCount($computerTargetScopeNotContactedSince) - $computerTargetScope = new-object Microsoft.UpdateServices.Administration.ComputerTargetScope - $unassignedComputersCount = $wsusObject.GetComputerTargetGroup([Microsoft.UpdateServices.Administration.ComputerTargetGroupId]::UnassignedComputers).GetComputerTargets().Count + $computerTargetScopeUnassigned = new-object Microsoft.UpdateServices.Administration.ComputerTargetScope + $computerTargetScopeUnassigned.IncludeDownstreamComputerTargets = $true + $group = $wsusObject.GetComputerTargetGroups() | ? {$_.Name -like "Unassigned Computers"} + $computerTargetScopeUnassigned.ComputerTargetGroups.Add($group) + $unassignedComputersCount = $wsusObject.GetComputerTargetCount($computerTargetScopeUnassigned) $item = @{ ComputerTargetsNeedingUpdatesCount = $wsusStatus.ComputerTargetsNeedingUpdatesCount; diff --git a/centreon-plugins/centreon/common/powershell/wsus/serverstatistics.pm b/centreon-plugins/centreon/common/powershell/wsus/serverstatistics.pm index 722c397dc..1d71f127b 100644 --- a/centreon-plugins/centreon/common/powershell/wsus/serverstatistics.pm +++ b/centreon-plugins/centreon/common/powershell/wsus/serverstatistics.pm @@ -54,17 +54,22 @@ Try { $wsusObject = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($wsusServer, $useSsl, $wsusPort) - $wsusStatus = $wsusObject.GetStatus() - + $computerTargetScope = New-object Microsoft.UpdateServices.Administration.ComputerTargetScope + $computerTargetScope.IncludeDownstreamComputerTargets = $true + $updateSource = "All" + $wsusStatus = $wsusObject.GetComputerStatus($computerTargetScope, $updateSource) + + $wsusUpdateStatus = $wsusObject.GetStatus() + $item = @{ ComputerTargetCount = $wsusStatus.ComputerTargetCount; CustomComputerTargetGroupCount = $wsusStatus.CustomComputerTargetGroupCount; - UpdateCount = $wsusStatus.UpdateCount; - ApprovedUpdateCount = $wsusStatus.ApprovedUpdateCount; - DeclinedUpdateCount = $wsusStatus.DeclinedUpdateCount; - NotApprovedUpdateCount = $wsusStatus.NotApprovedUpdateCount; - UpdatesWithStaleUpdateApprovalsCount = $wsusStatus.UpdatesWithStaleUpdateApprovalsCount; - ExpiredUpdateCount = $wsusStatus.ExpiredUpdateCount + UpdateCount = $wsusUpdateStatus.UpdateCount; + ApprovedUpdateCount = $wsusUpdateStatus.ApprovedUpdateCount; + DeclinedUpdateCount = $wsusUpdateStatus.DeclinedUpdateCount; + NotApprovedUpdateCount = $wsusUpdateStatus.NotApprovedUpdateCount; + UpdatesWithStaleUpdateApprovalsCount = $wsusUpdateStatus.UpdatesWithStaleUpdateApprovalsCount; + ExpiredUpdateCount = $wsusUpdateStatus.ExpiredUpdateCount } $jsonString = $item | ConvertTo-JSON-20 diff --git a/centreon-plugins/centreon/common/powershell/wsus/updatesstatus.pm b/centreon-plugins/centreon/common/powershell/wsus/updatesstatus.pm index 0e3aace1d..fe2fdfc0a 100644 --- a/centreon-plugins/centreon/common/powershell/wsus/updatesstatus.pm +++ b/centreon-plugins/centreon/common/powershell/wsus/updatesstatus.pm @@ -54,7 +54,8 @@ Try { $wsusObject = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($wsusServer, $useSsl, $wsusPort) - $wsusStatus = $wsusObject.GetStatus() + $updateScope = New-Object Microsoft.UpdateServices.Administration.UpdateScope + $wsusStatus = $wsusObject.GetUpdateStatus($UpdateScope, $True) $item = @{ UpdatesWithClientErrorsCount = $wsusStatus.UpdatesWithClientErrorsCount;