Exchange Powershell Ausgabe prüfen

Hallo zusammen,

ich habe eine knifflige Frage und vorab ich bin keiner der Skripte/Plugins etc. erstellen kann :wink:

Ist es möglich mittels Powershell Skript das auf einem Exchange Server liegt und vom CheckMK ausgeführt wird, deren Ausgaben zu prüfen.

Es geht darum, das ich gerne die Ausgaben von folgenden Befehl darauf prüfen möchte, ob dort der String “AnonymousUsers” enthalten ist und wenn ja ein Crit ausgegeben wird.

Get-ReceiveConnector -Identity "*\Default Frontend*" | ft Server, Name, PermissionGroups

OK
EX01 Default Frontend EX01 ExchangeServers, ExchangeLegacyServers

CRIT
EX01 Default Frontend EX01 AnonymousUsers, ExchangeServers, ExchangeLegacyServers

Wie kann das am besten gelöst werden oder ist es überhaupt so lösbar?

MfG Paul

Das ist ein Fall für einen lokalen Check. Du musst Dein Script so abändern, dass es ausgibt

0 "My Exchange check" - Alles OK

wenn der String AnonymousUsers nicht gefunden wird und

2 "My Exchange check" - Etwas ist fishy hier!

andernfalls. Das ganze dann an den richtigen Ort kopieren und Du hast sofort einen Service in Checkmk:

Hallo

Ich habe mit einem Kollegen folgendes Powershell Skript erstellt und die Ausgabe funktioniert auch.

Switch((Get-ReceiveConnector -Identity "*\Default Frontend*" | ?{$_.PermissionGroups.ToString().Contains("AnonymousUsers")}).Count) {0 {"0 ""Exchange EC Default Frontend PermissionGroups Check"" - Alles OK"} default {"2 ""Exchange EC Default Frontend PermissionGroups Check"" - AnonymousUsers gesetzt"}}

.
.
Ausgabe:
image

Skript wurde auf dem CheckMK Server abgelegt

.
.
Skript wurde über CheckMK auf ein Testsystem verteilt

und wird auf dem Zielsystem übertragen

Eine neue Suche nach Service schlägt erstmal fehl bzw. es taucht kein neuer Service auf.

Muss ich das hier noch machen oder woran scheitert es gerade?

Nein, local checks in dem local Ordner werden vom Agenten automatisch ausgeführt,
lade dir mal die Agent Ausgabe herunter und prüfe, ob die Ausgabe deines Plugins dort vorhanden ist.

1 Like

Was Andre sagt!

Kapitel 5 hier habe ich letztens um zwei Admonitions zu häufigen Fragen ergänzt:

1 Like

Meinst Du das hier?

[PS] C:\Windows\system32>cd C:\ProgramData\checkmk\agent
[PS] C:\ProgramData\checkmk\agent>type .\bakery\check_mk.bakery.yml
# Created by Check_MK Agent Bakery.
# This file is managed via WATO, do not edit manually or you
# lose your changes next time when you update the agent.

fileinfo:
  enabled: true
  path:
  - C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\data\Queue\mail.que
global:
  async_script_execution: parallel
  disabled_sections:
  - openhardwaremonitor
  - skype
  enabled: true
  encrypted: 'yes'
  install: true
  only_from:
  - 127.0.0.1
  - 172.x.x.x
  passphrase: xxxxx
  port: 6556
local:
  enabled: true
  execution:
  - cache_age: 3600
    pattern: Exchange_BackupState.ps1
    run: true
  - async: true
    pattern: '*'
    run: true
logwatch:
  enabled: true
  logfile:
  - system: warn nocontext
  - application: warn nocontext
  - '*': off nocontext
  sendall: false
  skip_duplicated: false
plugins:
  enabled: true
  execution:
  - async: true
    cache_age: 86400
    pattern: $CUSTOM_PLUGINS_PATH$\windows_updates.vbs
    timeout: 3600
  - cache_age: 3600
    pattern: $CUSTOM_PLUGINS_PATH$\cmk_update_agent.checkmk.py
  - cache_age: 600
    pattern: $CUSTOM_PLUGINS_PATH$\msexch_dag.ps1
    run: true
  - cache_age: 600
    pattern: $CUSTOM_PLUGINS_PATH$\msexch_database.ps1
    run: true
  - cache_age: 360
    pattern: $CUSTOM_PLUGINS_PATH$\mssql.vbs
    run: true
    timeout: 300
  - async: true
    pattern: $CUSTOM_PLUGINS_PATH$\*
    run: true
  - pattern: $CUSTOM_PLUGINS_PATH$\mk_inventory.vbs
    run: true
    timeout: 300
system:
  enabled: true
  firewall:
    mode: configure
    port: auto
winperf:
  counters:
  - MSExchangeTransport Queues: msx_queues
  enabled: true

Du kannst beim checkmk Service “Download agent output” auswählen:
grafik

Das ist in Textform genau das, was der Agent ausgibt.
Darin kannst du erkennen, ob das local Skript überhaupt etwas ausgibt und ob das Format richtig ist.

Ich greife mal @aeckstein vorne weg - im agent output dürfte einfach nix enthalten sein. Das Problem dürfte recht einfach sein - das verwendete Powershell command kann nicht gefunden werden mit local system als ausführenden User.
Hier muss doch bestimmt noch das Exchange Powershell snapin geladen werden oder?

2 Likes

Hallo Andreas,

ja deine Vermutung könnte richtig sein mit dem Exchange Modul.

## Add Exchange 2010 commandlets (if not added)
if(!(Get-PSSnapin | 
    Where-Object {$_.name -eq "Microsoft.Exchange.Management.PowerShell.E2010"})) {
      ADD-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
    }

Switch((Get-ReceiveConnector -Identity "*\Default Frontend*" | ?{$_.PermissionGroups.ToString().Contains("AnonymousUsers")}).Count) {0 {"0 ""Exchange EC Default Frontend PermissionGroups Check"" - Alles OK"} default {"2 ""Exchange EC Default Frontend PermissionGroups Check"" - AnonymousUsers gesetzt"}}

Ergebniss
image

Wie und wo kann ich jetzt noch steuern das es nur alle 30min ausgeführt wird? Muss ich hierfür einen Ordner (1800 etc.) unterhalb von “/local/share/check_mk/agents/custom/msexchange-test/lib/local” erstellen?

In der Bakery gibt es dafür die Regel “Set cache age for plugins and local checks”. Da musst du bei Script Pattern den Namen des Powershell Skripts angeben.

2 Likes