Centrum skryptów - Systemy operacyjne

W jaki sposób można używać transakcji w programie Windows PowerShell 2.0?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak utworzyć raport dotyczący miejsca na dysku w dokumencie programu Word?

Zajmuję się głównie bazami danych, od niedawna jednak zacząłem korzystać z programu Windows PowerShell ze wzgledu na aplety poleceń, które mogę stosować w systemie SQL Server 2008. W bazach danych szczególnie podoba mi się możliwość tworzenia transakcji. Mogę np. rozpocząć transakcję, przelać pieniądze z jednego konta na inne, sprawdzić, czy transakcja została poprawnie wykonana, a następnie usunąć pieniądze z pierwszego konta. Jeśli przelew się nie uda, cofam działanie transakcji i nie wprowadzam żadnych zmian. Czy jest to możliwe w programie Windows PowerShell?

-- TL

Cześć, TL! Czołem, tutaj skrypciarz Ed Wilson. Twoje pytanie przypomina mi o pewnej rozmowie ze Skrypciarską Żoną, kiedy wiele lat temu przygotowaliśmy się do podróży na KauaiKauai. Zalogowała się na konto bankowe, aby przelać środki z rachunku oszczędnościowego na bieżący, ponieważ chcieliśmy mieć w razie potrzeby łatwiejszy dostęp do gotówki (przydało się — Hawaje nie są tanie. Było to bardzo dawno temu, więc Skrypciarska Żona nie poruszała się po Internecie tak sprawnie, jak teraz. Podczas wykonywania przelewu coś przerwało połączenie sieciowe, a ona spanikowała.

W owym czasie często pracowałem z bazami danych, a nawet prowadziłem kilka warsztatów certyfikacyjnych z zakresu SQL Server. Spokojnie opisałem jej zasadę ACID, regulującą działanie transakcyjnych baz danych i zaproponowałem, że sprawdzimy stan konta, kiedy dotrzemy do Lihue. Jeśli okaże się, że zespół zajmujący się bazami danych banku jest tak kiepski, że nie przestrzega tej prostej zasady, zmienimy bank. Bank okazał się na tyle sprytny, aby zainicjować transakcję na początku działania, a przerwanie połączenia internetowego przed jej ukończeniem spowodowało cofnięcie — pieniądze pozostały więc na koncie oszczędościowym.

Na tej wycieczce zrobiłem poniższe zdjęcie żółwia zielonego.

TL, pierwsze, co musisz wiedzieć o używaniu transakcji w programie Windows PowerShell 2.0, to że wymaga to minimalnej wersji systemu operacyjnego. Minimalna wersja systemu operacyjnego obsługująca transakcje to system Windows Vista. W systemie Windows XP możesz wprawdzie rozpocząć transakcje, ale program Windows PowerShell wygeneruje komunikat błędu przy próbie jej użycia. Widać to poniżej.

Kolejna ważna informacja - dostawca musi obsługiwać transakcje. Przed sprawdzeniem, czy transakcje są obsługiwane, warto wczytać wszelkie zainstalowane moduły. Program Windows PowerShell 2.0 ma kilka domyślnie dołączonych modułów. Można też pobierać moduły z witryny CodePlex (j.ang.) i innych lokalizacji. Ponadto w weekendowych artykułach (j.ang.) opisywaliśmy tworzenie własnego modułu. Aby sprawdzić, które moduły są wczytane, należy użyć apletu polecenia Get-Module. Aby wyświetlić listę dostępnych modułów, należy użyć apletu polecenia Get-Module z parametrem –listavailable. Jest to przedstawione w poniższym kodzie:

PS C:\> Get-Module

PS C:\> Get-Module -ListAvailable



ModuleType Name                      ExportedCommands

---------- ----                      ----------------

Script     BasicFunctions            {}

Script     ConversionModuleV4        {}

Script     DotNet                    {}

Manifest   FileSystem                {}

Manifest   IsePack                   {}

Manifest   PowerShellPack            {}

Manifest   PSCodeGen                 {}

Manifest   PSImageTools              {}

Manifest   PSRSS                     {}

Manifest   PSSystemTools             {}

Manifest   PSUserTools               {}

Manifest   TaskScheduler             {}

Manifest   WPK                       {}

Manifest   ActiveDirectory           {}

Manifest   AppLocker                 {}

Manifest   BitsTransfer              {}

Manifest   FailoverClusters          {}

Manifest   GroupPolicy               {}

Manifest   NetworkLoadBalancingCl... {}

Manifest   PSDiagnostics             {}

Manifest   TroubleshootingPack       {}

Po uzyskaniu listy dostępnych modułów można wczytać je wszystkie jednocześnie. W tym celu należy przesłać potokiem wyniki działania polecenia Get-Module –Listavailable do apletu polecenia Import-Module. Użycie apletu polecenia Get-Module pozwoli się upewnić, że wszystkie moduły są prawidłowo zaimportowane. Technikę tę ilustruje następujące polecenie:

PS C:\> Get-Module -ListAvailable | Import-Module

PS C:\> Get-Module



ModuleType Name                      ExportedCommands

---------- ----                      ----------------

Script     BasicFunctions            {Get-ComputerInfo, Get-OptimalSize}

Script     ConversionModuleV4        {ConvertTo-Feet, ConvertTo-Miles, ConvertTo-Pounds, ConvertTo-Meters...}

Script     PowerShellPack            {New-ByteAnimationUsingKeyFrames, New-TiffBitmapEncoder, New-Viewbox, Ne...

Script     PSCodeGen                 {New-Enum, New-ScriptCmdlet, New-PInvoke}

Script     PSImageTools              {Add-CropFilter, Add-RotateFlipFilter, Add-OverlayFilter, Set-ImageFilte...

Script     PSRss                     {Read-Article, New-Feed, Remove-Article, Remove-Feed...}

Script     PSSystemTools             {Test-32Bit, Get-USB, Get-OSVersion, Get-MultiTouchMaximum...}

Script     PSUserTools               {Start-ProcessAsAdministrator, Get-CurrentUser, Test-IsAdministrator, Ge...

Script     TaskScheduler             {Remove-Task, Get-ScheduledTask, Stop-Task, Add-TaskTrigger...}

Script     WPK                       {Get-DependencyProperty, New-ModelVisual3D, New-DiscreteVector3DKeyFrame...

Manifest   ActiveDirectory           {Set-ADOrganizationalUnit, Get-ADDomainControllerPasswordReplicationPoli...

Manifest   AppLocker                 {Get-AppLockerPolicy, Get-AppLockerFileInformation, Test-AppLockerPolicy...

Manifest   BitsTransfer              {Start-BitsTransfer, Remove-BitsTransfer, Resume-BitsTransfer, Get-BitsT...

Manifest   FailoverClusters          {Set-ClusterParameter, Get-ClusterParameter, Stop-ClusterNode, Stop-Clus...

Manifest   GroupPolicy               {Get-GPStarterGPO, Get-GPOReport, Set-GPInheritance, Restore-GPO...}

Manifest   NetworkLoadBalancingCl... {Stop-NlbClusterNode, Remove-NlbClusterVip, New-NlbClusterIpv6Address, S...

Script     PSDiagnostics             {Enable-PSTrace, Enable-WSManTrace, Start-Trace, Disable-PSWSManCombined...

Manifest   TroubleshootingPack       {Get-TroubleshootingPack, Invoke-TroubleshootingPack}

Teraz, po zaimportowaniu wszystkich modułów, można użyć apletu polecenia Get-PSProvider, aby sprawdzić, którzy dostawcy programu Windows PowerShell obsługują transakcje. Widać to poniżej:

PS C:\> Get-PSProvider



Name                 Capabilities                                      Drives

----                 ------------                                      ------

WSMan                Credentials                                       {WSMan}

Alias                ShouldProcess                                     {Alias}

Environment          ShouldProcess                                     {Env}

FileSystem           Filter, ShouldProcess                             {C, E, Desktop, Programs...}

Function             ShouldProcess                                     {Function}

Registry             ShouldProcess, Transactions                       {HKLM, HKCU}

Variable             ShouldProcess                                     {Variable}

Certificate          ShouldProcess                                     {cert}

ActiveDirectory      Include, Exclude, Filter, ShouldProcess, Crede... {}

Funkcjonalność dostawcy ActiveDirectory jest przedstawiona w formie skróconej. Aby wyświetlić pełną funkcjonalność dostawcy ActiveDirectory, należy przesłać wyniki potokiem do apletu polecenia Format-List (jego alias to fl), tak jak to widać poniżej:

PS C:\> Get-PSProvider | Where-Object { $_.capabilities -match 'transactions'}



Name                 Capabilities                                      Drives

----                 ------------                                      ------

Registry             ShouldProcess, Transactions                       {HKLM, HKCU}

TL, to już wszystko, co musisz wiedzieć o transakcjach w programie Windows PowerShell. Jutro będziemy omawiać inne aspekty korzystania z transakcji.

Jeśli chcecie szybciej dowiadywać się, co będziemy omawiać kolejnego dnia, śledźcie nas w serwisie Twitter (j.ang.) lub Facebook (j.ang.). W razie jakichkolwiek pytań piszcie do nas na adres scripter@microsoft.com lub publikujcie na oficjalnym forum skrypciarzy (j.ang.).

Skrypciarze Ed Wilson i Craig Liebendorfer

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne