在powershell脚本中获取文件类别

时间:2014-04-30 06:04:11

标签: powershell

我是PowerShell脚本的新手。我有包含sone sharepath的文本文件(例如:\ INTBMCELB \ Abbott ADD HR Finance,\ INTBMCELB \ Abbott ADD HR Finance_VSS等)。  我读了文本文件中的所有路径和每个路径中的文件夹,csv文件中加载的文件夹的详细信息。目前我在csv文件中有一个名为size的字段。我需要再添加一个名为“文件类别”的字段。文件类别字段根据文件大小显示为(微小,小,大等),如下所示。

微小(0-10KB),小(10-100KB),中(100KB-1MB),大(1-16MB),巨大(16-128MB),巨大(> 128MB)。

在下面添加我当前的脚本。如何检查文件大小如上所述并包含在新字段下。

$infile = 'C:\Users\417193\Desktop\MyShareBatch\SharePaths.txt'
$outdir = 'C:\Users\417193\Desktop\MyShareBatch\MyShareOuts'

foreach ($dir in (Get-Content $infile)) {
    $outfile = Join-Path $outdir($dir -split '\\')[-1]
    $outfilecsv = $outfile+'.csv'
    $outfilecsv
    Get-ChildItem -Path $dir -Filter *.* -Recurse |
        Select-Object Name,
            @{Name="Owner";Expression={(Get-ACL $_.fullname).Owner}},
            CreationTime,
            @{Name="FileModifiedDate";Expression={$_.LastWriteTime}},
            @{Name="FileAccessedDate";Expression={$_.LastAccessTime}},
            @{Name="Attributes";Expression={$_.Attributes}},
            @{l='ParentPath';e={Split-Path $_.FullName}},
            @{Name="DormantFor(days)";Expression={[int]((Get-Date)-$_.LastWriteTime).TotalDays}},
            @{Name="Size";Expression={if($_.PSIsContainer -eq $True){(New-Object -com  Scripting.FileSystemObject).GetFolder( $_.FullName).Size} else {$_.Length}}} |
        Export-Csv -Path 

    $outfilecsv -Encoding ascii -NoTypeInformation
}

1 个答案:

答案 0 :(得分:1)

如何使用switch语句?

Function Get-FileSizeCategory( $Object ){
    if( $Object.PSIsContainer ){
        $Length = (New-Object -ComObject Scripting.FileSystemObject).GetFolder($Object.FullName).Size
    } else {
        $Length = $_.Length
    }

    switch( $Length ){
        {$_ -le 10KB}  {"Tiny"; break}
        {$_ -le 1MB}   {"Medium"; break}
        {$_ -le 16MB}  {"Large"; break}
        {$_ -le 128MB} {"Huge"; break}
        default        {"Gigantic"}
    }
}

如果您使用的是Powershell 3.0或更高版本,则可以通过将哈希值转换为PSCustomObject类型来构建对象:

$FileList = ls $Dir -Recurse -Filter *.* | Foreach-Object {
    [PSCustomObject]@{
        Name = $_.Name;
        Owner = (Get-Acl $_.FullName).Owner;
        Category = (Get-FileSizeCategory $_);
        # Other properties here
        # ...
    }
}

$FileList | Export-Csv $CsvPath -NoTypeInformation -Encoding ascii