none
Gelöscht RRS feed

Antworten

  • Hallo Paul!

     

    1.)

    Man kann in der PowerShell den Parameter-Block einer Funktion auf 2 Arten gestalten. Die erste Variante ist aus vielen Programmiersprachen bekannt und nutzt einen Parameter-Block in runden Klammern, der direkt dem Funktionsnamen folgt.

     

    Beispiel;  Parameter-Block in runden Klammern, der direkt dem Funktionsnamen folgt, mit 2 Parametern:

    Function Verb-Noun ($Computername , $Number) {  # Function code... }

     

    Diese Schreibweise ist in der PowerShell eher unüblich, da die PowerShell sehr viele Parameter Attribute unterstützt, die das Verhalten der Parameter verändern können.

    Ebenso kann diese Schreibweise nicht in Scripten als Parameter-Block benutzt werden.

     

    Deshalb sollte man sich in der PowerShell an die Schreibweise mit einen eigenen Param() Block gewöhnen.

    Dabei wird der Parameter-Block mit dem Schlüsselwort „Param“ eingeleitet und die Parameter werden in den  in runden Klammern angegeben die zu dem „Param“ Schlüsselwort gehören (Parameter-Block).

    Bei einer Funktion steht der Param()-Block Gleich nach dem Funktions Rumpf innerhalb des Funktions-Blocks nach der öffnenden geschweiften Klammer.

     

    Beispiel;  Eigenständiger Parameter-Block mit dem Schlüsselwort „Param“ und  runden Klammern, der direkt dem Funktionsrumpf folgt, mit 2 Parametern:

     

    Function Verb-Noun

    {

      Param($Computername, $Number)

      # Function code...

    }

     

    Wenn man einem Script Parameter übergeben möchte,  kann man diesen Param()-Block als erste Zeilen in seinem Script einsetzen.

     

    Param($Number,$Computername)

     

    Üblich ist bei diesem Param()-Block das er auf mehrere Zeilen, eingerückt  Formatiert wird.

     

    Param

    (

        $Computername,

        $Number

    )

     

    Wenn man diese Schreibweise benutzt dann kann man den Parameter durch die Attribute noch viele zusätzliche Informationen mitgeben.

     

    2.)

    Du benutzt in deinem Code mit While($True){} eine so genannte Endlos-Schleife. Endlosschleifen sollte man vermeiden, Ich stufe diese sogar als gefährlich ein. Eine Endlosschleifen kann das Progamm endlos Blockieren und die CPU zum glühen bringen.

    Die Schleife macht in deinem Code auch überhaupt keinen Sinn.

     

    3.)

    In der PowerShell gibt es 2 Verschiedenen ForEach Konstrukte

    Lies dazu meine Artikel: PowerShell ForEach und ForEach-Object

    http://www.admin-source.de/BlogDeu/905/powershell-foreach-und-foreach-object

     

    Hier würde ich die ForEach Schleife nehmen und nicht das ForEach-Object Cmdlet weil die Schleife mit den Schlüsselwörtern „break“ und „continue“ leichter zu steuern ist.


    Ungetestet!

    Function Check-Logfile
    {
    
      param
      (
        [System.String]
        $logfile,
    
        [System.String]
        $suchstring,
    
        [System.String]
        $email,
    
        [System.Int32]
        $checkrate,
    
        [System.Management.Automation.PSCredential]
        $Credential
    
      )
      
      ForEach($Line in (Get-Content -Path $logfile)) {
        If($Line -match $Suchstring) {
          #send-mailmessage -to $email -subject "## checkLogfile Treffer ##" `
          #    -from "htl3rlabor@outlook.com" -Body $_ `
          #    -smtpserver "smtp.live.com" -Credential $Credential -port 587 -useSSL
          
          # ForEachschleife nach dem ersten Treffer verlassen
          break
    
        } # Ende If
      } # Ende ForEach
    }
    
    $User = 'MyName'
    
    $PassWord = ConvertTo-SecureString -String "P@ssW0rd" -AsPlainText -Force
    
    $myCred= New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PassWord
    
    
    checkLogfile -logfile "\\psf\Home\Desktop\setupact.log" -suchstring "cleanup" -email "" -checkrate 2 -Credential $myCred



    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    Montag, 20. Oktober 2014 08:02

Alle Antworten

  • Hallo Paul,

    Schauen Sie Mal hier script is searching for ERROR in a logfile, vielleicht werden Sie dort hilfreiche Information finden.

    Gruß

    Teodora


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Samstag, 18. Oktober 2014 08:10
    Moderator
  • Hallo Paul!

     

    1.)

    Man kann in der PowerShell den Parameter-Block einer Funktion auf 2 Arten gestalten. Die erste Variante ist aus vielen Programmiersprachen bekannt und nutzt einen Parameter-Block in runden Klammern, der direkt dem Funktionsnamen folgt.

     

    Beispiel;  Parameter-Block in runden Klammern, der direkt dem Funktionsnamen folgt, mit 2 Parametern:

    Function Verb-Noun ($Computername , $Number) {  # Function code... }

     

    Diese Schreibweise ist in der PowerShell eher unüblich, da die PowerShell sehr viele Parameter Attribute unterstützt, die das Verhalten der Parameter verändern können.

    Ebenso kann diese Schreibweise nicht in Scripten als Parameter-Block benutzt werden.

     

    Deshalb sollte man sich in der PowerShell an die Schreibweise mit einen eigenen Param() Block gewöhnen.

    Dabei wird der Parameter-Block mit dem Schlüsselwort „Param“ eingeleitet und die Parameter werden in den  in runden Klammern angegeben die zu dem „Param“ Schlüsselwort gehören (Parameter-Block).

    Bei einer Funktion steht der Param()-Block Gleich nach dem Funktions Rumpf innerhalb des Funktions-Blocks nach der öffnenden geschweiften Klammer.

     

    Beispiel;  Eigenständiger Parameter-Block mit dem Schlüsselwort „Param“ und  runden Klammern, der direkt dem Funktionsrumpf folgt, mit 2 Parametern:

     

    Function Verb-Noun

    {

      Param($Computername, $Number)

      # Function code...

    }

     

    Wenn man einem Script Parameter übergeben möchte,  kann man diesen Param()-Block als erste Zeilen in seinem Script einsetzen.

     

    Param($Number,$Computername)

     

    Üblich ist bei diesem Param()-Block das er auf mehrere Zeilen, eingerückt  Formatiert wird.

     

    Param

    (

        $Computername,

        $Number

    )

     

    Wenn man diese Schreibweise benutzt dann kann man den Parameter durch die Attribute noch viele zusätzliche Informationen mitgeben.

     

    2.)

    Du benutzt in deinem Code mit While($True){} eine so genannte Endlos-Schleife. Endlosschleifen sollte man vermeiden, Ich stufe diese sogar als gefährlich ein. Eine Endlosschleifen kann das Progamm endlos Blockieren und die CPU zum glühen bringen.

    Die Schleife macht in deinem Code auch überhaupt keinen Sinn.

     

    3.)

    In der PowerShell gibt es 2 Verschiedenen ForEach Konstrukte

    Lies dazu meine Artikel: PowerShell ForEach und ForEach-Object

    http://www.admin-source.de/BlogDeu/905/powershell-foreach-und-foreach-object

     

    Hier würde ich die ForEach Schleife nehmen und nicht das ForEach-Object Cmdlet weil die Schleife mit den Schlüsselwörtern „break“ und „continue“ leichter zu steuern ist.


    Ungetestet!

    Function Check-Logfile
    {
    
      param
      (
        [System.String]
        $logfile,
    
        [System.String]
        $suchstring,
    
        [System.String]
        $email,
    
        [System.Int32]
        $checkrate,
    
        [System.Management.Automation.PSCredential]
        $Credential
    
      )
      
      ForEach($Line in (Get-Content -Path $logfile)) {
        If($Line -match $Suchstring) {
          #send-mailmessage -to $email -subject "## checkLogfile Treffer ##" `
          #    -from "htl3rlabor@outlook.com" -Body $_ `
          #    -smtpserver "smtp.live.com" -Credential $Credential -port 587 -useSSL
          
          # ForEachschleife nach dem ersten Treffer verlassen
          break
    
        } # Ende If
      } # Ende ForEach
    }
    
    $User = 'MyName'
    
    $PassWord = ConvertTo-SecureString -String "P@ssW0rd" -AsPlainText -Force
    
    $myCred= New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PassWord
    
    
    checkLogfile -logfile "\\psf\Home\Desktop\setupact.log" -suchstring "cleanup" -email "" -checkrate 2 -Credential $myCred



    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    Montag, 20. Oktober 2014 08:02