IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Get-ChildItem: plus conviviale


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut Get-ChildItem: plus conviviale
    salut,

    voici une extension du cmdlet "get-childitem"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    Function Get-ChildItem {
    <#
    
    .ForwardHelpTargetName Get-ChildItem
    .ForwardHelpCategory Cmdlet
    
    #>
    
    [CmdletBinding(DefaultParameterSetName='Items', SupportsTransactions=$true)]
    param(
        [Parameter(ParameterSetName='Items', Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
        [System.String[]]
        ${Path},
    
        [Parameter(ParameterSetName='LiteralItems', Mandatory=$true, Position=0, ValueFromPipelineByPropertyName=$true)]
        [Alias('PSPath')]
        [System.String[]]
        ${LiteralPath},
    
        [Parameter(Position=1)]
        [System.String]
        ${Filter},
    
        [System.String[]]
        ${Include},
    
        [System.String[]]
        ${Exclude},
        
        [System.String]
        ${Pattern},
    
        [Switch]
        ${Recurse},
    
        [Switch]
        ${FileSizeInHumanReadableFormat},
    
        [Switch]
        ${Force},
    
        [Switch]
        ${Name})
    
    begin
    {
        try {
            $outBuffer = $null
            if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer))
            {
                $PSBoundParameters['OutBuffer'] = 1
            }
            $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Microsoft.PowerShell.Management\Get-ChildItem', [System.Management.Automation.CommandTypes]::Cmdlet)
            $cmd = ""
            if($FileSizeInHumanReadableFormat) {
              $PSBoundParameters.Remove('FileSizeInHumanReadableFormat') | Out-Null
              $cmd = @"
                | ForEach-Object {
                    `$in=Switch(`$_) {
                      { `$_.length -lt 1kb } 
                               {  '{0} B' -f (`$_.Length) ;break }
                      { `$_.length -lt 1MB }
                               {  '{0} KB' -f ([math]::round(`$(`$_.Length/ 1kb)), 2) ;break }
                      { `$_.length -lt 1gb }
                                { '{0} MB' -f ([math]::round(`$(`$_.Length/ 1mb), 2)) ;break }
                      defaut { 
                                {  '{0} GB' -f ([math]::round(`$(`$_.Length/ 1gb), 2)) ;break }
                       }
                    }
                    if(`$_.PSISContainer) { `$in=`$null }
                    New-Object PSObject -Property @{
                      Mode = `$_.Mode
                      LastWriteTime = `$_.LastWriteTime
                      Length = `$in
                      Name = `$_.Name
                    }
                }         
    "@
            }
            if($PSBoundParameters['Pattern']) {
              if($Filter -or $Include) {
               throw "les paramètres Pattern et Filter/Include sont mutuellemnt exculsive"
              } else {
              $PSBoundParameters.Remove('Pattern') | Out-Null
              $scriptCmd = {& $wrappedCmd @PSBoundParameters | Where { $_.Name -imatch "$Pattern"  } }
              }
            } else {
              $scriptCmd = {& $wrappedCmd @PSBoundParameters } 
            }
    
           $scriptCmd = $ExecutionContext.InvokeCommand.NewScriptBlock(
                    $scriptCmd.Tostring() + $cmd
               )
            $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
            $steppablePipeline.Begin($PSCmdlet)
        } catch {
            throw
        }
    }
    
    process
    {
        try {
            $steppablePipeline.Process($_)
        } catch {
            throw
        }
    }
    
    end
    {
        try {
            $steppablePipeline.End()
        } catch {
            throw
        }
    }
    
    }
    pour plus d'infos sur la nouvelle fonction

  2. #2
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    salut,

    j'ai améliorer un peu le code pour qu'il devienne plus générique en fait, la première fonction avait comme sortie :

    System.Management.Automation.PSCustomObject

    ou

    System.IO.FileSystemInfo


    maintenant la sortie est uniquement:
    System.IO.FileSystemInfo



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    Function Get-ChildItem {
    <#
    
    .ForwardHelpTargetName Get-ChildItem
    .ForwardHelpCategory Cmdlet
    
    #>
    
    [CmdletBinding(DefaultParameterSetName='Items', SupportsTransactions=$true)]
    param(
        [Parameter(ParameterSetName='Items', Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
        [System.String[]]
        ${Path},
    
        [Parameter(ParameterSetName='LiteralItems', Mandatory=$true, Position=0, ValueFromPipelineByPropertyName=$true)]
        [Alias('PSPath')]
        [System.String[]]
        ${LiteralPath},
    
        [Parameter(Position=1)]
        [System.String]
        ${Filter},
    
        [System.String[]]
        ${Include},
    
        [System.String[]]
        ${Exclude},
        
        [System.String]
        ${Pattern},
    
        [Switch]
        ${Recurse},
    
        [Switch]
        ${BinarySizeInHumanReadableFormat},
    
        [Switch]
        ${Force},
    
        [Switch]
        ${Name})
    
    begin
    {
        try {
            $outBuffer = $null
            if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer))
            {
                $PSBoundParameters['OutBuffer'] = 1
            }
            $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Microsoft.PowerShell.Management\Get-ChildItem', [System.Management.Automation.CommandTypes]::Cmdlet)
            $cmd = ""
            if($BinarySizeInHumanReadableFormat) {
              $PSBoundParameters.Remove('BinarySizeInHumanReadableFormat') | Out-Null
              $cmd = @"
                | ForEach-Object {
                     `$_length=Switch(`$_.length) {
                      { `$_ -lt 1kb } 
                               {  '{0}B' -f (`$_) ;break }
                      { `$_ -lt 1MB }
                               {  '{0}KB' -f ([math]::round(`$(`$_/ 1kb)), 2) ;break }
                      { `$_ -lt 1gb }
                                { '{0}MB' -f ([math]::round(`$(`$_/ 1mb), 2)) ;break }
                      defaut { 
                                {  '{0}GB' -f ([math]::round(`$(`$_/ 1gb), 2)) ;break }
                       }
                    }
                    if(`$_.PSISContainer) { `$_length=`$null }
                     `$_ | Add-Member noteproperty size `$_.length -Pass |  
                        Add-Member noteproperty length `$_length -PassThru -Force              
                }         
    "@
            }
            if($PSBoundParameters['Pattern']) {
              if($Filter -or $Include) {
               throw "les paramètres Pattern et Filter/Include sont mutuellemnt exculsive"
              } else {
              $PSBoundParameters.Remove('Pattern') | Out-Null
              $scriptCmd = {& $wrappedCmd @PSBoundParameters | Where { $_.Name -imatch "$Pattern"  } }
              }
            } else {
              $scriptCmd = {& $wrappedCmd @PSBoundParameters } 
            }
            $scriptCmd = $ExecutionContext.InvokeCommand.NewScriptBlock(
                    $scriptCmd.ToString() + $cmd
                )
            $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
            $steppablePipeline.Begin($PSCmdlet)
        } catch {
            throw
        }
    }
    
    process
    {
        try {
            $steppablePipeline.Process($_)
        } catch {
            throw
        }
    }
    
    end
    {
        try {
            $steppablePipeline.End()
        } catch {
            throw
        }
    }
    
    }
    merci à Simon Sheppard pour son idée


    voici quelques exemples d'utilisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    PS D:\Documents and Settings\walid2mi> Get-ChildItem -Pattern "\."
    
    
        Répertoire : D:\Documents and Settings\walid2mi
    
    
    Mode                LastWriteTime     Length Name                                    
    ----                -------------     ------ ----                                    
    -a---        21/11/2010     11:28          6 k.txt                                   
    -a---        04/11/2010     10:49       1362 t.txt                                   
    -a---        05/11/2010     06:14       3070 w.txt                                   
    
    
    PS D:\Documents and Settings\walid2mi> Get-ChildItem -Pattern "\." -BinarySize
    
    
        Répertoire : D:\Documents and Settings\walid2mi
    
    
    Mode                LastWriteTime     Length Name                                    
    ----                -------------     ------ ----                                    
    -a---        21/11/2010     11:28         6B k.txt                                   
    -a---        04/11/2010     10:49        1KB t.txt                                   
    -a---        05/11/2010     06:14        3KB w.txt                                   
    
    
    PS D:\Documents and Settings\walid2mi> Get-ChildItem -Pattern "\." -BinarySize | sort -Descending size
    
    
        Répertoire : D:\Documents and Settings\walid2mi
    
    
    Mode                LastWriteTime     Length Name                                    
    ----                -------------     ------ ----                                    
    -a---        05/11/2010     06:14        3KB w.txt                                   
    -a---        04/11/2010     10:49        1KB t.txt                                   
    -a---        21/11/2010     11:28         6B k.txt

Discussions similaires

  1. [PowerShell] fusionner le résultat de plusieur get-childitem
    Par gretch dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 17/08/2014, 23h10
  2. [PowerShell] Get-ChildItem, variabiliser le contenu du -Exclude
    Par Escandil dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 01/07/2011, 14h37
  3. [PowerShell] Comment optimiser get-childitem pour ne pas parcourir tout un repertoire ?
    Par yapooze dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 02/11/2010, 10h25
  4. Racourcis Windows Plus Conviviale
    Par faressam dans le forum Windows XP
    Réponses: 5
    Dernier message: 26/06/2008, 16h12
  5. Interface Access plus conviviale ?
    Par smysted dans le forum Access
    Réponses: 2
    Dernier message: 24/02/2006, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo