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-ID: 335855

Url: https://administrator.de/forum/powershell-verwendung-von-pssession-erzeugt-fehlermeldung-335855.html

Ausgedruckt am: 08.04.2025 um 04:04 Uhr

132895
Lösung 132895 22.04.2017 aktualisiert um 11:29:39 Uhr
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ß
Dani
Dani 23.04.2017 um 10:01:29 Uhr
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