none
Variable an ps1 Datei übergeben (Variable in $_.Length -gt xxx) RRS feed

  • Frage

  • Guten Tag,

    nachdem mir hier mit meinen ersten versuchen schon geholfen wurde (wobei mir nur eine Klammer entgangen war) wollte ich nun versuchen mein script in eine PS1 Datei zu speichern um diese für späteren gebrauch nutzen zu können. Da ich aber nicht immer das gleiche Verzeichnis durchsuchen will und ggf. auch mal eine andere Größenbegrenzung brauche, wollte ich mit Variablen arbeiten, die ich dann beim Aufruf übergeben kann.

    param (
    [string]$pfad = "P:\",
    [decimal]$size = "10")
    gci $pfad -recurse -errorAction SilentlyContinue 
    |Where-Object {$_.Length -gt $sizeMB} 
    | Format-Table -Property 
    @{Label = "File"; Expression={$_.FullName}},
    @{Label = "Size";Formatstring="{0:0.00}";Expression={$_.Length/1MB}}

    Das ist der Inhalt meiner aktuellen PS1 Datei. die Übergabe von -pfad Funktioniert soweit.

    Die übergabe von -size gibt mir keine Fehlermeldung oder soetwas zurück. Aber in der Ausführung werden mir einfach alle Dateien im Verzeichnis angezeigt. Ich habe auch versucht $size als String zu setzen, aber dann kann powershell die größen nicht vergleichen (mein String war als "10MB" gesetzt). Mir ist auch klar wieso dieser vergleich nicht so funktioniert, aber wie kann ich mit einer Variablen an dieser Stelle die größe und die Einheit (MB,GB...) mitgeben?

    Vielen Dank schon mal an jeden der sich durch diesen Text gearbeitet hat und noch mehr Dank an jeden der eine Idee zur Lösung meines Problems hat.

    mfg

    Hamster

    Dienstag, 7. April 2015 09:08

Antworten

  • Erstens würde ich mir mal eine etwas strukturiertere Formatierung angewöhnen. Zweitens ist der Name der Variablen einmal "Size" und einmal "sizeMB" und drittens würde ich da Sprachen jetzt auch nicht mischen.

    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$false,Position=0)]
        [ValidateScript({Test-Path $_ -PathType Container})]
        [string]$Pfad = "P:\",
        
        [Parameter(Mandatory=$false,Position=1)]
        [long]$Size = 10MB
    )
    

    Gruß
    Joachim

    • Als Antwort markiert Cute_Hamster Dienstag, 7. April 2015 11:24
    Dienstag, 7. April 2015 09:49

Alle Antworten

  • Erstens würde ich mir mal eine etwas strukturiertere Formatierung angewöhnen. Zweitens ist der Name der Variablen einmal "Size" und einmal "sizeMB" und drittens würde ich da Sprachen jetzt auch nicht mischen.

    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$false,Position=0)]
        [ValidateScript({Test-Path $_ -PathType Container})]
        [string]$Pfad = "P:\",
        
        [Parameter(Mandatory=$false,Position=1)]
        [long]$Size = 10MB
    )
    

    Gruß
    Joachim

    • Als Antwort markiert Cute_Hamster Dienstag, 7. April 2015 11:24
    Dienstag, 7. April 2015 09:49
  • Vielen Dank schon mal für die Antwort.

    Ich werde das gleich mal ausprobieren.

    Meine Formatierung ist sicher noch recht unsauber, da ich momentan noch in den Anfängen stecke und froh bin wenn etwas funktioniert.

    die Sache mit Size und SizeMB war mein kläglicher Versuch über die Variable die Zahl zu bekommen und an der Stelle ein MB anzuhängen (das das so im normalfall in keiner Skriptsprache funktioniert ist mir klar)

    und was meinst du mit Sprachen mischen? Wäre super wenn du mir das erklären könntest, damit ich für die Zukunft was lerne.

    mfg

    Hamster

    EDIT:

    Hab mit deinen Änderungen getestet und es Funktioniert ausgezeichnet, Vielen Dank noch mal.

    Dienstag, 7. April 2015 11:10
  • Mit Sprachen mischen habe ich die Parameter "Pfad" und "Size" gemeint. Entweder alle in englisch oder alle in deutsch.

    Gruß
    Joachim

    Dienstag, 7. April 2015 13:42
  • Meine Formatierung ist sicher noch recht unsauber, da ich momentan noch in den Anfängen stecke und froh bin wenn etwas funktioniert.

    Gerade als Anfänger ist es am wichtigsten sich gleich anzugewöhnen, den Code übersichtlich zu formatieren. Du findest viele Fehler deutlich schneller. Echt. :)
    Man gewöhnt sich außerdem sehr schnell dran und macht es dann automatisch.
     
    Gruß, Denniver



    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.


    Mittwoch, 8. April 2015 01:44
    Moderator