Как исправить рабочий скрипт, чтобы можно было использовать его в нескольких каталогах? - PullRequest
0 голосов
/ 27 марта 2019

Позвольте мне начать с того, что это место - отличный ресурс, и оно помогло мне разработать хорошо работающий сценарий, я стремлюсь его расширить и у меня возникают некоторые проблемы с этим.

Итак, в принципе, я могу организовать каталог с файлами журналов в несколько каталогов на основе года и месяца в течение этих лет.Я могу сделать это, когда я указываю на каталог этих каталогов.

Я хотел бы применить эти сценарии к нескольким каталогам, в основном к сотням журналов в (каждом) нескольких каталогах, но ко всем этим каталогам в одном главном каталоге.

Я пытался применить сценарий с помощью командлета foreach, но, похоже, он не работает.

#--------
# Creation of an "Archive" folder within the root directory of the targeted dir.
# Comments: Archives Folder is created in each targeted directory.
#--------

foreach($folder in (Get-ChildItem '\\drive\software\logstoreage    \directories' -Directory)){
    New-Item -ItemType directory -Path ($folder.fullname+"\Archive")
}

#--------
# Organization of Logs into Yearly and Monthly directories.  
# Comments: Folders are created based on the Year capturing logs through the end of 2018. 
#--------

$date = (Get-Date -Month 1 -Day 1 -Year 2019).ToString("01-01-2019")

$files = Get-ChildItem '\\drive\software\logstoreage\directories\SoftwareA' -Recurse | where {$_.lastwritetime -lt $date -and !$_.PsIsContainer} 

$files

$targetPath = '\\drive\software\logstoreage\directories\SoftwareA\Archive'

foreach ($file in $files){
    $year = $file.LastWriteTime.Year.ToString()
    $month = $file.LastWriteTime.Month.ToString()

    $file.Name
    $year
    $month

    $Directory = $targetPath + "\" + $year + "\" + $month

    if (!(Test-Path $Directory)){
        New-Item $directory -type directory
    }

    $file | Move-Item -Destination $Directory
}

1 Ответ

0 голосов
/ 28 марта 2019

Итак, у вас есть цикл для получения всех целевых папок, вам просто нужно включить оставшуюся часть вашего скрипта в этот цикл и сделать несколько модификаций, основываясь на том, что он находится внутри цикла.

foreach($folder in (Get-ChildItem '\\drive\software\logstoreage\directories' -Directory)){
    #--------
    # Creation of an "Archive" folder within the root directory of the targeted dir.
    # Comments: Archives Folder is created in each targeted directory.
    #--------
    $ArchiveFolder = New-Item -ItemType directory -Path ($folder.fullname+"\Archive") -Force


    #--------
    # Organization of Logs into Yearly and Monthly directories.  
    # Comments: Folders are created based on the Year capturing logs through the end of 2018. 
    #--------

    $date = Get-Date -Month 1 -Day 1 -Year 2019

    $files = Get-ChildItem $folder -Recurse -File | where {$_.lastwritetime -lt $date -and !$_.PsIsContainer} 

    $files

    $targetPath = $ArchiveFolder.FullName

    foreach ($file in $files){
        $year = $file.LastWriteTime.Year.ToString()
        $month = $file.LastWriteTime.Month.ToString()

        $file.Name
        $year
        $month

        $Directory = $targetPath + "\" + $year + "\" + $month

        if (!(Test-Path $Directory)){
            New-Item $directory -type directory
        }

        $file | Move-Item -Destination $Directory
    }
}
...