středa 2. prosince 2009

Powershell remoting

V posledních týdnech pracuji spíše okolo Axapty než přímo v ní a v podobném duchu je i tento příspěvek. Jednou z věcí, kterými se zabývám, je totiž automatizace správy Dynamics AX prostředí, zejména instalace programových úprav. PowerShell je pro to ideální nástroj a funkce pro práci po síti - "remoting" - jsou velice potřebné, protože i jednoduchá migrace mezi dvěma Dynamics AX prostředími typicky vyžaduje práci na několika serverech. Nasazování úprav se skládá z mnoha kroků - například zastavování a spouštení AOS, kopírování souborů (vrstev, labelů), importy, kompilace a podobně. Automatizace nejen že sníží čas, který je třeba věnovat celému nasazování, ale sníží i chybovost při práci se soubory a minimalizuje dobu odstávek prostředí. PowerShell remoting v tom může pomoci tak, že celý proces lze řídit z jednoho místa - spravovat služby na vzdálených počítačích, spouštět aplikace, pracovat se soubory, přistupovat k registrům a tak dále. To vše velmi pohodlně a s plnou podporou .NET typů. Na Microsoft Festu 2009 jsem se dozvěděl, že mnoho lidí naráží při pokusech o konfiguraci PowerShell remotingu na problémy, zkusím tedy popsat mé zkušenosti. Musím rovnou říct, že já jsem na žádné příliš závažné problémy nenarazil, tak snad budete stejně úspěšní. První věc, kterou budete potřebovat, je PowerShell verze 2.0. Oproti verzi 1.0 obsahuje řadu nových funkcí, hlavně ale ten zmiňovaný remoting. PowerShell 2.0 je již obsažen v systémech Windows Server 2008 R2 a Windows 7, může ale být samozřejmě nainstalován i do starších systémů a to jako součást Windows Management Frameworku (odkaz obsahuje podrobnější informace včetně podporovaných systémů). Osobně používám PowerShell na WS2008 SP1 a WinXP SP3. Windows Management Framework tedy stáhněte a nainstalujte na všechny počítače, kde chcete PowerShell (i jen vzdáleně) využívat (a pokud nejde o systém, kde již je obsažen). Dále je třeba povolit remoting a to nejlépe pomocí příkazu:
Enable-PSRemoting
Tento příkaz spustí (a nakonfiguruje) službu WinRM, připraví listener očekávající vzdálené příkazy a vytvoří odpovídající pravidlo na firewallu. Toto musí být provedeno jak na serveru, tak i na klientském počítači. Na klientech jsem dále musel změnit konfiguraci sdílení:
Set-ItemProperty –Path HKLM:\System\CurrentControlSet\Control\Lsa –Name ForceGuest –Value 0
a přidat server mezi důvěryhodné. K tomu lze využít následující příkaz:
Set-Item WSMan:\localhost\Client\TrustedHosts –Value MujServer -Force -Concatenate
A to bylo v mém případě vše. :-) Pokud takové štěstí mít nebudete, zkuste se podívat nejprve na about_Remote_Troubleshooting a příbuzná témata, kde je mnoho možných problému popsáno. Off-line můžete zobrazit lokální podobu nápovědy takto:
Get-Help about_Remote_TroubleShooting
Konkrétnímu využití pro nasazování Dynamics AX se budu věnovat někdy v blízké budoucnosti. Dnes uvedu jen jeden jednoduchý příklad - spuštění AOS číslo 2 na vzdáleném stroji MujServer:
$aosService = (Get-Service -Name 'AOS50$02' -ComputerName MujServer)
$aosService.Start()
$aosService.WaitForStatus("Running")
Triviální, nemyslíte?

Žádné komentáře:

Okomentovat