我是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
}
答案 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