Crie um arquivo de log no PowerShell para movimentação de arquivos

0

Gostaria que o script do PowerShell abaixo criasse um arquivo de log que contivesse informações sobre quantos arquivos foram movidos em cada pasta e a exceção de erro / código de manipulação no caso de falha no script para executar a reversão automaticamente.

Abaixo, o código é usado para mover arquivos de acordo com a data da última modificação e cria uma pasta no formato YYYYMM no mesmo caminho. Por exemplo, suponha que a data da última modificação do arquivo seja qualquer data de dez-2016, então ele moverá esse arquivo para a pasta 201612 depois de criar essa pasta e zipar a pasta e removê-la.

Preciso de ajuda para que esse código gere um arquivo de log com quantos arquivos foram movidos e, se o código falhar, ele deverá ser revertido.

Alguém por favor pode me ajudar com isso?

Param
(
    $FolderPath = "D:\newfolder\*.*",
    $ErrorActionPreference = "Stop"
)

$ChildItems = Get-ChildItem $FolderPath -Include *.txt,*.xml
$DestFolders = @()

foreach ($item in $ChildItems) {
    if ((($item.LastWriteTime).Month -ne (Get-Date).Month) -or (($item.LastWriteTime).Year -ne (Get-Date).Year)) {
        $FolderName = $(Get-Date $item.LastWriteTime -f "yyyyMM").ToString()
        $DestFolder = ($item.Directory.ToString() + "\" + $Foldername)
        $DestFolders += $DestFolder

        if (-not (Test-Path $DestFolder)) {
            try {
                New-Item $DestFolder -ItemType Directory -ErrorAction Stop
            } catch {
                throw $Error[0]    
            }
        }
        try {
            Move-Item $item -Destination $DestFolder -ErrorAction Stop
        } catch {
            throw $Error[0]
        }
    }
}

foreach ($item in ($DestFolders | Sort-Object | Get-Unique)) {
    try {
        Add-Type -Assembly System.IO.Compression.FileSystem
        $CompressLevel = [System.IO.Compression.CompressionLevel]::Optimal
        $SourceFolder = $item
        $DestFileName = ($item + ".zip")
        [System.IO.Compression.ZipFile]::CreateFromDirectory($SourceFolder, $DestFileName, $CompressLevel, $false)

        Remove-Item $SourceFolder -Recurse -ErrorAction Stop
    } catch {
        throw $Error[0]
    }
}
    
por Parth Mehta 17.03.2017 / 06:33

0 respostas