dani
Goto Top

Powershell - Verwendung von PSSession erzeugt Fehlermeldung

Hallo liebe Kolleginnen und Kollegen,
vor der Umstellung auf Exchange 2016 bietet sich es an diverse Skripte zu überabeiten. Bisher wurden die Exchange Server Management Tools auf einer Art Job-VM installiert. Auf diese soll in Zukunft wenn möglich verzichtet werden, um die Pflege der Tools überflüssig zu machen.

Das Skript sieht aktuell so aus:
. ((get-itemproperty HKLM:\SOFTWARE\Microsoft\ExchangeServer\v15\Setup).MsiInstallPath + "bin\RemoteExchange.ps1")  
Connect-ExchangeServer -auto

$groups = Get-DynamicDistributionGroup | select DisplayName, LdapRecipientFilter, RecipientContainer, Notes

foreach ($group in $groups) {

    [string] $members = ""  

    $objContainer ="LDAP://" + $group.RecipientContainer.DistinguishedName  
    $objDomain = New-Object System.DirectoryServices.DirectoryEntry $objContainer
    $strFilter = $group.LdapRecipientFilter

    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
    $objSearcher.SearchRoot = $objDomain
    $objSearcher.Filter = $strFilter
    $objSearcher.SearchScope = "Subtree"  
    $objSearcher.PropertiesToLoad.Add("Name") | Out-Null  
    $objSearcher.Sort.PropertyName = "Name"  

    $colResults = $objSearcher.FindAll()
...
}
Macht genau was es soll.

Nun habe ich die ersten drei Zeilen des obigen Skripts durch folgenden Zeilen ersetzt:
$ExchangePsSessionId = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://$ExchangeFqdn/powershell" -Authentication Kerberos  
Import-PSSession $ExchangePsSessionId -DisableNameChecking -AllowClobber | out-null

Lass ich das Skript erneut laufen, erhalte ich auf einmal folgende Fehlermeldung.
Ausnahme beim Aufrufen von "FindAll" mit 0 Argument(en):  "Unbekannter Fehler (0x80005000)"  
In C:\x\y\z.ps1:77 Zeichen:5
+     $colResults = $objSearcher.FindAll()
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) , MethodInvocationException
    + FullyQualifiedErrorId : COMException 
Mir leuchtet leider nicht ein, warum es über die Management Tools funktioniert aber mit der importierten PSSession nicht.
Kann mir jemand auf die Sprünge helfen?


Gruß,
Dani

Content-Key: 335855

Url: https://administrator.de/contentid/335855

Printed on: April 19, 2024 at 12:04 o'clock

Mitglied: 132895
Solution 132895 Apr 22, 2017 updated at 09:29:39 (UTC)
Goto Top
Hi,
das liegt daran das bei der Verwendung von einer Remote-Session hier bei bestimmte Objekte nicht serialisiert werden.
So geschehen bei
$groups = Get-DynamicDistributionGroup | select DisplayName, LdapRecipientFilter, RecipientContainer, Notes 
Schau dir die Typen aller untergeordneten Eigenschaften der Groups an und du wirst feststellen das manchen zu Strings deserialisiert wurden, also bestimmte Eigenschaften die vorher typisiert waren nun reine Strings sind!
So kommt es dann das du deinem Adsisearcher fehlerhafte Parameter mitgibst und dieser fehlschlägt.

Das gilt es bei der Verwendung von Remote-Sessions immer zu beachten.
https://blogs.msdn.microsoft.com/powershell/2010/01/07/how-objects-are-s ...

Gruß
Member: Dani
Dani Apr 23, 2017 at 08:01:29 (UTC)
Goto Top
Moin,
vielen Dank für die ausführlich Erklärung. Ich hab mir ehrlicherweise nur vom $groups den Typ angeschaut und daraus geschlossen, dass die Subobjekte auch in Ordnung sind -> großer Irrturm.

Das Verhalten ist wohl SOAP/HTTP geschuldet und ich nehme an, dass das Verhalten durch aus seinen Sinn hat. Wenn es mir auch Lesen von einigen Beiträgen nicht einleuchten möchte. face-wink

In diesem Fall wird es bei der Best Practice Lösung bleiben und die Exchange Management Tools weiterhin installiert/aktualisiert werden.


Gruß,
Dani