2013-07-18 101 views
0

我正在編寫一個搜索網絡位置的Powershell腳本,並且如果該文件是在2011或2012年創建的,然後將文件名寫入日誌以及所有2011/12的總和創建的文件。使用_.LastWriteTime轉換日期的問題

我收到了一個異常,它試圖轉換文件創建的日期和時間並將其與我的日期範圍進行比較。

<#Checks one network location for files from 2011. 
gets the name of that file and adds to the count for 2011, then writes it to a log. 
Repeats for 2012.#> 
    New-Item c:\users\logs\yearLog.txt -type file -force 
    $path = "\\path" 
    $log = "c:\users\log" 
    $date2011 = "2011" 
    $date2012 = "2012" 
    write-progress -activity "Compiling Data" -status "Progress:" 
    $x = 0 
    "$date2011 files" | add-content $log 

    Get-Childitem -Path $path -Recurse | Where-Object {$_.LastWriteTime -gt (12/31/2010) -AND $_LastWriteTime -lt (01/01/2012) | 
    ForEach { 
     $filename = $_.fullname 
     $x++ 
     "$filename" | add-content $movelog 
    } 

    "$date2011 total files = $x" | add-content $log 
    $x = 0 
    "$date2012 files" | add-content $log 

    Get-Childitem -Path $path -Recurse | Where-Object {$_.LastWriteTime -gt (12/31/2011) -AND $_LastWriteTime -lt (01/01/2013) | 
    ForEach { 
     $filename = $_.fullname 
     $x++ 
     "$filename" | add-content $log 
    } 
    "$date2012 total files = $x" | add-content $log 
} 
} 
+1

用引號括起日期:*「12/31/2010」*。否則它會嘗試將12除以31,然後再減去2010。 –

+0

謝謝zespri。我應該抓到那個:)顯然,這不是我唯一的問題 –

+0

請發送例外文本請 –

回答

1

關鍵問題:Where子句中的括號不平衡並且管道已損壞。

附加修正:

  • 比較一年內直接既然你已經有了一個DateTime對象
  • 用於字符串格式化變量,當你開始使用索引
  • 使用-BEGIN條款在處理這只是更容易For each to initialize counter

無論如何,這裏是一個固定版本,轉換爲一個函數,以便您可以選擇任何路徑,年,並選擇日誌輸出文件夾

function YearLog { 
    param(
     [Parameter(Mandatory=$true)][String]$Path, 
     [Parameter(Mandatory=$true)][String]$LogFolder, 
     [Parameter(Mandatory=$true)][Int]$Year 
    ) 

    $log = '{0}\FileLog-{1}.txt' -f $LogFolder, $Year 

    if(Test-Path -Path:$log) { 
     Remove-Item -Force -Path:$log 
    } 

    'Files Found for {0}:' -f $Year | add-content $log 

    Get-Childitem -Path $Path -Recurse | 
     Where-Object { ($_.LastWriteTime.Year -gt ($Year-1)) -AND ($_.LastWriteTime.Year -lt ($Year+1)) } | 
     ForEach -Begin { $x = 0 } -Process { 
      $x++ | Out-Null 
      $_.FullName | add-content $log 
     } 

    'Total Found for {0}: {1}' -f $year, $x | add-content $log 
    'Log written for items in {0} for {1}: {2}' -f $Path, $Year, $log | Write-Host 
} 

<# Usage:  
    YearLog -Path:$ENV:ProgramFiles -LogFolder:$ENV:TEMP -Year:2012 
#> 
+0

非常有幫助,謝謝,以所有貢獻者! –