none
Powershell Remote, Parameter, get-mailbox -database Verständnisfrage, RRS feed

  • Frage

  • moin,

    wenn ich eine Remote Session zu unserem Exchange aufbaue habe ich nicht alle Befehle zur Verfügung.

    $SessionUser = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://server/PowerShell/ -Authentication Kerberos
    Import-PSSession $SessionUser -AllowClobber -DisableNameChecking

    In der Doku gibt es ja einen Parameter "Database"

    get-mailbox | get-member zeigt zb. in der Remote Session

    Database                               Property     System.String get;set;}                                                                                                                 

    am Exchange in der EMS

    Database                               Property              Microsoft.Exchange.Data.Directory.ADObjectId Database {get;}

    1. wie zeige ich mir alle gültigen Parameter für eine Remote Session an?

     A parameter cannot be found that matches parameter name 'database'.

    2. wie läuft das künftig mit einen Core Server wenn man nicht alle Befehle zur Verfügung hat. (falls die Frage hier nicht passt, stelle ich sie gerne nochmals im Exchange Forum)


    Chris


    Freitag, 4. Januar 2019 10:05

Antworten

  • Moin,

    ja, in einer Remote-Session ohne EMS sind viele Typen zu String serialisiert. So z.B. auch E-Mail-Adressen, Postfachgrößen, Quota und alle möglichen anderen.

    Da muss man eben schauen, welcher String (bei einer Datenbank wäre das eigentlich nur Name, GUID oder DN) eindeutig eine Datenbank identifiziert - das wird dann in beiden Szenarien funktionieren.

    Deine Frage nach dem Core verstehe ich nicht ganz - natürlich stehen auch da alle Befehle zur Verfügung. Exchange-Verwaltung ist doch eh immer "remote", auch wenn Du die EMS auf einem Exchange-Server aufrufst.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert -- Chris -- Freitag, 4. Januar 2019 12:13
    Freitag, 4. Januar 2019 10:17
  • Moin,

    richtige Beobachtung, falsche Schlussfolgerung ;-)

    Man muss seine Skripte so schreiben, dass sie in einer "neutralen" Remoting-Session funktionieren, dann braucht man auch die Management-Tools von Exchange nicht. Ich habe Umgebungen, da weiß ich gar nicht, wann ich zum letzten Mal die native EMS auf hatte...

    Vergiss nicht, das die installierte EMS 1. gepatcht werden muss, und 2. in der Windows Installer-Datenbank genauso dargestellt ist wie jede andere Exchange-Rolle. Das heißt, wenn Du ein Lizenz-Verwaltungstool im Einsatz hast, musst Du ihm plötzlich verklickern, dass Du nach wie vor bloß vier Exchange-Server hast, und die restlichen 16 "Exchange-Server" lediglich Admin-Workstations sind ;-)


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert -- Chris -- Freitag, 4. Januar 2019 12:13
    Freitag, 4. Januar 2019 10:21
  • Moin,

    das Problem verstehe ich nicht. Du hast alle Befehle und alle Parameter, nur sind die Rückgaben ab und zu von einem anderen Typ.

    Get-Mailbox -Database MDB01 wird mit und ohne EMS identisch funktionieren. Nur wird in der EMS 

    $items = (Get-Mailbox jdoe | Get-MailboxStatistics).TotalItemSize

    ein komplexes Objekt liefern, das Du mit

    $items.Value.ToGB()
    in eine Zahl (in Gigabyte) umsetzen kannst, während in einer "neutralen" Sitzung $items einen String in Form 4.2 GB (4,509,715,660 Bytes) enthält.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert -- Chris -- Freitag, 4. Januar 2019 12:13
    Freitag, 4. Januar 2019 10:36
  • Ich finde schon, dass der Unterschied gewaltig ist.

    Bekomme ich ein Objekt beim Zugriff geliefert, kann ich die Methoden und Eigenschaften des Objektes verwenden.
    Bekomme ich nur ein String(Objekt), kann ich nur die Stringfunktionen nutzen, aber nicht mehr auf das eigentliche Objekt zugreifen.

    Mit den Zusatztools passiert da wohl noch etwas anderes:
    Beim Zugriff auf Remoteobjekte werden diese (weitgehend) serialisiert und lokal deserialisiert.
    COM bzw. DCOM erlaubt dann Zugriffe von Lokal auf Remote über entsprechende RemoteCalls.


    • Bearbeitet Der Suchende Freitag, 4. Januar 2019 11:07
    • Als Antwort markiert -- Chris -- Freitag, 4. Januar 2019 12:13
    Freitag, 4. Januar 2019 11:07

Alle Antworten

  • Moin,

    ja, in einer Remote-Session ohne EMS sind viele Typen zu String serialisiert. So z.B. auch E-Mail-Adressen, Postfachgrößen, Quota und alle möglichen anderen.

    Da muss man eben schauen, welcher String (bei einer Datenbank wäre das eigentlich nur Name, GUID oder DN) eindeutig eine Datenbank identifiziert - das wird dann in beiden Szenarien funktionieren.

    Deine Frage nach dem Core verstehe ich nicht ganz - natürlich stehen auch da alle Befehle zur Verfügung. Exchange-Verwaltung ist doch eh immer "remote", auch wenn Du die EMS auf einem Exchange-Server aufrufst.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert -- Chris -- Freitag, 4. Januar 2019 12:13
    Freitag, 4. Januar 2019 10:17
  • ich habe noch etwas herausgefunden. Wenn die Exchange Tools (Exchange DVD) auf einem Rechner installiert sind funktioniert es mit dem Parameter "Database".

    d.h. man muss vermutlich künftig die Exchange Tools installieren wenn man einen Core Server komplett von der Fernen administrieren möchte.


    Chris


    Freitag, 4. Januar 2019 10:17
  • Moin,

    richtige Beobachtung, falsche Schlussfolgerung ;-)

    Man muss seine Skripte so schreiben, dass sie in einer "neutralen" Remoting-Session funktionieren, dann braucht man auch die Management-Tools von Exchange nicht. Ich habe Umgebungen, da weiß ich gar nicht, wann ich zum letzten Mal die native EMS auf hatte...

    Vergiss nicht, das die installierte EMS 1. gepatcht werden muss, und 2. in der Windows Installer-Datenbank genauso dargestellt ist wie jede andere Exchange-Rolle. Das heißt, wenn Du ein Lizenz-Verwaltungstool im Einsatz hast, musst Du ihm plötzlich verklickern, dass Du nach wie vor bloß vier Exchange-Server hast, und die restlichen 16 "Exchange-Server" lediglich Admin-Workstations sind ;-)


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert -- Chris -- Freitag, 4. Januar 2019 12:13
    Freitag, 4. Januar 2019 10:21
  • Befehle Remoting:

    d.h. der Quercheck get-xyz | get-member ist korrekt - oder?

    ...dass sie in einer "neutralen" Remoting-Session funktionieren, ...

    ist ja schwierig wenn es bestimmt Parameter / Befehle nicht gibt.

    wie würdest du zb. get-mailbox -database abbilden? Da fehlt mir scheinbar noch Basiswissen.

    zweiter Absatz: da gebe ich dir voll Recht. Bin auch ein Gegner von zu vielen EMS im Unternehmen.


    Chris

    Freitag, 4. Januar 2019 10:28
  • Moin,

    das Problem verstehe ich nicht. Du hast alle Befehle und alle Parameter, nur sind die Rückgaben ab und zu von einem anderen Typ.

    Get-Mailbox -Database MDB01 wird mit und ohne EMS identisch funktionieren. Nur wird in der EMS 

    $items = (Get-Mailbox jdoe | Get-MailboxStatistics).TotalItemSize

    ein komplexes Objekt liefern, das Du mit

    $items.Value.ToGB()
    in eine Zahl (in Gigabyte) umsetzen kannst, während in einer "neutralen" Sitzung $items einen String in Form 4.2 GB (4,509,715,660 Bytes) enthält.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert -- Chris -- Freitag, 4. Januar 2019 12:13
    Freitag, 4. Januar 2019 10:36
  • Ich finde schon, dass der Unterschied gewaltig ist.

    Bekomme ich ein Objekt beim Zugriff geliefert, kann ich die Methoden und Eigenschaften des Objektes verwenden.
    Bekomme ich nur ein String(Objekt), kann ich nur die Stringfunktionen nutzen, aber nicht mehr auf das eigentliche Objekt zugreifen.

    Mit den Zusatztools passiert da wohl noch etwas anderes:
    Beim Zugriff auf Remoteobjekte werden diese (weitgehend) serialisiert und lokal deserialisiert.
    COM bzw. DCOM erlaubt dann Zugriffe von Lokal auf Remote über entsprechende RemoteCalls.


    • Bearbeitet Der Suchende Freitag, 4. Januar 2019 11:07
    • Als Antwort markiert -- Chris -- Freitag, 4. Januar 2019 12:13
    Freitag, 4. Januar 2019 11:07
  • COM bzw. DCOM erlaubt dann Zugriffe von Lokal auf Remote über entsprechende RemoteCalls.

    In dem Fall nicht. Da kommt nichts anderes als WSMAN zum Tragen, nur deserialisieren die installierbaren Tools die Objekte anders. Und die meisten dieser Objekte sind mit und ohne Tools identisch, die Differenzen halten sich also wirklich in Grenzen.

    Was natürlich immer bei sowas verloren geht, sind Methoden. Aber wenn ich ein Management-Paradigma entwickle, das von vornherein auf WSMAN-Remoting ausgelegt ist (wie im Fall Exchange), dann ist es ohnehin nicht zielführend, meine eigenen Objektklassen mit Methoden zu versehen. Und bei Exchange ist dieser Ansatz auch ganz gut durchgeahlten worden - statt Methoden gibt's halt zusätzliche Cmdlets für alle möglichen Operationen. Bis auf wenige Ausnahmen eben.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Freitag, 4. Januar 2019 11:25
  • Evgenij

    kannst du bitte einmal probiere ob das bei dir remote geht? Oder verbindest du dich anders zum Server?

    $SessionUser = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://server/PowerShell/ -Authentication Kerberos

    Import-PSSession $SessionUser -AllowClobber -DisableNameChecking

    get-mailbox -database vip



    PS Microsoft.PowerShell.Core\FileSystem:: get-mailbox -database "vip"
    A parameter cannot be found that matches parameter name 'database'.
        + CategoryInfo          : InvalidArgument: (:) [Get-Mailbox], ParameterBindingException
        + FullyQualifiedErrorId : NamedParameterNotFound,Get-Mailbox
        + PSComputerName        : serverex


    Chris

    Freitag, 4. Januar 2019 11:56
  • Ja, genau so mache ich das, und es funktioniert. Aber Dein PS Prompt in der Fehlermeldung sieht mir ein bisschen komisch aus. Kann es sein, dass Du da irgendwelche Double Hops machst?

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.


    Freitag, 4. Januar 2019 12:04
  • Manchmal sind die Zugriffe case sensitive.
    Laut obiger Aussage heißt der Parameter ja "Database".

    Freitag, 4. Januar 2019 12:05
  • Manchmal sind die Zugriffe case sensitive.
    Laut obiger Aussage heißt der Parameter ja "Database".

    In PowerShell nicht.

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Freitag, 4. Januar 2019 12:05
  • Problem war bei mir Userabhängig! mit SYSAdmin oder Domain Admin klappt es jetzt. Aus Securitygründen darf bei uns inzwischen kaum jemand noch direkt auf andere  Server/Maschinen und wir benötigen immer einen Systemadministrator. Habe die ISE vermutlich als mein User gestartet.

    Fehlermeldung ist ganz schön irreführend.


    Chris

    Freitag, 4. Januar 2019 12:16
  • Fehlermeldung ist ganz schön irreführend.

    ...aber nicht ganz so, wenn man versteht, wie RBAC in Exchange funktioniert:

    • jeder User hat die Berechtigung, sich per Remote PowerShell zum Exchange zu verbinden
    • er hat dabei aber nur Zugriff auf sein eigenes Postfach 
    • deshalb sieht er das Cmdlet Get-Mailbox...
    • ... aber nicht den Parameter -Database dieses Cmdlets, denn er darf eben nicht alle Postfächer in einer DB auflisten.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Freitag, 4. Januar 2019 12:37