Экспорт объекта и строк в CSV с помощью Powershell - PullRequest
0 голосов
/ 10 января 2019

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

Все работает, кроме проблем с журналом. Я хочу, чтобы журнал был в формате CSV и там было 3 столбца: успех / неудача, от местоположения и до местоположения. Это выводит все результаты в строки с одним столбцом.

Я пробовал параметр Export-Csv, но он ищет объекты / свойства, поэтому отображает только длину (у меня тоже есть строки). Адд-контент работает, но есть только один столбец. Какие-либо предложения?

#LOCATION OF CSV
$csv = Import-Csv C:\test2.csv
#SPECIFY DATE     (EXAMPLE-DELETE FILES > 7 YEARS.  7 YEARS=2555 DAYS SO YOU WOULD ENTER "-2555" BELOW)
$Daysback = "-1"
#FILE DESTINATION
$storagedestination = "C:\Users\mark\Documents\Test2"
#LOG LOCATION
$loglocation = "C:\Users\mark\Documents\filetransferlog.csv"
$s = "SUCCESS"
$f = "FAIL"


$CurrentDate = Get-Date
foreach ($line in $csv) {
    $Path = $line | Select-Object -ExpandProperty FullName
    $DatetoDelete = $CurrentDate.AddDays($DaysBack)

    $objects = Get-ChildItem $Path -Recurse | Select-Object FullName, CreationTime, LastWriteTime, LastAccessTime | Where-Object { $_.LastWriteTime -lt $DatetoDelete } 

    foreach ($object in $objects) {
        try 
        {
            $sourceRoot = $object | Select-Object -ExpandProperty FullName
            Copy-Item -Path $sourceRoot -Recurse -Destination $storagedestination 
            Remove-Item -Path $sourceRoot -Force -Recurse
            $temp = $s, $sourceRoot, $storagedestination
            $temp | add-content $loglocation
        }
        catch
        {
            $temp2 = $f, $sourceRoot, $storagedestination
            $temp2 | add-content $loglocation
        }
    }
}

1 Ответ

0 голосов
/ 10 января 2019

Все ваши | Select-Object -ExpandProperty лишние, просто прикрепите имя свойства к имени переменной => $Path = $line.FullName
Зачем каждый раз вычислять $DatetoDelete внутри foreach?
Выведите успех / неудачу в [PSCustomObject] и соберите их в переменную, назначенную непосредственно foreach.

Непроверенные:

$csv = Import-Csv C:\test2.csv  
$Daysback = "-1"                
$destination = "C:\Users\mark\Documents\Test2"
$loglocation = "C:\Users\mark\Documents\filetransferlog.csv"
$s = "SUCCESS"
$f = "FAIL"

$CurrentDate  = Get-Date
$DatetoDelete = $CurrentDate.Date.AddDays($DaysBack)

$Log = foreach ($line in $csv) {
    $objects = Get-ChildItem $line.FullName -Rec | 
        Where-Object LastWriteTime -lt $DatetoDelete
    foreach ($object in $objects) {
        $Result = $s
        $sourceRoot = $object.FullName
        try {
            Copy-Item   -Path $sourceRoot -Recurse -Destination $destination 
            Remove-Item -Path $sourceRoot -Recurse -Force
        } catch {
            $Result = $f
        }
        [PSCustomObject]@{
            'Success/Fail' = $Result
            Source         = $sourceRoot
            Destination    = $destination
        }
    }
}
$Log | Export-Csv $loglocation -NoTypeInformation
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...