Exchange online, powershell, kontakty i rezerwacja sal

to, co jest piękne w PS to fakt, że kiedy się go pozna, wszystko jedno do jakiego produktu się usiądzie – chwila moment i można szybko wyciągać statystyki, tworzyć obiekty, zestawienia i co kolwiek potrzeba. z jednego miejsca i bez różnych GUI.   <3 <3 ^^

przesiadka z Exchange onPremise na Exchange onLine jest bezbolesna – ot trochę mniej poleceń. wymagania? żadne. wystraczy po prostu zestawić sesję z serwerem i zaimportować sesję i stacja zmienia się w konsolę zarządzającą Exchange. po imporcie sesji dostępny jest moduł, którego nazwa jest generowana jakimś pseudolosowym algorytmem. dostępne polecenia można wylistować przy pomocy get-command:

C:\...ive\_scriptz :))o- Import-PSSession $session
WARNING: The names of some imported commands from the module 'tmp_50wtbfhh.kkk' include unapproved verbs that might
make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the
Verbose parameter. For a list of approved verbs, type Get-Verb.

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     1.0        tmp_50wtbfhh.kkk                    {Add-AvailabilityAddressSpace, Add-DistributionGroupMember...


C:\...ive\_scriptz :))o- get-command -Module tmp_50wtbfhh.kkk

CommandType     Name                                               ModuleName
-----------     ----                                               ----------
Function        Add-AvailabilityAddressSpace                       tmp_50wtbfhh.kkk
Function        Add-DistributionGroupMember                        tmp_50wtbfhh.kkk
Function        Add-MailboxFolderPermission                        tmp_50wtbfhh.kkk
Function        Add-MailboxPermission                              tmp_50wtbfhh.kkk
Function        Add-ManagementRoleEntry                            tmp_50wtbfhh.kkk

[...]

do założenia kontaktu [bo przecież nie będę wyklikiwał z interfejsu, fuj] jest polecenie 'new-mailContact’. okazuje się jednak, że ma ono bardzo ograniczoną listę parametrów, nie pozwalając ustalić takich szczegółów jak organizacja, stanowisko, telefon etc. i tu znów piękno PS – polecenie to nie tylko tworzy obiekt typu 'mailContact’ ale również go zwraca. przypomnę, że PS zwraca obiekty przez referencję dzięki czemu wszystko można 'pajpować’. ponieważ jest drugie polecenie – 'set-contact’, które przyjmuje wszystkie wymagane parametry a jako wskazanie może użyć zarówno ID jak bezpośredniej referencji do obiektu 'mailContact’, można utworzyć prostego jednolinijkowca, który zrobi co trzeba:

New-MailContact -ExternalEmailAddress user.name@company.org -Alias user.name -Name "User Name" -FirstName User -LastName Name |Set-Contact -Company CompanyOrg -MobilePhone "23-666-232323" -department "w-files"

czyli gdyby chcieć ten prosty znaczek '|’ zapisać na polski byłoby to mniej-więcej – 'a następnie przekarz go przez referencję do następnego polecenia’

i jeszcze „jedna rzecza” która się przydaje – rezerwowanie sal przez osoby z zewnątrz. standardowo takiej możliwości nie ma. w ex2k13 uzyskuje się to poprzez 'calendar processing’:

#wylistuj zasoby sal
get-mailbox -RecipientTypeDetails RoomMailbox

#sprawdź parametr akceptacji przez kontakty zewnętrzne:
(get-calendarProcessing <roomID>).ProcessExternalMeetingMessages

set-calendarProcessing <roomID> -ProcessExternalMeetingMessages $true

to jeszcze nie wystarczy. jeszcze jedno wymaganie i jeden 'trick’:

  • adres dokonujący rezerwacji musi istnieć jako kontakt na serwerze [poprzedni przykład]
  • a trick polega na tym, że nie zadziała dodanie w spotkaniu pokoju tak, jak to się zwyczajowo robi na homeserwerze. należy adres wpisać tak, jak zaprasza się zwykłą osobę.

eN.

 

 

 

 

zminiejszenie fizycznej wielkości dysq vhdx

dość standardowy scenariusz: zaczęło mi na lapq brakować przestrzeni więc zacząłem szukać co ją kradnie. jednym ze złodziei okazała się maszyna wirtualna z w7 – pomimo, że dysk skonfigurowany był jako 'dynamic’, cała maszyna na vhdx, to wielkość fizyczna jest taka sama, jak wielkość partycji w maszynie.

ładnie zdefragmentowałem dysk, shutdown i optymalizacja:

optimize-vhd <pathTo.vhdx>

nic. ani bajta

optimize-vhd <pathTo.vhdx> -mode full

…nadal nic – nawet bajta /:

czas poszperać. gdzieś na forum znalazłem informację, że jest bug w obsłudze vhdx i lepiej używać vhd. nie wierzę – szukam dalej. znalazłem kolejny ciekawy wpis – że jest błąd przełączniq 'full’ i lepiej używać 'quick’ choć wydaje się to nie mieć sensu. sprawdziłem, zachowuje się zgodnie z przewidywaniami, czyli nie ugryzł ani bajta. na dysq miałem bardzo mało miejsca, pomyślałem, że może optimize-hvd działa jak np. eseutil – tworząc kopię gdzieś w tempie a potem nadpisując. ciekawostka jest taka, że niestety z tej operacji nie ma żadnego raportu – ani w eventvwr, ani na ekranie. skopiowałem plik na dysk zewnętrzny i powtórzyłem próby – bez zmian.

rozwiązanie:

rozwiązanie trochę mnie zaskoczyło. kluczowym jest informacja z technetu:

Full scans for zero blocks and reclaims unused blocks. (Allowable only if the virtual hard disk is mounted read-only.)

aby kompresja zadziałała prawidłowo, trzeba najpierw podmountować dysk [hę?]  w trybie readonly:

Mount-VHD <pathTo.vhdx> -ReadOnly
Optimize-VHD <pathTo.vhdx> -Mode Full
dismount-vhd <pathTo.vhdx>

spodziewałem się, że przy wyłączonej maszynie mountowanie jest robione dynamicznie albo wręcz niepotrzebne. optymalizacja bez mountowania o niczym nie informuje – a mogłaby… zatem pozostaje wiedzieć (:

eN.

VMM Agent Status: access denied

WTF?w-files combo.

scenariusz: serwery Hv w kilq wersjach [2k8R2, w2k12, w2k12R2, clustry i standalone] zarządzane System Center Virtual Machine Manager 2o12 SP1. w pewnym momencie nie da się założyć nowej maszyny wirtualnej, ponieważ 'rating’ pokazuje wszystkie maszyny jako niedostępne, nie da się zrobić Live Migration. w 'Fabric’ status agentów opisany jest jako 'Access Denied’.

pierwsza próba – 'sprawdź o co chodzi’ – czyli wywalenie agenta z maszyny i ponowne dodanie. wpis w logu:

Error (2927)

A Hardware Management error has occurred trying to contact server SCVMM04.hosting.netwise.pl .

WinRM: URL: [http://<hostFQDN>:5985], Verb: [INVOKE], Method: [AddPeerCertificate], Resource: [http://schemas.microsoft.com/wbem/wsman/1/wmi/root/scvmm/AgentManagement]

Unknown error (0x80338113)

Recommended Action

Check that WinRM is installed and running on server <hostFQDN>. For more information use the command "winrm helpmsg hresult" and http://support.microsoft.com/kb/2742275

przeszukałem net i najwięcej artów dotyczyło konfiguracji winRM. [how to troubleshoot winrm] ale testy winrm bez problemy przebiegały – zarówno lokalnie, jak zdalnie, winrm id -r:<remoteHost>, bez zająknięcia czy opóźnień ślicznie odpowiada. w logach biało jak w staropolskiej zimie na ziemiach wschodnich. ktoś sugeruje, że wystarczy uruchomić agenty SCVMM. lame /: gdzieś indziej znajduję poprawki dla w2k8R2 żeby obsługiwała nowe serwery ale dawno zainstalowane. w ogólnym ’how to troubleshoot’  na stronach technet też nic ciekawego. wszystkie testy sieciowe przebiegają pomyślnie, FW na wszelki wypad wyłączyłem, żeby mieć pewność. w końcu trafiam na roqjący pozytywnie wpis dotyczący różnic  w wersji winRM… ale wszędzie mam v3 jak trzeba.

czas leci, godziny są palone, a VMM odmawia współpracy. stawiam nowego VMM – 2o12R2 – upgrade i tak był wpisany w kalendarz, więc zamiast ślęczeć nad debugowaniem po prostu stawiam od nowa.

jak nie ciężko się domyśleć – nadal nie działa – tym razem, tak dla odróżnienia, już nie na wszystkich maszynach. w końcu się wkurzyłem i zmieniłem dwa ustawienia w polisie GPO:

Turn On Compatibility HTTP Listener Disabled -> Enabled
Turn On Compatibility HTTPS Listener Disabled -> Enabled

w zasadzie nie ma to sensu bo compatibility listeners są dla winRM1.1 w w2k3 a takich wynalazków szczęśliwie nie ma. gpupdate na wszystkich maszynach. i działa /:

to była ciekawostka #1 a teraz ciekawostka #2. tak bardzo nie rozumiem dla czego to się tak zachowało [ i wszystkie commandlineowe testy przebiegają poprawnie i część funkcjonalności działa i PSremoting działa…] że postanowiłem te polisy z powrotem wyłączyć.

Turn On Compatibility HTTP Listener Enable-> Disabled
Turn On Compatibility HTTPS Listener Enabled -> Disabled

gpupdate na wszystkich hostach… i dalej działa @_@ w każdym razie póki co. restartów nie robiłem i minęło kilka h. teoretycznie jakby miało przestać to już by nie działało. nie potrafię tego wyjaśnić.

eN.

 

bash

<gronostaj> tak mnie oświeciło teraz… chrześcijaństwo jest jak Linux. źródła są otwarte i każdy może sobie zrobić własną dystrybucję albo używać gotowej

<gronostaj> katolicyzm to Ubuntu. jest najpopularniejsze, zarządzane przez dużą organizację i ma dobry support

<gronostaj> ale tak naprawdę to nikt go sam nie kompiluje, źródła mało kto czyta, a jeśli nawet, to jest dużo własnościowych fragmentów, których nikt nie rozumie

<gronostaj> jest też Westboro Baptist Church, którym kieruje święty Ignacy i wraz z niewielką grupką zwolenników przepisuje źródła w Emacsie robiąc wielkie, ozdobne inicjały

bash.org

eN.

jak sprawdzić build Exchange … ten prawdziwy

po instalacji UR i sprawdzeniu wersji [build number], exchange cały czas pokazuje świeżutką wersję bez builda. wersję można sprawdzić w konsoli lub z PS:

(Get-ExchangeServer <exchangeServerName> ).admindisplayversion

okazuje się, że kwestia wersji nie jest taka trywialna, kiedy przyjrzeć się jej bliżej. kilka zebranych informacji:

  • różne komponenty mają różne wersje.to co się zazwyczaj sprawdza, to wersja 'core’ czyli głównego silnika.
  • wersje zapisywane są w różnych miejscach. ta pokazywana w konsoli oraz powyższy skrypt, zaczytuje je z obiektu w AD z partycji konfiguracji. dla Ex2kd to jest:
CN=<ExchangeServerName>,cn=servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),cn=administrative groups,cn=<OrganizationName>,cn=Microsoft Exchange,cn=Services,cn=configuration,DC=<domain>,DC=<name>

ufff… oczywiście można tą ścieżkę wyciągnąć poleceniem:

(Get-ExchangeServer <ExchangeServerName>).distinguishedname

wersja zapisana jest w atrybucie 'serialNumber’ więc odczytać ją można:

([ADSI]"LDAP://$((Get-ExchangeServer <ExchangeServerName>).distinguishedName)").SerialNumber

parametr nie jest uaktualniany przy  instalacji UR – stąd rozjazd.

  • wersję można również sprawdzić w kluczu rejestru „HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ExchangeServer\v<versionNumber>\<roleName>” – są tam klucze o nazwach 'configuredVersion’ i 'unpackedVersion’. te również nie są poprawiane.

sprawdzić prawdziwą wersję można na dwa sposoby:

  • z GUI – w EMC [górne menu]-> help -> about

exchangeversion

  • albo sprawdzając wersję pliq ExSetup z katalogu bin:
 (Get-Command 'C:\Program Files\Microsoft\Exchange Server\V14\Bin\ExSetup.exe').FileVersionInfo|fl *

eN.

 

ruszamy!

koniec sezony ogórkowego. ulice znów zakorkowane, autobusy zaroiły się mundurkami. no i znów wracają spotkania i konferencje (:

już jutro kolejne, 63 spotkanie WGUiSW, -jak zwykle w siedzibie Microsoft, jak zwykle w pierwszy wtorek miesiąca. zapraszamy do celebrowania tej świeckiej tradycji wraz z nami (;

ruszyły również zapisy na ITTechDay 2o14 – która odbędzie się 29.o9 [poniedziałek], również w siedzibie Microsoft. po udanym experymencie na zeszłorocznym WCL tutaj również będzie obowiązywała formuła workshopów tak, aby każdy był Uczestnikiem a nie słuchaczem. temat przewodni to „Access & Information Protection”, zajęcia będą prowadzone na Windows to Go, który zostanie wraz z dyskiem wypożyczony uczestnikom.

zapraszam szczególnie – ponieważ będzie tam również moja sesja ^^

eN.