Windows PowerShell. Particolare affinità con un flusso di lavoro

Ogni mese dell'anno, Don Jones presenterà una rata in una parte 12-tutorial su Windows PowerShell del flusso di lavoro. Ti invitiamo a leggere la serie nell'ordine, cominciando con il colonna gennaio 2013.

Don Jones

Flussi di lavoro aspetto molto simile a Windows PowerShell funzioni o script — ma non lo sono. Che la somiglianza è solo superficiale, e forse anche esso non estende tutto il senso attraverso la pelle.

Bisogna sempre ricordare che Windows PowerShell deve tradurre i flussi di lavoro in una tecnologia totalmente separata — Windows Workflow Foundation (WF). Ciò significa che si possono fare solo cose che possono essere duplicate in WF. Il codice verrà eseguito quindi in un genere completamente diverso di ambiente che ha le proprie regole e restrizioni.

Eseguire uno script come un flusso di lavoro

Il modo più semplice per eseguire un flusso di lavoro è semplicemente eseguire qualsiasi script Windows PowerShell standard come un flusso di lavoro. È possibile farlo con il comando Invoke-AsWorkflow. Questo comando vive nel modulo PSWorkflow, sebbene Windows PowerShell versione 3 dovrebbe essere in grado di scoprire ed eseguire il comando senza la necessità di caricare in modo esplicito il modulo primo. Questo comando essenzialmente avvolge l'intero script in un blocco di InlineScript, significa che viene eseguito all'interno di WF come un singolo passaggio.

Ciò significa che non devi preoccuparti molto di Windows PowerShell restrizioni del flusso di lavoro. Tuttavia, anche non ottenete di sfruttare alcune funzionalità di Workflow Windows PowerShell , come la possibilità di riprendere un processo interrotto. Il "processo", in questo caso, sarà composto l'intero script in esecuzione in un unico passaggio. Non c'è alcun modo per che riprendere a metà strada attraverso, se devi mettere in pausa o interrompere. Ecco un esempio, in cui ho creato un blocco di script con pochi comandi e quindi eseguirli come un flusso di lavoro:

$script = { $name = Get-Content Env:\COMPUTERNAME $name | Out-File c:\MyName.txt Get-Service } Invoke-AsWorkflow -Expression $script -PSComputerName DC,CLIENT

Ho usato una variabile qui uno dei motivi era quello di dimostrare che WF tutto questo viene eseguito come un singolo InlineScript. Tenete a mente che ogni comando WF esegue ottiene la propria, ambiente fresco. Non non c'è nessun modo incorporato per rendere persistenti i dati tra i comandi. Ciò significa che le variabili sono nativamente abbastanza inutile. Tuttavia, perché tutto ciò è avvolto in modo implicito come un singolo passaggio InlineScript, la variabile creata persisterà per tutto.

Così perché vuoi vi preoccupate? Windows PowerShell Flusso di lavoro ti dà ancora alcuni vantaggi supplementari. Ci sono un certo numero di parametri condivisi da tutti i flussi di lavoro. Questi consentono di specificare le cose come i nomi dei computer di destinazione e così via. Il tuo script erediterà un'infrastruttura di base per il lavoro su più computer. Per gli script di lunga durata, è possibile cacciare fuori un flusso di lavoro, quindi scollegare dal computer remoto, mentre il flusso di lavoro continua la corsa, che è piacevole.

Sintassi formale del flusso di lavoro

Qui è un workflow molto semplice:

Workflow New-Server { Get-Content -Path Env:\COMPUTERNAME | Out-File -FilePath C:\MyName.txt Get-NetAdapter -Physical } New-Server -PSComputerName CLIENT,DC

Flussi di lavoro sono una sorta di comando Windows PowerShell , come un cmdlet, script o funzione. Che in questo caso, è possibile eseguire loro semplicemente chiamando il loro nome, come ho fatto l'ultima riga di questo esempio. Ricordate, tutti i flussi di lavoro eredita un certo numero di parametri incorporati, come –PSComputerName. Flussi di lavoro si basano anche sulla funzione Windows PowerShell Remoting, che è attivata su entrambi i computer in questo esempio.

Il risultato pratico è che entrambi i comandi del flusso di lavoro sono in esecuzione destra su computer remoti, con i risultati tornando al mio computer. Non ho avuto il codice di quella o addirittura creare un parametro di nome computer. Non ho avuto enumerare i nomi dei computer, creare collegamenti o qualsiasi altra cosa. Windows PowerShell Flusso di lavoro lo fa tutto per me. Non c'è assolutamente niente in questo script non potevo abbiano senza Windows PowerShell Workflow — richiederebbe solo un po' più di lavoro da parte mia.

Noterete che ho precisato i nomi dei comandi nel mio flusso di lavoro. Ho anche usato i parametri denominati in ogni istanza. Che è sempre una pratica migliore di qualsiasi script Windows PowerShell , ma è obbligatorio in un flusso di lavoro. Non è possibile utilizzare i parametri posizionali. Devi precisare tutto o si otterrà un errore.

Ora controlla il flusso di lavoro (che non è necessario importare la sessione PSWorkflow nell'istanza di shell nell'ordine per la parola chiave "Workflow" per essere legale):

Workflow New-Server { $name = Get-Content -Path Env:\COMPUTERNAME Get-Content -Path Env:\COMPUTERNAME | Out-File -FilePath C:\MyName.txt Get-NetAdapter -Physical $name | Out-File -FilePath C:\MyOtherName.txt } New-Server -PSComputerName CLIENT,DC

Quando ho scritto questo esempio, ho pensato, "MyOtherName.txt sarà vuoto." Ricordate, il contenuto del flusso di lavoro ogni eseguito come un comando separato, con nessun contesto condiviso tra di loro. Quando mi sono imbattuto in questo esempio, però, ha funzionato. Il nome del computer è stato infatti scritto sia MyName.txt e MyOtherName.txt. Che cosa dà?

Windows PowerShell in realtà fa un sacco di roba sotto il cofano per cercare di assicurarsi di che ottenere i risultati che vi aspettate da un flusso di lavoro. Ad esempio, un comando "normale" del flusso di lavoro è scritto in modo molto specifico. WF nativamente non è possibile eseguire qualsiasi cmdlet di Windows PowerShell vecchio. Il team Windows PowerShell fornisce equivalenti di WF per un enorme elenco di cmdlet nativi, quindi non c'è spesso un mapping uno a uno tra i cmdlet e attività WF.

Quando si utilizza un cmdlet che non hanno una corrispondente attività, Windows PowerShell avvolge implicitamente il codice all'interno di un'attività WF InlineScript. Che ha l'effetto di rendere WF eseguire Windows PowerShell, eseguire il comando all'interno di Windows PowerShell e poi riprendere i risultati in WF. Così un sacco di roba che "non dovrebbe" funzionare funzionerà, perché Windows PowerShell hack insieme per te.

Qui il pericolo è che la risoluzione dei problemi può diventare incredibilmente difficile, perché non sempre sarà in grado di vedere che cosa fa Windows PowerShell sotto il cofano. Nel caso di questo esempio, Windows PowerShell assicura che le variabili di primo livello persistono per tutto il flusso di lavoro.

Dove stiamo andando successivi

Che ci crediate o no, hai già avuto abbastanza per iniziare a scrivere i flussi di lavoro base. È possibile avere questi target qualsiasi computer dove hai installato Windows PowerShell versione 3 e abilitato servizi remoti. Parte del motivo per l'attivazione remota è quello di creare una configurazione di sessione Windows PowerShell flusso di lavoro utilizza. Se hai attivato remota su un computer con Windows PowerShell versione 2 e poi installato la versione 3, sarà necessario rieseguire Enable-PSRemoting per creare la configurazione necessaria.

Mantenere i flussi di lavoro abbastanza semplice. Eseguire una sequenza di comandi e non fare un sacco di manovre di fantasia. Non dovreste avere alcun problema, e si arriva a sfruttare l'integrato Windows PowerShell Workflow Remoting, targeting multicomputer e altre caratteristiche.

Il mese prossimo inizierà sempre più complicato. Potrai guardare le profonde differenze tra un flusso di lavoro e un normale script Windows PowerShell e iniziare ad esplorare alcune delle funzionalità più interessanti di Windows PowerShell del flusso di lavoro.

Don Jones

Don Jonesè un Windows PowerShell MVP Award vincitore e redattore di TechNet Magazine. Egli è coautore di quattro libri su Windows PowerShell versione 3, tra cui diversi titoli gratuiti sulla creazione di report HTML in Windows PowerShell e Windows PowerShell Remoting. Trovarli tutti a PowerShellBooks.com, o chiedere la tua domanda nel forum di discussione a PowerShell.org Jones .

Contenuti correlati