Atribuição condicional da tabela de hash do PowerShell

1

Eu tenho essa tabela de hash em um script do PowerShell (abreviada com alguns exemplos, mas contém cerca de 8 ou mais itens nela):
- O código anterior a essa tabela de hash cria a variável $ i, portanto, apenas a fornecerei para esse exemplo do que deveria ser. Depende de qual edição do SQL está no servidor. Portanto, a instância padrão do SQL 2008 R2 seria "MSSQL10_50.MSSQLServer".


$i = 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER'
$SQLPaths = @{
   'DefaultData'=(Get-ItemProperty "$i\MSSQLServer").DefaultLog;
   'RepWorking'=(Get-ItemProperty "$i\Replication").WorkingDirectory
}

Minha pergunta / problema ... Existe uma maneira de testar esse caminho de registro (Test-Path) dentro da tabela de hash antes de definir o valor ou tentar? Eu tenho algumas chaves como esta que, se o recurso ou configuração nunca foi definido, a chave não existirá. O que é bom, mas como posso ignorá-lo se não, e apenas deixar o valor ser nulo na tabela de hash?

    
por Shawn Melton 19.08.2011 / 18:22

1 resposta

1

No PowerShell, a instrução if pode ser usada como uma expressão:

$i = 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER'
$SQLPaths = @{
   'DefaultData'= if (Test-Path "$i\MSSQLServer") { 
                     (Get-ItemProperty "$i\MSSQLServer").DefaultLog
                  } else {
                     $null
                  };
   'RepWorking'=(Get-ItemProperty "$i\Replication").WorkingDirectory
}

Além disso, se você estiver usando as Extensões da comunidade do PowerShell (PSCX), ele adicionará uma função Invoke-Ternary (alias ?: ) o que poderia tornar isso menos detalhado:

$i = 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER'
$SQLPaths = @{
   'DefaultData'= ?: {Test-Path "$i\MSSQLServer"} '
                     { (Get-ItemProperty "$i\MSSQLServer").DefaultLog } '
                     { $null };
   'RepWorking'=(Get-ItemProperty "$i\Replication").WorkingDirectory
}
    
por 20.08.2011 / 08:16

Tags