Hey, Scripting Guy! Eseguire il backup del log eventi con uno script di Windows PowerShell

The Microsoft Scripting Guys

Scelta! Sweltering, Sticky Notes, creazione di note respiro calore humid è la prima cosa che Jason e notare quando si Franchi all'aeroporto in Kuala Lumpur, Malaysia. Prima si aveva raggiunto la Cordolo, un driver cab descrittivo stato nostro sacchetti la giunzione e l'apertura della porta per noi. Il viaggio è brisk tramite palm tree–lined strade che ha portato a Kuala Lumpur Città Centro (KLCC). Non appena è stato immesso il percorso, è possibile vedere glistening cima di Towers Patronus che contrassegnano KLCC da miglia stoccaggio in ogni direzione. È stato in città per adattare una classe di Microsoft Operations Framework (MOF) a un gruppo di dipendenti Microsoft.

L'evidenziazione della classe MOF è una simulazione di aeroporto assolutamente nessuno ha mai ricevuto sul primo tentativo. Ma che è parte di un punto di classe, processo di miglioramento. La classe è stato insegnato più di venti volte e nessuno mai completato il primo giorno. Alcune classi reso poco tramite la simulazione dell'ultimo giorno della classe. Finora.

Alla fine del primo giorno, era ora per una rotonda della simulazione. Jason e scambiati glances conoscenza come abbiamo fornito le istruzioni. Gli studenti sat con attenzione rapt e quindi come l'orologio avviato ticking, anziché il normale alti eseguire in confusione codificati, agli studenti di modalità non interattiva ottenuto insieme in una piccola huddle. Sono stati illustrati rapidamente per circa cinque minuti uno studente apre il proprio computer portatile e ha iniziato a rendere note. Quindi sono calmly attivato e sviluppato per vincere la partita nel primo round.

Come vengono farlo? Vengono indirizzati semplicemente tutti i loro attenzione agli elementi essenziali dello scenario. Tali ignorate tutte le informazioni non essenziali e creato un nuovo processo che ha risolto il problema. Poiché sono attivando il problema principale, sono prive di eventuali regole di lavoro complessi e era possibile concentrarsi loro energia a portata di mano l'attività.

Lavoro eccessivamente complesse regole possono ostacolare la produttività. Script di oggi comportava non poche di un situazione un cliente ha dovuto affrontato in cui essi sono stati spese diverse ore in un giorno di backup dei registri eventi di diversi server di rete e copiarli in una posizione di archiviazione centrale in cui fossero successive backup su nastro. Una volta abbiamo oltre le regole di lavoro complessi, siamo riusciti a creare uno script personalizzato che ha esattamente necessari. Questo script salvati cliente 10 ore alla settimana e 500 ore all'anno in manodopera che questi ha lavorato Gestione registri di eventi.

Quando si utilizza timeout dalle regole di lavoro complesso, è possibile concentrarsi più attenzione ed energia a portata di mano, l'attività che deve fornire i servizi IT. Diamo un'occhiata a uno script che è possibile utilizzare per eseguire il backup, archiviare e cancellare i registri eventi attraverso la rete. L'intero script BackUpAndClearEventLogs.ps1 è illustrato nella Figura 1 .

Nella figura 1 BackUpAndClearEventLogs.ps1

Param(
       $LogsArchive = "c:\logarchive", 
       $List,
       $computers,
       [switch]$AD, 
       [switch]$Localhost,
       [switch]$clear,
       [switch]$Help
     )
Function Get-ADComputers
{
 $ds = New-Object DirectoryServices.DirectorySearcher
 $ds.Filter = "ObjectCategory=Computer"
 $ds.FindAll() | 
     ForEach-Object { $_.Properties['dnshostname']}
} #end Get-AdComputers

Function Test-ComputerConnection
{
 ForEach($Computer in $Computers)
 {
  $Result = Get-WmiObject -Class win32_pingstatus -Filter "address='$computer'"
  If($Result.Statuscode -eq 0)
   {
     if($computer.length -ge 1) 
        { 
         Write-Host "+ Processing $Computer"
         Get-BackUpFolder 
        }
   } #end if
   else { "Skipping $computer .. not accessible" }
 } #end Foreach
} #end Test-ComputerConnection



Function Get-BackUpFolder
{
 $Folder = "{1}-Logs-{0:MMddyymm}" -f [DateTime]::now,$computer
  New-Item "$LogsArchive\$folder" -type Directory -force  | out-Null
  If(!(Test-Path "\\$computer\c$\LogFolder\$folder"))
    {
      New-Item "\\$computer\c$\LogFolder\$folder" -type Directory -force | out-Null
    } #end if
 Backup-EventLogs($Folder)
} #end Get-BackUpFolder

Function Backup-EventLogs
{
 $Eventlogs = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $computer
 Foreach($log in $EventLogs)
        {
            $path = "\\{0}\c$\LogFolder\$folder\{1}.evt" -f $Computer,$log.LogFileName
            $ErrBackup = ($log.BackupEventLog($path)).ReturnValue
            if($clear)
               {
                if($ErrBackup -eq 0)
                  {
                   $errClear = ($log.ClearEventLog()).ReturnValue
                  } #end if
                else
                  { 
                    "Unable to clear event log because backup failed" 
                    "Backup Error was " + $ErrBackup
                  } #end else
               } #end if clear
            Copy-EventLogsToArchive -path $path -Folder $Folder
        } #end foreach log
} #end Backup-EventLogs

Function Copy-EventLogsToArchive($path, $folder)
{
 Copy-Item -path $path -dest "$LogsArchive\$folder" -force
} # end Copy-EventLogsToArchive

Function Get-HelpText
{
 $helpText= `
@"
 DESCRIPTION:
 NAME: BackUpAndClearEventLogs.ps1
 This script will backup, archive, and clear the event logs on 
 both local and remote computers. It will accept a computer name,
 query AD, or read a text file for the list of computers. 

 PARAMETERS: 
 -LogsArchive local or remote collection of all computers event logs
 -List path to a list of computer names to process
 -Computers one or more computer names typed in
 -AD switch that causes script to query AD for all computer accounts
 -Localhost switch that runs script against local computer only
 -Clear switch that causes script to empty the event log if the back succeeds
 -Help displays this help topic

 SYNTAX:
 BackUpAndClearEventLogs.ps1 -LocalHost 

 Backs up all event logs on local computer. Archives them to C:\logarchive.

 BackUpAndClearEventLogs.ps1 -AD -Clear

 Searches AD for all computers. Connects to these computers, and backs up all event 
 logs. Archives all event logs to C:\logarchive. It then clears all event logs 
 if the backup operation was successful. 

 BackUpAndClearEventLogs.ps1 -List C:\fso\ListOfComputers.txt

 Reads the ListOfComputers.txt file to obtain a list of computer. Connects to these 
 computers, and backs up all event logs. Archives all event logs to C:\logarchive. 

 BackUpAndClearEventLogs.ps1 -Computers "Berlin,Vista" -LogsArchive "\\berlin\C$\fso\Logs"

 Connects to a remote computers named Berlin and Vista, and backs up    all event 
 logs. Archives all event logs from all computers to the path c:\fso\Logs directory on 
   a remote computer named Berlin. 

BackUpAndClearEventLogs.ps1 -help

Prints the help topic for the script
"@ #end helpText
  $helpText
}

# *** Entry Point To Script ***

If($AD) { $Computers = Get-ADComputers; Test-ComputerConnection; exit }
If($List) { $Computers = Get-Content -path $list; Test-ComputerConnection; exit }
If($LocalHost) { $computers = $env:computerName; Test-ComputerConnection; exit }
If($Computers) 
  { 
   if($Computers.Contains(",")) {$Computers = $Computers.Split(",")} 
   Test-ComputerConnection; exit 
  }
If($help) { Get-HelpText; exit }
"Missing parameters" ; Get-HelpText

La prima cosa si nel BackUpAndClearEventLogs.ps1 script è utilizzare l'istruzione di parametro per creare alcuni parametri della riga di comando per lo script, nel modo seguente:

Param(
       $LogsArchive = "c:\logarchive", 
       $List,
       $Computers,
       [switch]$AD, 
       [switch]$Localhost,
       [switch]$Clear,
       [switch]$Help
     )

È possibile utilizzare diversi parametri per assegnare i lotti di script di flessibilità. -LogsArchive parametro viene utilizzato per definire la posizione dell'archivio registro eventi. Questo è impostare un percorso predefinito sull'unità C:\, ma utilizzando l'opzione-LogsArchive, è possibile scegliere qualsiasi posizione adeguata di ambiente di elaborazione.

-L'elenco di parametro consente di fornire un elenco di computer per lo script tramite un file di testo. Questo parametro prevede che il percorso completo di un file di testo contenente i nomi di computer. La sintassi per il file di testo è semplice; è sufficiente inserire il nome di ogni computer che si desidera lavorare sulla propria riga singola.

-Computer parametro consente di fornire un elenco di computer dalla riga di comando quando si esegue lo script. Per utilizzare questo parametro, è possibile inserire in un insieme di nomi di computer tra virgolette separati da virgole. In teoria, è possibile utilizzare questo parametro se si desidera controllare solo un piccolo numero di computer.

Successivamente sono disponibili quattro parametri commutati. Uno del più interessanti è un parametro di switched denominato –AD, che consente di interrogare Active Directory per un elenco di computer. È opportuno utilizzare questa opzione se si desidera verificare un grande numero di registri eventi su tutti i computer della rete. Ovviamente, una rete di grandi dimensioni questo potrebbe richiedere molto molto tempo. Se si desidera eseguire lo script nel computer locale, utilizzare il - opzione Localhost, che indica lo script per eseguire il computer locale. Oltre alle registri di backup per l'evento e l'archiviazione delle immagini in una posizione centrale, è possibile inoltre vuota il contenuto dei registri degli eventi utilizzando il - Cancella passato parametro. Per ottenere informazioni, eseguire l'utilizzando script - Guida in linea. È ora sono la prima funzione nello script. La funzione Get-ADComputers è una query utilizzata per recuperare un elenco di tutti gli account computer in Active Directory. Questa funzione non richiede parametri di input. Quando la funzione viene chiamata, utilizza il cmdlet di oggetti di nuovo per creare un'istanza di una classe DirectoryServices.DirectorySearcher da Microsoft .NET Framework. È non passare le informazioni per il cmdlet di nuovo di oggetti, quindi la classe DirectoryServices.DirectorySearcher viene creata utilizzando il costruttore predefinito. La nuova classe DirectorySearcher è memorizzata nella variabile ds $, come illustrato di seguito:

Function Get-ADComputers
{
$ds = New-Object DirectoryServices.DirectorySearcher

Quando si dispone di un'istanza della classe DirectorySearcher, possiamo utilizzare la proprietà Filter per creare un filtro di ricerca per ridurre il numero di elementi che vengono recuperati. I filtri di ricerca LDAP sono documentati in" Sintassi di filtro di ricerca." L'attributo che si desidera è denominato ObjectCategory e si sta cercando un valore di "Computer". Dopo è stato creato il filtro, utilizziamo il metodo FindAll dall'oggetto DirectorySearcher:

 $ds.Filter = "ObjectCategory=Computer"
$ds.FindAll() | 

Il metodo FindAll i risultati sono pipeline al cmdlet ForEach-Object, che consente di scorrere l'insieme di oggetti DirectoryEntry restituiti da FindAll. All'interno del blocco script delineato per le parentesi graffe, è possibile utilizzare la variabile $ _ automatico per fare riferimento all'elemento corrente nella pipeline. È accedere alle proprietà dell'oggetto DirectoryEntry e restituire il dnshostname:

     ForEach-Object {$_.Properties['dnshostname']}
} #end Get-ADComputers

Verrà ora creato la funzione ComputerConnection di test per assicurarsi che il computer sia in rete e in esecuzione. Consente di evitare problemi di timeout e rendere più efficiente lo script. È possibile iniziare a utilizzare la parola chiave Function, quindi specificare il nome della funzione e aprire il blocco di script:

Function Test-ComputerConnection
{

Successivamente è necessario scorrere l'insieme di computer memorizzato nella variabile $ computer, che faremo mediante l'istruzione di ForEach con la variabile di computer $ come l'enumeratore. È quindi possibile aprire del blocco di script utilizzando una parentesi graffa sinistra:

 ForEach($Computer in $Computers)
{

È necessario utilizzare la classe WMI Win32_PingStatus per eseguire il ping del computer remoto. Per effettuare questa operazione, è utilizzare il cmdlet Get-WMIObject e specificare la classe Win32_PingStatus e creare un filtro che esamina la proprietà di indirizzo per verificare se corrisponde il valore memorizzato nella variabile $ del computer. È archiviare i risultati della query WMI in finestra di un risultato di $ denominata variabile, come illustrato di seguito:

  $Result = Get-WmiObject -Class Win32_PingStatus -Filter "address='$computer'"

Ora è possibile valutare il codice di stato restituito dalla query WMI. Se il codice di stato è uguale a zero, non siano presenti errori e il computer sia in esecuzione:

  If($Result.Statuscode -eq 0)
   {

Per qualche motivo anomalo, nel computer la query restituisce un computer non visibili (phantom) che viene valutato come presente, ma che non dispone di un nome. Per eliminare il computer non visibili (phantom), ho aggiunto una riga di codice per assicurarsi che il nome computer è lungo almeno un carattere:

     if($computer.length -ge 1) 
        { 

Quindi offriamo un po' di commenti e suggerimenti per l'utente visualizzando un messaggio di stato che indica che è l'elaborazione del computer. Si utilizza il cmdlet di host di scrittura per il feedback:

         Write-Host "+t Processing $Computer"

Ora chiamiamo la funzione Get-BackupFolder per individuare la cartella da utilizzare per il backup:

         Get-BackUpFolder 
        }
   } #end if

Se il computer non è accessibile, è inutile cercando di eseguire il backup dei log eventi, in quanto sarà in grado di raggiungerlo. Viene visualizzato un messaggio di stato che indica che si verrà ignorare il computer ed esce dalla funzione:

   else { "Skipping $computer .. not accessible" }
 } #end Foreach
} #end Test-ComputerConnection

Dopo aver valutato l'accessibilità del computer, è possibile creare la funzione Get-BackupFolder:

Function Get-BackupFolder
{

La riga successiva di codice viene leggermente odd-looking e pertanto un po' di confusione:

$Folder = "{1}-Logs-{0:MMddyymm}" -f [DateTime]::now,$computer

Si sta utilizzando l'operatore del formato (-f) per eseguire la sostituzione di alcuni valori all'interno della stringa che verrà utilizzato il nome della cartella. La stringa contiene il numero 1 in una coppia di parentesi graffe, i registri di parola racchiusi da trattini e un'altra coppia di parentesi graffe che racchiudono il numero 0 seguito da una serie di lettere.

Diamo questo uno passaggio alla volta. L'operatore – f consente di eseguire una sostituzione dei valori contenuti nella stringa. Come avviene con una matrice, il primo elemento inizia da 0, il secondo a 1. Gli elementi sul lato destro dell'operatore di f sono i valori di sostituzione che vengono inseriti negli slot appropriati sul lato sinistro.

Prima di ottenere nuovamente allo script principale, passiamo a qualche si consideri un esempio per chiarire come sostituzione viene eseguita nello script. Si noti come è possibile sostituire la parola uno per la parte {0} e la parola due per la parte {1} nel codice seguente:

PS C:\Users\edwilson> $test = "{0}-first-{1}-second" -f "one","two"
PS C:\Users\edwilson> $test
one-first-two-second

È probabilmente deve sono riorganizzare il codice in modo che il primo elemento è nella prima posizione. Invece si è scritte tale che il secondo elemento è nella posizione del primo, e che il primo elemento è nella posizione del secondo. Se è stato spostato sarebbero siano presenti diversi elementi a, la riga di codice simile al:

PS C:\Users\edwilson> $computer = "localhost"
PS C:\Users\edwilson> $Folder = "{0}-Logs-{1:MMddyymm}" -f $computer, [DateTime]::now
PS C:\Users\edwilson> $Folder
localhost-Logs-04070938

{1:MMddyymm} nel comando precedente viene utilizzato per fornire la data corrente e l'ora. Non vogliamo la visualizzazione normale di oggetto DateTime che viene visualizzato qui perché è troppo lungo e contiene caratteri non consentiti per un nome di cartella. La visualizzazione di predefinito per l'oggetto DateTime è martedì, 07 aprile, 2009 6:45:37 PM.

I modelli di lettere che seguono il carattere due punti nello script vengono utilizzati per controllare il modo che i valori DateTime verranno visualizzati. In questo caso, il mese è seguito da giorno, anno e il minuto. Queste stringhe di formato DateTime sono documentate in Stringhe di formato DateTime personalizzate. Sono stati descritti in un recente articolo nell'area Script Microsoft " Come è possibile controllare la dimensione del registro eventi e quindi backup e archivia IT se è più di half completo?"

Creiamo quindi la cartella di archiviazione registro eventi. Per creare la cartella, è necessario utilizzare il cmdlet New-l'elemento e specificare il tipo di directory. Microsoft utilizza la variabile LogsArchive $ e il modello che è memorizzati nella variabile $ cartella per creare il percorso all'archivio. Si utilizza il parametro - force per attivare la creazione di un intero percorso, se è necessario. Poiché non si sono interessati i commenti di questo comando, si pipeline i risultati di Out-Null cmdlet, illustrato di seguito:

New-Item "$LogsArchive\$folder" -type Directory -force | Out-Null

È inoltre necessario determinare se la cartella di registro presente nel computer. A questo scopo è possibile utilizzare il cmdlet del percorso del test, in questo modo:

  If(!(Test-Path "\\$computer\c$\LogFolder\$folder"))
    {

Il cmdlet del percorso di test restituisce un $ true o di un valore booleano false $. Chiedere, "È presente la cartella registro?" Inserimento non operatore (!) davanti al cmdlet il percorso del test indica siamo interessati solo se la cartella non esiste.

Se la cartella di registro non esiste sul computer remoto, è possibile utilizzare il cmdlet New-l'elemento per crearlo. Si hanno il valore hardcoded LogFolder ma è possibile modificarlo. Come nel cmdlet New-l'elemento precedente, è necessario utilizzare il parametro - force per creare il percorso completo e i risultati di pipeline di Out-Null cmdlet:

      New-Item "\\$computer\c$\LogFolder\$folder" -type Directory -force | out-Null
    } #end if

È necessario chiamare la funzione backup-registri eventi, che esegue il backup effettivo dei registri degli eventi. Viene passato il percorso memorizzato nella variabile $ cartella quando si chiama la funzione:

 Backup-EventLogs($folder)
} #end Get-BackUpFolder

Successivamente, è necessario creare la funzione di backup di registri eventi:

Function Backup-EventLogs
{

È possibile utilizzare nella classe WMI Win32_NTEventLogFile per eseguire il backup effettivo. A tale scopo, è necessario chiamare il cmdlet Get-WMIObject e assegnarle il nome classe di Win32_NTEventLogFile nonché il contenuto nella variabile $ computer nome computer. Viene memorizzato l'oggetto WMI risultante nella variabile di registri eventi $:

$Eventlogs = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $computer

Eseguendo una query WMI generica, non filtrata, viene restituito oggetti di log eventi che rappresentano ogni registro eventi del computer. Si tratta dei registri degli eventi classici illustrati nella Figura 2 .

Per utilizzare questi eventi, è necessario utilizzare l'istruzione ForEach per scorrere l'insieme di oggetti WMI. Utilizziamo il Registro di $ variabile come l'enumeratore per mantenere la posizione come abbiamo scorrere l'insieme:

fig02.gif

Nella figura 2 eventi classico recuperati da Win32_NTEventLogFile

 ForEach($log in $EventLogs)
        {

È necessario creare il percorso. Ancora una volta, è utilizzare l'operatore del formato per eseguire alcuni sostituzione del modello. {0} È un segnaposto per il nome computer nel percorso che verrà utilizzato per il event logs. {1} È un segnaposto che viene utilizzato per contenere il nome del file registro che verrà utilizzato quando il backup del log eventi:

            $path = "\\{0}\c$\LogFolder\$folder\{1}.evt" -f $Computer,$log.LogFileName

Ora chiamiamo il metodo BackupEventLog dalla classe WMI Win32_NTEventLogFile. È possibile passare il percorso il metodo BackupEventLog e recuperare il valore restituito dalla chiamata al metodo. Si memorizzano il valore restituito nella variabile $ ErrBackup come illustrato di seguito:

            $ErrBackup = ($log.BackupEventLog($path)).ReturnValue

Se lo script viene eseguito con l'opzione –clear, la variabile chiaro $ sarebbe presente e in tal caso, si deve cancellare i registri eventi. Di conseguenza, è possibile utilizzare se l'istruzione per determinare se è presente il simbolo $ deselezionare variabile:

            if($clear)
               {

Prima è vuota, i registri eventi, vorremmo garantire che il registro eventi è stato eseguito correttamente il backup. Per effettuare questa operazione, è possibile controllare il valore memorizzato nella variabile $ ErrBackup. Se è uguale a zero, sappiamo non errori durante l'operazione di backup e che sia sicuro proseguire svuotare i registri eventi:

                if($ErrBackup -eq 0)
                  {

È chiamare il metodo di ClearEventLog nella classe WMI Win32_NTEventLogFile e si recuperare il ReturnValue dalla chiamata al metodo. Viene memorizzato il ReturnValue in variabile $ errClear come illustrato di seguito:

                   $errClear = ($log.ClearEventLog()).ReturnValue
                  } #end if

Se il valore della variabile ErrBackup $ non è uguale a 0, si non deselezionare out i registri eventi. Al contrario, viene visualizzato un messaggio di stato indicante che Impossibile cancellare il registro eventi poiché l'operazione backup non è riuscita. Per fornire ulteriori informazioni sulla risoluzione dei problemi, viene illustrato il codice di stato è stato recuperato dall'operazione di backup:

                else
                  { 
                    "Unable to clear event log because backup failed" 
                    "Backup Error was " + $ErrBackup
                  } #end else
               } #end if clear

È quindi copiare i registri eventi nella posizione di archiviazione. A tal fine, è chiamare la funzione EventLogsToArchive di copia e fornire il percorso per i registri eventi e la cartella per la destinazione:

            Copy-EventLogsToArchive -path $path -Folder $Folder
        } #end foreach log
} #end Backup-EventLogs

EventLogsToArchive di copia utilizza il cmdlet copia-l'elemento per copiare i registri eventi del percorso di archiviazione. Utilizziamo nuovamente il parametro - force per creare la cartella se non esiste:

Function Copy-EventLogsToArchive($path, $folder)
{
 Copy-Item -path $path -dest "$LogsArchive\$folder" -force
} # end Copy-EventLogsToArchive

A questo punto è necessario creare del testo di Guida per lo script. A tale scopo, è possibile creare una funzione di Get-HelpText che memorizza le informazioni della Guida in una variabile singola: helpText $. Il testo della Guida viene scritto come una stringa di, che consente di formattare il testo come si desidera che appaia sullo schermo senza riguardanti pronto con escape virgolette. Questo rende molto più semplice per noi digitare una stringa di grandi dimensioni come quello della Figura 3 .

Nella figura 3-Get HelpText funzione

Function Get-HelpText
{ 
 $helpText= `
@"
 DESCRIPTION:
 NAME: BackUpAndClearEventLogs.ps1
 This script will backup, archive, and clear the event logs on 
 both local and remote computers. It will accept a computer name,
 query AD, or read a text file for the list of computers. 
 PARAMETERS: 
 -LogsArchive local or remote collection of all computers event logs
 -List path to a list of computer names to process
 -Computers one or more computer names typed in
 -AD switch that causes script to query AD for all computer accounts
 -Localhost switch that runs script against local computer only
 -Clear switch that causes script to empty the event log if the back succeeds
 -Help displays this help topic
 SYNTAX:
 BackUpAndClearEventLogs.ps1 -LocalHost 
Backs up all event logs on local computer. Archives them to C:\logarchive.
 BackUpAndClearEventLogs.ps1 -AD -Clear
 Searches AD for all computers. Connects to these computers, and backs up all event 
 logs. Archives all event logs to C:\logarchive. It then clears all event logs if the
 backup operation was successful. 
 BackUpAndClearEventLogs.ps1 -List C:\fso\ListOfComputers.txt
 Reads the ListOfComputers.txt file to obtain a list of computer. Connects to these 
 computers, and backs up all event logs. Archives all event logs to C:\logarchive. 
 BackUpAndClearEventLogs.ps1 -Computers "Berlin,Vista" -LogsArchive "\\berlin\C$\fso\Logs"
 Connects to a remote computers named Berlin and Vista, and backs up all event 
 logs. Archives all event logs from all computers to the path c:\fso\Logs directory on 
 a remote computer named Berlin. 
 BackUpAndClearEventLogs.ps1 -help
 Prints the help topic for the script
 "@ #end helpText

Per visualizzare il testo della Guida, la variabile viene chiamato per nome:

  $helpText
}

Successivamente, è necessario analizzare l'input della riga di comando illustrato di seguito:

If($AD) { $Computers = Get-ADComputers; Test-ComputerConnection; exit }
If($List) { $Computers = Get-Content -path $list; Test-ComputerConnection; exit }
If($LocalHost) { $computers = $env:computerName; Test-ComputerConnection; exit }

Se il simbolo $ variabile AD è presente, lo script è stato eseguito con l'opzione-AD opzione ed è pertanto popolare la variabile di computer $ con le informazioni ottenute dalla funzione Get-ADComputers. Chiamiamo quindi la funzione di ComputerConnection di test, che consente di verificare se il computer è in linea e indietro dei log eventi. Quindi è necessario chiudere lo script. Se la variabile di elenco $ è presente, viene utilizzato il cmdlet Get-Content per leggere un file di testo e popolare la variabile di computer $. È quindi chiamare la funzione ComputerConnection di test e chiudere lo script. Se la variabile di LocalHost $ è presente, è necessario popolare la variabile di computer $ leggendo il valore direttamente dalla variabile di ambiente nomecomputer. È quindi chiamare la funzione ComputerConnection di test e chiudere lo script.

Se la variabile $ computer è presente, significa che è stato eseguito lo script e che i nomi dei computer sono stati specificati dalla riga di comando. È necessario suddividere questi nomi di computer in una matrice. Per effettuare questa operazione, utilizziamo il metodo di divisione dell'oggetto stringa:

If($Computers) 
  { 
   if($Computers.Contains(",")) {$Computers = $Computers.Split(",")} 
   Test-ComputerConnection; exit 
  }

Se lo script è stato eseguito con il - opzione della Guida in linea, si chiama la funzione Get-HelpText, Visualizza la Guida in linea e chiusura lo script:

If($help) { Get-HelpText; exit }

Se parametri non sono presenti, è visualizzato un messaggio di test che stati è è priva di parametri e quindi chiamare il Get-Help funzione:

"Missing parameters" ; Get-HelpText

Lo script BackupAndClearEventLogs.ps1 può essere facilmente adattato per soddisfare esigenze della rete. Ad esempio, è possibile modificare la query di Active Directory in modo che restituisca solo i server da una particolare unità organizzativa oppure è possibile aggiungere un'altra query WMI per filtrare ulteriormente i computer che vengono elaborati. Ci auguriamo che divertirsi con lo script e l'utilizzo in cui si lavora. Visitare Microsoft e dalla community di creatori di script sul Script Centerin dove è inoltre possibile intercettare nostro giornaliero Hey, Scripting Guy! articoli.

Ed Wilson , un esperto di script noto, è l'autore di otto libri, tra cui Windows PowerShell Scripting Guide Microsoft Press (2008) e Microsoft Windows PowerShell Step by Step Microsoft Press (2007). Ed contiene più di 20 certificazioni del settore, tra cui Microsoft Certified Systems Engineer (MCSE) e CISSP (Certified Information Systems Security Professional). Nel tempo libero, ama woodworking, il mondo sommerso fotografia e immersioni. E Teiera.

Craig Liebendorfer è wordsmith ed editor di Microsoft Web esperti. Craig ancora non ritiene c'è un processo che paga di lavorare con le parole ogni giorno. Uno degli suo aspetti di Preferiti è irreverent umorismo, in modo che deve essere adatta a destra in questa posizione. Considera il maggiore accomplishment nella vita a sua figlia magnificent.