Prije nekog vremena primijetio sam da Exchange Online Set-CalendarProcessing cmdlet više ne provodi nikakvu provjeru valjanosti za neke od svojih parametara, i to marljivo izdao PSA o tome. Dok Microsoft razmatra problem (i nadamo se da će ga riješiti), ideja mu je pala na pamet – osigurati bolji cmdlet koji ne samo da radi ispravnu provjeru valjanosti, već se može koristiti u skupnim scenarijima. Stoga u ovom članku ispitajmo kako izraditi i raditi s PowerShell cmdletima koji će nam pomoći da automatiziramo proces dodavanja ili uklanjanja delegata resursa u više poštanskih sandučića, bez brige o potencijalnom prepisivanju postojećih vrijednosti.
Pojedinosti o implementaciji (slobodno preskočite)
Da bismo konfigurirali delegata resursa, potrebne su nam dvije stvari. Prvo, trebamo poštanski sandučić resursa na kojem želimo konfigurirati delegat(e). Važan dio ovdje je da ne može svaki poštanski sandučić imati konfigurirane delegate resursa. Samo resursni poštanski sandučić, što znači ili poštanski sandučić sobe (s a RecipientTypeDetails vrijednost od RoomPoštanski sandučić) ili poštanski sandučić opreme (RecipientTypeDetails vrijednost od Oprema Poštanski sandučić) su dopušteni. The Set-CalendarProcessing cmdlet će izbaciti pogrešku ako pokušate konfigurirati delegate resursa za bilo koju drugu vrstu poštanskog sandučića. Stoga se provjera dodaje našim cmdletima kako bi se osiguralo da su prihvaćene samo “ispravne” vrijednosti poštanskog sandučića.
Ako želimo osigurati da cmdleti podržavaju skupne radnje, odnosno dodavanje ili uklanjanje jednog ili više delegata resursa u jedan ili više poštanskih sandučića resursa u jednom potezu, isplati se dodati neku dodatnu logiku kako bismo osigurali da su ulazne vrijednosti ispravno provjerene. Ovo je posebno relevantno za scenarij uklanjanja delegata, budući da ExO do danas nastavlja vraćati svoje Ime kao jedini identifikator pod ResourceDelegates vlasništvo. I dok nedavna poboljšanja usluge to osiguravaju Ime vrijednosti su jedinstvene, to ne vrijedi za Exchange poslužitelj.
Stoga želimo osigurati da će se prosljeđivati samo jedinstvene vrijednosti, au tu će svrhu cmdleti “razriješiti” i pratiti sve navedene ulazne vrijednosti, zamjenjujući ih jedinstvenim identifikatorima kao što je primarna SMTP adresa objekta ili njegov GUID. Iako ovaj pristup povećava troškove izdavanjem dodatnih izvršenja Get-Poštanski sandučić i Get-Recipient cmdlets, ima dodatnu prednost dopuštanja bilo kojeg valjanog identifikatora (tj. pseudonim, ime, GUID ili bilo koje adrese e-pošte povezane s objektom) kao unosa. Također će minimizirati mogućnost pogrešaka tijekom naknadnih poziva na Set-CalendarProcessing cmdlet. Na primjer:
Na gornjoj snimci zaslona možemo vidjeti da dotični poštanski sandučić već ima konfiguriran skup delegata resursa. Jedna od vrijednosti odgovara “dupliciranom” objektu, onom za koji se koristi postupak rješavanja Get-Recipient rezultira vraćanjem višestrukih unosa. Dok samo jedan objekt za koji je Ime svojstvo je postavljeno na rečenu vrijednost postoji, prosljeđivanje navedene vrijednosti će i dalje rezultirati pogreškom prilikom izvršavanja Set-CalendarProcessing cmdlet.
Kako bi uzeli u obzir takve scenarije, cmdleti rješavaju i prate vrijednosti identifikatora. Oni će zanemariti sve ulazne vrijednosti za koje postoji podudaranje Ime se ranije susrelo. Sve vrijednosti koje se ne rješavaju važećem primatelju također se zanemaruju, čime se eliminiraju problemi “bez provjere valjanosti” na koje Set-CalendarProcessing cmdlet je trenutno sklon. Slično tome, osiguravamo da Identitet parametar prihvaća samo identifikatore poštanskih sandučića sobe i opreme kao ulaz.
Zapravo, posvetimo jednu minutu rezimiranju problema s provjerom valjanosti koje smo opisali prethodno. Ponašanje se može replicirati ne samo za nepostojeće objekte, već i pri prosljeđivanju identifikatora za postojeći objekt tipa (RecipientTypeDetails vrijednost) Korisnikili a RoleGroup jedan što se toga tiče. Iskorištavanjem Get-Recipient cmdlet za provjeru ulazne vrijednosti, automatski ćemo isključiti takve vrste objekata jer nisu važeći primatelji. Možemo ići korak dalje ograničavanjem vrste primatelja za usklađivanje, što nam pomaže da izuzmemo objekte kao što su Dijeljeni poštanski sandučići ili Kontakti pošte. Zapravo, ograničavamo skup prihvaćenih vrijednosti na korisničke poštanske sandučiće i grupne objekte.
Kao sporedna napomena ovdje, dok se grupe (Exchange) mogu koristiti u svrhe delegiranja, zapamtite da se poštuju samo izravni članovi grupe, a sve ugniježđene grupe se zanemaruju. I još jedna usporedna napomena – namjerno izbjegavamo korištenje Exchange Online REST-baziranih cmdleta, kao što je Get-EXORecipientkako bismo osigurali da će naši prilagođeni cmdleti raditi i za ExO i za lokalne scenarije. Unatoč tome, primarno su testirani za korištenje Exchange Online, stoga svakako napravite osnovnu provjeru valjanosti prije nego što ih pokrenete s instalacijama Exchange Servera.
Nakon što imamo odgovarajući popis poštanskih sandučića i delegata, možemo nazvati Set-CalendarProcessing cmdlet za ažuriranje zbirke delegata resursa. Naravno, želimo osigurati da sve postojeće vrijednosti u navedenoj zbirci budu sačuvane (za Dodati- scenariju), što zahtijeva dodatnu obradu. Dohvaćamo trenutni popis putem Set-CalendarProcessingzatim iterirajte svaku vraćenu ulaznu vrijednost i usporedite je s njom. Ako utvrdimo da nisu potrebne promjene, prelazimo na sljedeći poštanski sandučić. Inače, mi vodimo Set-CalendarProcessing cmdlet s ažuriranim skupom delegata.
Iako ovaj pristup nudi prednost u brzini, malo otežava praćenje pojedinačnih unosa/uklanjanja, što utječe na rukovanje pogreškama i granularnost izlaza. Ali kako se ne možemo osloniti na Set-CalendarProcessing cmdlet na tom planu, barem dok Microsoft ne riješi trenutne probleme s provjerom valjanosti, ovdje nemamo puno izbora. Nakon što se cmdlet bude ponašao na prikladniji način, moći ćemo provjeriti i djelovati u skladu s pojedinačnim dodavanjima/uklanjanjima, dinamički prilagoditi skup poštanskih sandučića i delegata na temelju rezultata i pružiti odgovarajući izlaz. No dok se to ne dogodi, oslanjat ćemo se na logiku prije izvršenja dodanu našem prilagođenom cmdletu za otkrivanje potencijalnih problema i ažuriranje zbirke delegata resursa u jednom potezu.
Upoznajte skupne cmdlete
Bez daljnjeg odlaganja, evo dva cmdleta koje možete koristiti za skupno dodavanje ili uklanjanje delegata resursa:
- Add-RoomDelegate – koristite ovaj cmdlet za dodavanje delegata resursa u poštanski sandučić resursa. Cmdlet potvrđuje ulazne vrijednosti kao što je opisano u prethodnom odjeljku članka. Skupna obrada podržana je za oba -Korisnik i -Poštanski sandučić parametri.
- Ukloni-RoomDelegate – upotrijebite ovaj cmdlet za uklanjanje delegata resursa iz poštanskog sandučića resursa, pritom osiguravajući očuvanje postojećih delegata. Cmdlet potvrđuje ulazne vrijednosti kao što je opisano u prethodnom odjeljku članka. Skupna obrada podržana je za oba -Korisnik i -Poštanski sandučić parametri.
Oba cmdleta podržavaju isti skup parametara:
- poštanski sandučić – koristite ovaj parametar za navođenje identiteta poštanskog sandučića resursa za koje želite ažurirati skup delegata resursa. Možete upotrijebiti bilo koji važeći identifikator koji odgovara poštanskom sandučiću sobe ili opremi. Skupne operacije podržane su prosljeđivanjem više vrijednosti poštanskog sandučića kao ulaznog polja.
- Korisnik – koristite ovaj parametar za navođenje identiteta delegata resursa kojima želite dodati (ili ukloniti). Možete koristiti bilo koji važeći identifikator koji odgovara korisničkom poštanskom sandučiću ili jednoj od vrsta grupa koje podržava Exchange. Puni skup podržanih vrsta primatelja uključuje: UserMailbox, MailUniversalDistributionGroup, MailUniversalSecurityGroup, GroupMailbox, DynamicDistributionGroup.
Skupne operacije podržane su prosljeđivanjem više vrijednosti parametara kao ulaznog polja.
Osim toga, podržavaju sljedeće uobičajene parametre:
- Što ako – koristite ovaj parametar za pregled izvršavanja cmdleta, bez izvršavanja stvarnih promjena.
- Opširno – upotrijebite ovaj parametar da biste uputili skriptu da ispiše dodatne detalje obrade.
Da biste koristili cmdlete, preuzmite skriptu iz mog GitHub repoai ili dot-source ili kopirajte i zalijepite same cmdlet definicije u vlastito rješenje. Namjerno sam ih odlučio ne objaviti kao dio modula jer nisam želio stvoriti još jedno spremište za samo dva cmdleta. Osim toga, trebali biste vidjeti te cmdlete kao dokaz koncepta i alat za učenje, a ne kao rješenje spremno za proizvodnju.
U svakom slučaju, evo nekoliko primjera kako pokrenuti cmdlete:
#Dot-source the script to load the cmdlets . .\Room_delegate_bulk.ps1 #Add resource delegate(s) while preserving the existing set of delegates</pre> Add-RoomDelegate -Mailbox room@domain.com -User userA@domain.com,userB@domain.com #Remove resource delegate(s) while preserving the existing set of delegates Remove-RoomDelegate -Mailbox room@domain.com -User userA@domain.com #Add a given user as resource delegate to all room mailboxes in the organization Add-RoomDelegate -Mailbox (Get-Mailbox -RecipientTypeDetails RoomMailbox) -User userA@domain.com #Remove a given user as resource delegate from all room mailboxes in the organization Remove-RoomDelegate -Mailbox (Get-Mailbox -RecipientTypeDetails RoomMailbox) -User userA@domain.com
Snimka zaslona u nastavku prikazuje izvođenje Ukloni-RoomDelegate cmdlet za sve poštanske sandučiće prostorija u tvrtki, kako biste uklonili određenog korisnika kao delegata resursa. The -Opširno switch se koristi za pružanje pojedinosti kako napreduje izvođenje cmdleta, kao što je cijeli skup poštanskih sandučića za ponavljanje i kako će zbirka delegata resursa izgledati za svaki poštanski sandučić nakon toga. Ako nisu potrebne promjene, poštanski sandučić se preskače kako bi se ubrzalo izvršavanje skripte.
Kao još jedan primjer, evo kako dodati sve korisnike unutar ureda u Seattleu kao delegate resursa za skup poštanskih sandučića soba i opreme. Potonje popunjavamo na temelju informacija o zgradi koje možemo dobiti od Get-Place cmdlet. Nažalost, potonji ne podržava filtriranje na strani poslužitelja, tako da moramo malo prilagoditi unos, ali još uvijek je izvedivo:
Add-RoomDelegate -Mailbox (Get-Place | ? $_.Building -eq "Building 9").Identity -User (Get-User -Filter Office -eq "Seattle") -Verbose
Iako cmdleti podržavaju -Što ako prekidač, nije dodana logika za podršku -Potvrdi prekidač. Drugim riječima, cmdlet vas neće tražiti da potvrdite dodavanje ili uklanjanje. Ideja je da rade na automatiziran način, bez prekida. Nakon što Microsoft popravi Set-CalendarProcessing cmdlet za ispravnu provjeru valjanosti delegata, ima smisla prebaciti se na izvršavanje po unosu kako bi se dinamički uklonile nevažeće vrijednosti, kao i pružili neki izlazni detalji o obradi svakog unosa. Uključivanje u ShouldProcess logika je sljedeći logičan korak u tom trenutku, ali za ovo početno izdanje nije potrebna potvrda za izvršavanje cmdleta.
S tim u vezi, možda ste primijetili da ne postoji Postavi- cmdlet. Razlog je jednostavan – i jedno i drugo Dodati- i Ukloniti- cmdleti poštuju postojeći skup delegata i sačuvat će sve unose koji se tamo nalaze. A kada želite prebrisati postojeći popis delegata u jednom potezu, možete samo iskoristiti Set-CalendarProcessing cmdlet. Ili učinite nešto poput ovoga:
#Remove any existing resource delegates Remove-RoomDelegate -Mailbox mailbox -User (Get-CalendarProcessing mailbox | select -ExpandProperty resourceDelegates) #Add the new delegates Add-RoomDelegate -Mailbox mailbox -User user1,user2,user3
I time možemo zatvoriti ovaj članak. Vratit ću se na ovo kada Microsoft popravi Set-CalendarProcessing cmdlet.

