Windows PowerShell: Obtendo transacional

PowerShell agora oferece suporte para operações transacionais, mas não há uma hierarquia de como ele funciona.

Don Jones

Há energia em números. Um dos novos recursos no Windows PowerShell v2 é o suporte para operações transacionais. Em geral, uma transação é dois ou mais operações discretas que devem ter êxito ou falha juntos como um grupo.

Suponha que você esteja escrevendo um lote de comandos que modificam as várias chaves do registro. Uma modificação pode falhar devido à falta de permissões ou algum outro problema. Se isso acontecer, você Don quer salvar essas alterações. Você só quer o lote de alterações se eles estão todos concluídos com êxito. É exatamente o que podem fornecer transações do shell.

O que é necessário

Além do Windows PowerShell v2, as transações estão disponíveis somente no Windows Vista, Windows Server 2008 e versões posteriores do Windows. Embora o Windows PowerShell v2 serão executados nos antigos sistemas operacionais Windows XP e Windows Server 2003, suporte a transações do shell não se estende para essas versões.

Que se tornará um padrão comum de evolução do Windows PowerShell: As versões mais recentes do shell podem ser executados em versões mais antigas do sistema operacional, mas os recursos específicos podem estar disponíveis apenas quando você estiver executando o shell em uma versão mais recente do Windows.

O shell oferece suporte a transações por meio de seus fornecedores PSDrive. Um PSDrive adapta-se de alguma forma de armazenamento — o registro ou o sistema de arquivos, como — a aparência de um sistema de arquivos do disco padrão. O fornecedor PSDrive especificamente deve oferecer suporte a transações. V2 do shell, apenas o provedor de registro oferece suporte para transações de imediato.

O shell também permite que outros cmdlets para oferecer suporte a transações e essas transações incluirá um parâmetro –UseTransaction. Essencialmente, o shell fornece a estrutura de uma transação. Em seguida, os cmdlets específicos ou fornecedores PSDrive devem realmente implementar as capacidades necessárias para usar essas transações.

Iniciar uma transação

Você pode iniciar uma transação simplesmente executando Iniciar transação . Se você Don incluir todos os parâmetros e há uma transação já foi iniciada, ele iniciará um novo. Se você executar o cmdlet enquanto uma transação já está em andamento, você está simplesmente ingressar na transação existente e não será iniciado um novo.

Se você executar o do Iniciar transação independente, uma transação de nova e independente é iniciada e tornar ativa. Você pode iniciar várias transações ao mesmo tempo, mas somente um pode estar ativo por vez. Isso pode resultar em uma hierarquia de transações:

  • Transação 1 (Iniciar transação)
  • Transação 2 (independente de iniciar transação)
  • Transação 3 (independente de iniciar transação)

Se a transação 3 está ativo, todos os comandos com suporte executados dentro dele se tornará parte dessa transação. Quando você finalizar a transação 3, por implantá-la novamente ou confirmá-lo, 2 de transações uma vez estará ativa. Embora apenas uma transação ativa por vez, eles não são testados. Ou seja, suponha que você concluir transações 3 mas anular a transação 2. Nada foi concluída como parte da transação 3 permanecerá.

Você também pode executar o Get Transaction para ver quais transações estão ativas no momento. Por padrão, uma transação automaticamente se estenderão back (mais informações sobre isso em instantes) quando ocorre um erro em um cmdlet dentro da transação; você pode especificar preferências de reversão alternativo, usando parâmetros de Iniciar transação .

Using a Transaction

Uma vez que iniciar uma transação, você deve anexar explicitamente comandos a ele usando o parâmetro –UseTransaction. Mesmo que um cmdlet oferece suporte a transações, ele irá não usá-los automaticamente. Você deve especificar o parâmetro para a operação a serem abordados pela transação, da seguinte forma:

Cd hkcu:\software

Mkdir test

Start-transaction

Del test –usetransaction

Dir

A lista de pastas incluem a chave de registro de teste. Embora essa chave foi excluída, a exclusão foi parte de uma transação foi confirmada. Se você executar o do –usetransaction Dir, você verá a listagem de diretório como ele se encontra dentro da transação. A chave de teste não será listada.

Uma transação e dicas de transações de fechamento

Você pode fechar uma transação em uma das seguintes maneiras:

  • Transações de desfazer reverterá todos os comandos que faziam parte da transação
  • Concluir transação tornar permanentes todos os comandos que faziam parte da transação

O cmdlet de Usar transações permite que todos os comandos são executados como parte de uma transação. No entanto, você só pode incluir comandos que usam ativado para transação de objetos do Microsoft .NET Framework. Você não pode simplesmente pop qualquer comando antigo lá e tê-lo a trabalhar. Para obter mais informações, execute o de Ajuda about_transactions.

Atualmente, a capacidade de fazer transações dentro do Registro pode parecer um tanto útil. Suporte para operações de sistema de arquivos transacional de base já existe, apesar do provedor do arquivo de sistema PSDrive ainda não suportá-los. Microsoft parece ser inclinada para tornar mais objetos do .NET Framework — que é o que o Windows PowerShell se baseia em — transacional. No futuro, talvez você pode até mesmo transact operações do Active Directory.

A boa notícia é que o shell já oferece suporte a transações diferentes. Em outras palavras, se o sistema de arquivos oferecia suporte a transações (e já deve é que ele será um dia), uma única transação pode misturar as operações de arquivo e o registro — tornando, de fato, uma ferramenta útil.

 

Don Jones

Don Jones é um fundador da Concentrated Technology e perguntas de respostas sobre o Windows PowerShell e outras tecnologias de ConcentratedTech.com. Ele também é autor de Nexus.Realtimepublishers.com, que disponibiliza vários dos seus livros como editions.hrough eletrônico gratuito seu site.

Conteúdo relacionado