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に入れたい-これを行う方法はありますか?

コード:

$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
        }
4

1 に答える 1

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
}
于 2012-10-24T15:47:05.313 に答える