none
string.length liefert Länge 1 zurück? RRS feed

  • Frage

  • Hallo Leute,

    ich weiss nicht mehr weiter nach lesen von about_Functions und anderen Quellen. Folgende Funktion ergibt, mit dem Debugger betrachtet, für die Variable $l immer eine Länge des übergebenen Strings von 1 obgleich dieser immer länger ist. 

    Function ToUpper-Chars { Param( [string[]]$passwd, [int]$NumChars=1 ) $l = $passwd.length For ($loop=1; $loop -le $NumChars; $loop++){ $r = Get-Random -minimum 1 -maximum $l $ss = $passwd.SubString($r, 1).ToUpper() $ToUpper = $passwd.Remove($r,1) $ToUpper = $ToUpper.Insert($r,$ss) } Return $ToUpper }

    # Aufrufbeispiel
    $p = "kkfzjde"
    $p = ToUpper-Chars -passwd $p -NumChars 2

     

    Erwähnenswert wäre vielleicht noch folgende Fehlermeldung beim Start, obwohl das restliche Script soweit funktionierte:

    PS C:\Users\Michael> Set-ExecutionPolicy unrestricted
    Set-ExecutionPolicy : Der Zugriff auf den Registrierungsschlüssel "HKEY_LOCAL_MACHINE\SOFT
    WARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" wurde verweigert.
    Bei Zeile:1 Zeichen:20
    + Set-ExecutionPolicy <<<<  unrestricted
        + CategoryInfo          : NotSpecified: (:) [Set-ExecutionPolicy], UnauthorizedAccess
       Exception
        + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Com
       mands.SetExecutionPolicyCommand
     

    Ich mache wohl etwas grundsätzlich falsch. Kann jemand helfen?

    Danke!






    • Bearbeitet mlkuen Mittwoch, 18. September 2013 17:08
    Mittwoch, 18. September 2013 16:53

Antworten

  • Dein parameter ist als String Array String[] deklariert.

    Dein Array hat natürlich nur einen String im Index!

    Entfernen die Klammern, Dann ist das ein Sring und kein Array von Strings!

    Function ToUpper-Chars {
     Param( [string]$passwd, [int]$NumChars=1 )
     $l = $passwd.length
     For($loop=1; $loop -le $NumChars; $loop++){
     $r = Get-Random -minimum 1 -maximum $l
     $ss = $passwd.SubString($r, 1).ToUpper()
     $ToUpper = $passwd.Remove($r,1)
     $ToUpper = $ToUpper.Insert($r,$ss)
      }
      Return $ToUpper }
    
    # Aufrufbeispiel
    $p = "kkfzjde"
    $p = ToUpper-Chars -passwd $p -NumChars 2
    $p


    Mein deutscher PowerShell Blog http://www.admin-source.info
    In meinem Blog: PowerShell Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Deutsche PowerShell Videos in meinem Youtube Kanal:http://www.youtube.com/user/GermanPowerShell
    Auf Youtube mein 21 Teiliger PowerShell Video Grundlehrgang
    Twitter: @PeterKriegel
    Facebook: Peter Kriegel
    Google+ : Peter Kriegel
    Deutsches TechNet PowerShell Forum!
    [[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    Mittwoch, 18. September 2013 17:13

Alle Antworten