Windows PowerShell: Gli spazi vuoti, vedere

Una formattazione corretta, tra cui un piccolo spazio ogni tanto, può rendere i comandi Windows Powershell molto più semplici da comprendere.

Don Jones

Si osservi la funzione riportata di seguito e tell me ciò che si ritiene che l'operazione viene eseguita. Si tratta di un numero reale completamente funzionale "avanzata funzione". L'obiettivo è semplicemente tell me (senza eseguirlo effettivamente) ciò che è previsto a scopo:

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 }}}}

È difficile determinare, è proprio questo? Ciò avviene perché questa funzione consente di visualizzare un errore di tutti i comuni di script e gli esempi che sono disponibili su Internet e in molte delle cartelle personali. Non viene utilizzata da spazi. Si consideri ora in questo esempio viene rivisto:

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, che è molto più facile da seguire. I comandi all'interno di un costrutto di {} sono rientrati. Comandi lunghi ben vengono eseguito il wrapping. È molto più leggibile.

È molto più semplice aiutare qualcuno a eseguire il debug di uno script quando è stata formattata correttamente. Basta provare a trovare un singolo smarrire o una parentesi graffa manca quando non c'è niente destinati. È possibile andare alla cieca. Il problema è che molti di voi sbaglio come ottenere questo tipo di formattazione. È opportuno risolvere subito il problema.

Rientri

La maggior parte di script editor funzionano correttamente con il tasto Tab, compresa l'ISE Windows PowerShell gratuito fornito con il programma di installazione di Windows PowerShell versione 2. Alcuni potrebbero inserire quattro o cinque spazi invece di un carattere di tabulazione, ma va bene. La maggior parte consentono di evidenziare un blocco di comandi e premere Tab per far rientrare tutte o Maiusc + Tab per ridurre il loro rientro.

Che è conveniente e consiglia di mantenere il codice pulito la ricerca in modo semplice effettuare questa operazione. La maggior parte dei redattori gestiscono anche il rientro, vale a dire che, dopo avere digitato una riga e invio degli accessi, il cursore inizia alla riga successiva nella stessa posizione di rientro.

Interruzione di riga

Si tratta di un trucco molto meno evidente, soprattutto negli script Windows PowerShell. L'idea è per tentare di mantenere le righe a capo in senso orizzontale, a meno che non assolutamente necessario. Windows PowerShell consente effettivamente di interruzione della riga dopo qualsiasi carattere che indica la shell "non c'è più provenienti," tra cui:

  • Virgole
  • Punto e virgola
  • Pipe

Esaminare l'esempio "migliorato" per visualizzare il significato.

È inoltre possibile utilizzare il carattere di escape Windows PowerShell: l'apice inverso ('). Se si segua immediatamente un apice inverso con un ritorno a capo, "Ignora" di ritorno a capo. In questo modo Windows PowerShell per la seguente riga fisica devono essere considerati parte della stessa riga logica. In altre parole, è un tipo di carattere di continuazione di riga. Voglio neanche questo tipo, anche se. È scarsamente visibile sullo schermo e in fase di stampa ed è facile confondere per un pixel morto sul monitor o una porzione ridondanti di toner sulla pagina.

È anche facile da un uso improprio. Se si segue l'apice inverso con uno spazio, scheda o un altro disco rigido Vedi spazio, non si agisce come un carattere di continuazione di riga. Esso non eseguire l'escape di un ritorno a capo. Io l'ho utilizzato un paio di volte in cui nell'esempio "migliore", è sufficiente, in modo non è possibile visualizzarlo. Non esitate a non utilizzare tale tecnica se non vi è un'alternativa migliore.

Coerenza

È importante una formattazione uniforme. Ad esempio, è preferibile effettuare costrutti simile al seguente:

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

Mentre gli altri utenti come meglio questa formattazione:

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

Utilizzare a seconda di quale si desidera Formatta, scegliete uno e stick con esso. L'obiettivo è rendere coerenti e di facile lettura del codice.

Tornare indietro e riformattare

Esaminare alcuni di questi vecchi script può sembrare strano già in esecuzione e la formattazione in pochi minuti. Procedura un gesti gentili ideale per qualsiasi persona scadente deve andiamo nei sei mesi e capire che cosa stavate pensando. Inoltre, le probabilità sono buone che si sarà tale persona"scarsa".

Don Jones

**Don Jones**è un destinatario di Microsoft MVP Award e autore di serate "informazioni su Windows PowerShell in un mese di con" CO (Manning pubblicazioni., 2010), un libro progettato per aiutare gli amministratori diventano effettive con Windows PowerShell. Jones offre anche la formazione di Windows PowerShell pubblica e on-site. È possibile contattarlo tramite il suo sito Web all'indirizzo ConcentratedTech.com.

Contenuto correlato