Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Skriptproblem - Exchange 2013

Frage Microsoft Exchange Server

Mitglied: BirdyB

BirdyB (Level 2) - Jetzt verbinden

24.12.2014, aktualisiert 18:29 Uhr, 1774 Aufrufe, 12 Kommentare

Hallo und Frohe Weihnachten liebe Kolleginnen und Kollegen,

ich habe ein kleines Problem mit einem Skript, welches @colinardo mir freundlicherweise erstellt hat. Es soll Send-On-Behalf und Mailbox Full Access Rechte an die Mitglieder von Gruppen vergeben. Bis zum letzten Exchange-Update hat das Skript auch einwandfrei funktioniert, jetzt allerdings erhalte ich nur Fehlermeldungen.
Das Skript lautet wie folgt:
01.
# Exchange-Shell laden 
02.
 
03.
 
04.
$s = Get-PSSession | Where-Object {$_.ConfigurationName -eq 'Microsoft.Exchange'} 
05.
if($s){ 
06.
    Write-Host "Exchange Management Shell already loaded" 
07.
08.
else 
09.
10.
    Write-Host "Exchange Management Shell not found - Loading..." -ForegroundColor Yellow 
11.
  
12.
        . "$env:ExchangeInstallPath\bin\RemoteExchange.ps1" 
13.
  
14.
        Write-Host "Exchange Management Shell loaded $nl"   -ForegroundColor green 
15.
  
16.
        Write-Host "Connecting to Exchange server $nl" 
17.
  
18.
        Connect-ExchangeServer -auto 
19.
  
20.
        Write-Host "Connected to Exchange Server $nl" -ForegroundColor green 
21.
22.
 
23.
 
24.
# Postfach1 
25.
 
26.
 
27.
$mailbox = "buchhaltung@example.com" 
28.
$group = "Buchhaltung" 
29.
 
30.
$mailboxFullRightUsers = Get-MailboxPermission $mailbox | ?{$_.AccessRights -eq "FullAccess" -and $_.IsInherited -eq $false} | %{$_.User.toString().split("\")[1]} 
31.
$groupMemberUsers = Get-AdGroupMember -Identity $group | ?{$_.ObjectClass -eq "user"} | %{$_.SamAccountName} 
32.
 
33.
# SendOnBehalf Recht vergeben 
34.
Set-Mailbox $mailbox -GrantSendOnBehalfTo $groupMemberUsers 
35.
 
36.
# Füge Gruppen-Member zur Shared Mailbox hinzu die noch keinen Vollzugriff haben 
37.
Compare $mailboxFullRightUsers $groupMemberUsers -PassThru | ?{$_.SideIndicator -eq "=>"} | %{echo "Füge User '$_' der Mailbox hinzu"; Add-MailboxPermission $mailbox -User $_ -AccessRights FullAccess -InheritanceType All | out-null} 
38.
 
39.
# Entferne Permissions wenn User nicht mehr Mitglied der Gruppe 
40.
Compare $mailboxFullRightUsers $groupMemberUsers -PassThru | ?{$_.SideIndicator -eq "<="} | %{echo "Entferne User '$_' aus der Shared Mailbox"; Remove-MailboxPermission $mailbox -User $_ -AccessRights FullAccess -Confirm:$false | out-null} 
41.
 
Die Fehlermeldung lautet folgendermaßen:

01.
Compare-Object : Das Argument kann nicht an den Parameter "ReferenceObject" gebunden werden, da es NULL ist. 
02.
In C:\Skripte\Postfachberechtigungen.ps1:56 Zeichen:9 
03.
+ Compare $mailboxFullRightUsers $groupMemberUsers -PassThru | ?{$_.SideIndicator  ... 
04.
+         ~~~~~~~~~~~~~~~~~~~~~~ 
05.
    + CategoryInfo          : InvalidData: (:) [Compare-Object], ParameterBindingValidationException 
06.
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.CompareObjectCommand
Hat jemand eine Idee, wie ich das Skript anpassen muss, dass es wieder funktioniert?

Vielen Dank für die Hilfe!

Beste Grüße!

Berthold
Mitglied: emeriks
24.12.2014 um 13:59 Uhr
Hi,
es ist schwer, etwas über Zeile 56 zu sagen, wenn diese hier nicht dabei ist ...

E.
Bitte warten ..
Mitglied: BirdyB
24.12.2014, aktualisiert um 14:21 Uhr
Du hast natürlich Recht... Der Block zwischen Zeile 24 und 41 wiederholt sich noch für einige andere Postfächer, daher habe ich die Wiederholungen weggelassen.
Zeile 56 lautet:
01.
Compare $mailboxFullRightUsers $groupMemberUsers -PassThru | ?{$_.SideIndicator -eq "=>"} | %{echo "Füge User '$_' der Mailbox hinzu"; Add-MailboxPermission $mailbox -User $_ -AccessRights FullAccess -InheritanceType All | out-null}
Ich habe gerade nochmal einzelne Teile des Skripts manuell ausgeführt. Eine Sache hat mich jedoch etwas gewundert:
01.
[PS] C:\Windows\system32>compare 
02.
Cmdlet Compare-Object an der Befehlspipelineposition 1 
03.
Geben Sie Werte für die folgenden Parameter an: 
04.
ReferenceObject[0]: $mailboxfullrightusers 
05.
ReferenceObject[1]: $groupmemberusers 
06.
ReferenceObject[2]:  
07.
DifferenceObject[0]:  
08.
 
09.
InputObject                                                                                     SideIndicator                                                                                  
10.
-----------                                                                                     -------------                                                                                  
11.
$mailboxfullrightusers                                                                          <=                                                                                             
12.
$groupmemberusers                                                                               <=                                                                                             
13.
 
14.
 
15.
 
16.
[PS] C:\Windows\system32>Compare $mailboxFullRightUsers $groupMemberUsers 
17.
Compare-Object : Das Argument kann nicht an den Parameter "ReferenceObject" gebunden werden, da es NULL ist. 
18.
In Zeile:1 Zeichen:9 
19.
+ Compare $mailboxFullRightUsers $groupMemberUsers 
20.
+         ~~~~~~~~~~~~~~~~~~~~~~ 
21.
    + CategoryInfo          : InvalidData: (:) [Compare-Object], ParameterBindingValidationException 
22.
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.CompareObjectCommand
Einzeln eingegeben erhalte ich keine Fehlermeldung, übergebe ich die beiden Objekte als Parameter schon... Woran kann das liegen?
Bitte warten ..
Mitglied: emeriks
24.12.2014 um 14:49 Uhr
Könnte es sein, dass die betreffende Gruppe tatsächlich keine Benutzer als direkte Mitglieder hat?
Bitte warten ..
Mitglied: colinardo
24.12.2014, aktualisiert um 15:06 Uhr
Hallo Berthold,
bin hier zufällig gerade vorbei geschlendert...
Anscheinend hat die entsprechende Mailbox keine User denen expliziten FullAccess Rechte erteilt wurden. Wie die Fehlermeldung schon sagt ist das Reference-Object also die erste Variable $mailboxFullRightUsers leer.

Lass dir also mal folgende Zeile anzeigen:
Get-MailboxPermission $mailbox | ?{$_.AccessRights -eq "FullAccess" -and $_.IsInherited -eq $false}
wenn da nix bei raus kommt, liegt hier der Fehler. Lass dir auch mal nur
Get-MailboxPermission "buchhaltung@example.com"
anzeigen und überprüfe ob es überhaupt ein "FullAccess Right" ohne "inheritance" gibt.

Wenn das der Fall wäre müsste man dies mit einem IF abfangen und in diesem Fall einfach alle User aus $groupMemberUsers hinzufügen.

Frohes Fest
Grüße Uwe
Bitte warten ..
Mitglied: BirdyB
24.12.2014, aktualisiert um 15:32 Uhr
Hallo Uwe,

also bei beiden Abfragen werden mir Benutzer angezeigt... die meisten haben bei AccessRights {FullAccess} stehen.
Auch wenn ich das Skript Schritt-für-Schritt ablaufen lasse, stehen in $mailboxfullrightusers und in $groupmemberusers Benutzer drin.

Frohes Fest und beste Grüße!


Berthold
Bitte warten ..
Mitglied: colinardo
24.12.2014, aktualisiert um 15:52 Uhr
Könnte sein das sich hier das CMDLet Compare-Object etwas geändert hat. Gebe die Parameternamen in der COMPARE-Zeile mal explizit an:
Compare -ReferenceObject $mailboxFullRightUsers -DifferenceObject $groupMemberUsers .....................
aber wenn die Shell sagt das das Objekt NULL ist dann wird das auch stimmen ...
Eventuell hast du durch den mehrfachen Aufrufen irgendwo einen Fehler eingebaut.
Bitte warten ..
Mitglied: BirdyB
24.12.2014, aktualisiert um 15:42 Uhr
Leider immer noch der gleiche Fehler...

EDIT:

Was mir gerade aufgefallen ist: Bei der Buchhaltungsgruppe läuft das Skript ohne Fehler durch, bei allen Folgenden gibt es den Fehler.
Die Befehle sind für jedes Postfach per Copy&Paste eingefügt, nur $mailbox und $group habe ich manuell geändert.
Bitte warten ..
Mitglied: colinardo
24.12.2014, aktualisiert um 16:05 Uhr
Dann kann eigentlich nur irgendwo ein Schreibfehler passiert sein, Setz die Variablen in jedem Abschnitt mal manuell auf $null. Prüfe alle Variablen Schritt für Schritt für jeden Abschnitt. Kann den Fehler hier leider nicht reproduzieren. Aber wieso kopierst du die Befehle per Copy&Paste hintereinander wenn du es mit einer Schleife nur einmal benötigst ?

01.
$ht = @{ 
02.
        "mailbox1@domain.de"="Gruppe1"; 
03.
        "mailbox2@domain.de"="Gruppe2"; 
04.
        "mailbox3@domain.de"="Gruppe3"; 
05.
06.
$ht.GetEnumerator() | %{ 
07.
    $mailbox = $_.Key 
08.
    $group = $_.Value 
09.
 
10.
    #..... hier der Rest ... 
11.
    #... 
12.
    #.. 
13.
 
14.
}
Bitte warten ..
Mitglied: BirdyB
24.12.2014 um 16:06 Uhr
Weil ich keine Idee habe, wie ich die Zuordnungen Von Postfach und Gruppe sinnvoll in Powershell in eine Schleife bekomme
Bitte warten ..
Mitglied: BirdyB
24.12.2014 um 16:26 Uhr
Also zum Thema Schreibfehler:
Ich habe die Befehle jetzt mal in eine Funktion gepackt. Mit meiner Buchhaltungsgruppe gibt es keinen Fehler mit den anderen schon. Ich habe nur ehrlich keine Idee warum das so ist...
Bitte warten ..
Mitglied: colinardo
LÖSUNG 24.12.2014, aktualisiert um 18:29 Uhr
Zitat von BirdyB:
Also zum Thema Schreibfehler:
Ich habe die Befehle jetzt mal in eine Funktion gepackt. Mit meiner Buchhaltungsgruppe gibt es keinen Fehler mit den anderen schon. Ich habe nur ehrlich keine Idee warum das so ist...
Da hilft dann leider nur penibelstes Zerlegen der Pipes und checken der Werte. Das kann ich dir hier leider nicht abnehmen, da mir deine Rohdaten fehlen, sorry.

Grüße Uwe
Bitte warten ..
Mitglied: BirdyB
24.12.2014 um 18:29 Uhr
Also: Dank @colinardo habe ich das Problem jetzt gelöst: Ich hatte einen Benutzer gelöscht und deshalb stand nur eine SID in der Gruppenliste. Das hat dann den Fehler ausgelöst.
Die Lösung: Die fehlerhafte Zeile wie folgt ersetzen:
01.
$mailboxFullRightUsers = Get-MailboxPermission $mailbox | ?{$_.AccessRights -eq "FullAccess" -and $_.IsInherited -eq $false -and $_.User.toString() -like '*\*'} | %{$_.User.toString().split("\")[1]}
Danke nochmal für die Hilfe und frohe Weihnachten!


Berthold
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Exchange Server
Exchange 2013 Aktivierung (5)

Frage von Mazenauer zum Thema Exchange Server ...

Exchange Server
Problem mit POP3-Abruf eines Exchange-2013-Postfachs (1)

Frage von YotYot zum Thema Exchange Server ...

Exchange Server
gelöst Exchange 2013 lässt sich nicht Updaten (9)

Frage von onkel87 zum Thema Exchange Server ...

Exchange Server
gelöst Zertifikatsfehler nach Migration von Exchange 2007 zu Exchange 2013 (2)

Frage von Tommy1983 zum Thema Exchange Server ...

Heiß diskutierte Inhalte
Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...

Peripheriegeräte
Wlan stört Funkmaus (11)

Frage von Falaffel zum Thema Peripheriegeräte ...

Peripheriegeräte
gelöst USB Festplatte verliert Laufwerksbuchstabe (9)

Frage von cese4321 zum Thema Peripheriegeräte ...