递归显示没有显示正确的格式

时间:2012-10-24 15:33:33

标签: powershell powershell-v2.0

我的IF-ELSE声明出了问题,而我的愚蠢的大脑无法弄清楚它到底是什么!

如果我自己运行下面的代码,它会以下面的格式显示每个目录和文件:

get-childitem E:\LogArchive -recurse | where-object {$_.lastwritetime -gt 60}

输出格式:

    Directory: E:\LogArchive\W3SVC100


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-----        29/03/2007     15:03        663 ex070329.log.gz
-----        30/03/2007     15:44        860 ex070330.log.gz
-----        03/04/2007     13:41        354 ex070403.log.gz
-----        05/04/2007     14:00        704 ex070405.log.gz
-----        10/04/2007     17:56        921 ex070410.log.gz
-----        11/04/2007     14:55        987 ex070411.log.gz
-----        12/04/2007     15:12        539 ex070412.log.gz

然而,当它在代码中运行时,它显示如下,没有所有文件夹结构和日期等:

W3SVC100
W3SVC102
W3SVC105
W3SVC106
W3SVC1108492480
W3SVC112
W3SVC116
W3SVC118
W3SVC1209046175
W3SVC123110214
W3SVC1262336480
W3SVC127
W3SVC134
W3SVC134239081
W3SVC137
W3SVC139
W3SVC145
W3SVC147
W3SVC1499983181
W3SVC15

如何在运行以下脚本时获得第一个结果 - 因此显示所有修改日期,上次写入时间等。我正在向用户输入一条消息,如果在日期范围内没有找到任何文件,则会显示一条消息 - 但是,如果它确实找到了任何文件,则显示它们在第一个输出类型中列出.......

我实际上认为错误是在这一行,但无法弄清楚如何修改:

if ( $runchilditem.lastwritetime -gt DateToCompare) 

......事实上 - 我想把输出变成CSV - 我有什么想法可以做到这一点?

CODE:

$path = Read-Host "Please enter the path of the folder yu wish to check - this will check sub-folders as well"
Write-Host "`n"
$days = Read-Host "Please enter in number of DAYS you wish to go back"

$DateToCompare = (Get-Date).AddDays(-$days)

$runningtrue = Get-ChildItem $path -Recurse | where-object {$_.lastwritetime -gt $DateToCompare}

Write-Host "`n"
$runchilditem = @(Get-ChildItem $path -Recurse)
    if ( $runchilditem.lastwritetime -gt DateToCompare) 
        {
            Write-Host "No Files Matching Date Criteria Found"
        }
    else
        {
            $runningtrue
        }

1 个答案:

答案 0 :(得分:1)

如果我理解你的需要,我就会这样做:

$path = Read-Host 'Path'
[int]$dayDiff = Read-Host 'Number of days to go back'
$offset = $dayDiff * -1
$files = Get-ChildItem $path -Recurse | Where-Object{$_.LastWriteTime -gt (Get-Date).AddDays($offset)}
if(($files.Count -eq 0) -OR ($files -eq $null)){
    'There are no files after {0} in {1}' -f (Get-Date).AddDays($offset), $path
}else{
    $files
    $files | Export-CSV C:\PATH\TO\FILE.csv -NoTypeInfo
}