Share via


Windows PowerShell: Espaço em branco, por favor

Uma formatação apropriada, que inclui um pequeno espaço em branco aqui e outro ali, pode tornar seus comandos do Windows PowerShell muito mais fáceis de entender.

Don Jones

Dê uma olhada a função a seguir e me dizer o que você acha que isso será feito. Este é um real, totalmente funcional "Avançado função". Seu objetivo é simplesmente Diga-me (sem realmente executá-lo) é o que ele deveria fazer:

function Get-PCInfo { [CmdletBinding()] param( [Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)][string[]]$computername ) PROCESS { Write-Verbose "Beginning PROCESS block" foreach ($computer in $computername) { Write-Verbose "Connecting to $computer" try {$continue = $true $cs = Get-WmiObject -EV mybad -EA Stop -Class Win32_computersystem -ComputerName $computer } catch {$continue = $false $computer | Out-File -FilePath oops.txt -append Write-Verbose "$computer failed" $mybad | ForEach-Object { Write-Verbose $_ } }if ($continue) { $proc = Get-WmiObject win32_processor -ComputerName $computer | select -first 1 $obj = new-object -TypeNamePSObject $obj | add-member NotePropertyComputerName $computer $obj | add-member NotePropertyProcArchitecture $proc.addresswidth $obj | add-member NoteProperty Domain $cs.domain $obj | add-memberNotePropertyPCModel $cs.model $obj.psobject.typenames.insert(0,'MyPCInfo') write-output $obj }}}}

É difícil determinar, não é mesmo? Isso ocorre porque essa função exibe uma falha de tudo muito comum de scripts e exemplos, que você encontrará na Internet e em muitas das suas próprias pastas. Não use espaços em branco. Agora considere este exemplo revisado:

function Get-PCInfo { [CmdletBinding()] param( [Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)] [string[]]$computername ) PROCESS { Write-Verbose "Beginning PROCESS block" foreach ($computer in $computername) { Write-Verbose "Connecting to $computer" try { $continue = $true $cs = Get-WmiObject -EV mybad -EA Stop ` -Class Win32_computersystem ` -ComputerName $computer } catch { $continue = $false $computer | Out-File -FilePath oops.txt -append Write-Verbose "$computer failed" $mybad | ForEach-Object { Write-Verbose $_ } } if ($continue) { $proc = Get-WmiObject win32_processor ` -ComputerName $computer | select -first 1 $obj = new-object -TypeNamePSObject $obj | add-member NotePropertyComputerName $computer $obj | add-member NotePropertyProcArchitecture $proc.addresswidth $obj | add-member NoteProperty Domain $cs.domain $obj | add-memberNotePropertyPCModel $cs.model $obj.psobject.typenames.insert(0,'MyPCInfo') write-output $obj } } } }

Ah, que é muito mais fácil a seguir. Comandos dentro de uma construção de {} são recuados. Comandos longos perfeitamente estão quebrados. É muito mais legível.

É muito mais fácil ajudar alguém a depurar um script quando ela está bem formatada. Apenas tente localizar um único mal arquivados ou colchete ausente quando não há nada se destina. Você poderia ir cego. O problema é que muitos de vocês não perceber como atingir esse tipo de formatação. Agora vamos solucionar esse problema.

Recuando

A maioria do script editores funcionem bem com a tecla Tab, incluindo o ISE Windows PowerShell livre incluído com o instalador da versão 2 Windows PowerShell. Alguns podem inserir quatro ou cinco espaços em vez de um caractere de tabulação real, mas tudo bem. A maioria permitem que você realçar um bloco de comandos e pressione Tab para recuar todas elas ou Shift + Tab para retirar recuo-los.

Isso é conveniente e ele incentiva você a manter seu código procurando limpa, tornando mais fácil fazê-lo. A maioria dos editores também manterá o recuo, que significa que, quando terminar de digitar uma linha e tecle Enter, o cursor começa a próxima linha na posição do recuo do mesmo.

Quebra de linha

Este é um truque muito-menos óbvio, especialmente em scripts de Windows PowerShell. A idéia é tentar e manter as linhas de disposição de horizontalmente, a menos que absolutamente necessário. Windows PowerShell, na verdade, permite que você quebrar uma linha após qualquer caractere que informa ao shell "há Aguarde mais," incluindo:

  • Vírgulas
  • Ponto e vírgula
  • Pipes

Veja o exemplo "melhor" para ver o que quero dizer.

Você também pode usar o caractere de escape Windows PowerShell: o backtick ('). Se você seguir imediatamente uma backtick com um retorno de carro, ele "escapa""" esse retorno de carro. Isso força Windows PowerShell para tratar a seguinte linha física como parte da mesma linha lógica. Em outras palavras, ele é o tipo de um caractere de continuação de linha. Detesto esse um, embora. É difícil ver na tela e na impressão e é fácil confundir para um pixel inativo no seu monitor ou um pedaço isolado de toner na página.

Também é fácil de uso indevido. Se você seguir a backtick com um espaço, tabulação ou outro caractere de espaço em branco do disco rígido de ver, em seguida, ele não atuar como um caractere de continuação de linha. Ele não escapar um retorno de carro. O usei algumas vezes no exemplo "melhor", para que você pode vê-lo. Fique à vontade para não usar essa técnica se há uma maneira melhor.

Consistência

A formatação consistente é importante. Por exemplo, eu prefiro fazer construções como este:

if ($continue) { # some code goes here }

Enquanto outras pessoas como essa formatação melhor:

if ($continue) { # some code goes here }

Usar aquele que formato você deseja, mas escolher uma e Bastão com ele. O objetivo é tornar o seu código consistentes e fáceis de ler.

Volte e reformatar

Sobre alguns desses scripts antigos feio, você executa e gasta alguns minutos a reformatação-los. Você fará uma ótima gentilezas para qualquer pessoa ruim tem que surgirem em seis meses e descobrir o que você estava pensando. Além disso, as chances são boas de que "pessoa ruim" será a você.

Don Jones

**Don Jones**é um destinatário de prêmio de MVP da Microsoft e autor de "Aprender Windows PowerShell em um mês de almoços" (Manning publicações co, 2010), um catálogo criado para ajudar a qualquer administrador se tornam efetivas com Windows PowerShell. Jones também oferece treinamento de Windows PowerShell público e no local. Entre em contato com ele por meio de seu site em ConcentratedTech.com.

Conteúdo relacionado