PSLanguageMode w Exchange’u i Powershell 4.0

PSLanguageMode w Exchange’u i Powershell 4.0

Skrypty Exchange’owe wywoływane zdalnie, które działały poprawnie pod Powershell’em 2.0 w Windows 7 – nagle po instalacji Windows 8.1 i Powershell’a 4.0 nagle przestały działać…

Podczas ich wykonywania zwracane są dosyć „dziwne” błędy jak poniżej:

PSCulture

Inne wariacje tych błędów to:

Function declarations are not allowed in restricted language mode or a Data section.
Property references are not allowed in restricted language mode or a Data section.
Assignment statements are not allowed in restricted language mode or a Data section.

A variable that cannot be referenced in restricted language mode or a Data section is being referenced. Variables that can be referenced include the following: $PSCulture, $PSUICulture, $true, $false, and  $null.

 

Hmm… Ale o co tak naprawdę chodzi? Która linijka skryptu powoduje takie błędy? Idąc po nitce do kłębka:

1. Czy to wina $PSCulture i polskich znaków? Nieee… Przecież wcześniej wszystko działało prawidłowo – $PSCulture ustawiony nadal na „pl-PL” – nic się nie zmieniło.

2. Idźmy linijka po linijce w konsoli:

  • Tworzenie skrzynki – OK
  • Ustawienia quot – OK
  • Ustawienia OWA – OK
  • Ustawienia ActiveSync – OK
  • itd… – wszystko niby działa

Hmmm… Wszystko niby działa, ale coś tu jest nie tak – no właśnie – przy uruchomieniu krokowym wskazałem konkretne konto użytkownika, natomiast w skrypcie posiłkowałem się operatorami porównania typu „-like” czy „-match” – czyżby to był problem? Istotnie!

Ale skąd się ten problem wziął? Dlaczego coś nagle przestało działać? – Problemem a dokładniej mówiąc – zabezpieczeniem – jest wbudowany w Exchange’a „LanguageMode„, który może przyjmować wartości:

  • FullLanguage
  • ConstrainedLanguage
  • RestrictedLanguage
  • NoLanguage

I domyślnie przyjmuje wartość „RestrictedLanguage” – przy której dozwolone są tylko porównania „-eq” , „-gt” , „lt”

Znamy już przyczynę – pora znaleźć rozwiązanie i ustawić LanguageMode w tryb „FullLanguage” – tak żeby nasze skrypty uruchamiane zdalnie nadal działały poprawnie 🙂

1. Logujemy się do naszych serwerów Echange’a pełniących rolę CAS’ów

2. Uruchamiamy przystawkę zarządzania serwerem aplikacyjnym IIS

3. Przechodzimy do Stron (Sites) i kierujemy się na domyślną witrynę sieci web (Default Web Site), gdzie odnajdujemy witrynę „Powershell”.

4. Odnajdujemy plik konfiguracyjny strony „Powershell” o nazwie web.config – jego lokalizacja otworzy się po wykonaniu poniższej czynności:

IIS_Powershell_Site

5. Edytujemy wpis dotyczący „PSLanguageMode” zmieniając go na „FullLanguage” i zapisując nową konfigurację

FullLanguage

6. W konsolce zarządzania IIS zrestartujemy pulę aplikacyjną Powershella

7. Zestawiamy na nowo zdalną sesję z Exchange’m i możemy się cieszyć działającymi skryptami jak wcześniej 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *