Скрипт PowerShell не перемещает элементы из переменной - PullRequest
0 голосов
/ 12 сентября 2018

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

Вот код на данный момент:

$OriginPath = "D:\test\files"
$DestinationPath = "D:\test\test"
$MoveNr = "16"
$MoveFiles = ""
$LogFile = "D:\test\files\Move-Log.log"
$TimeStamp = Get-Date -Format "dd-MM-yyyy_hh-mm-ss"

# Check if Destination folder is empty.
if ((Get-ChildItem $DestinationPath -Filter *.uni | Measure-Object).Count -eq 0) {
    # Folder is Empty
    echo 'Moved ' $TimeStamp >> $LogFile
    Write-Warning "Files are moving, one moment"
    $MoveFiles = Get-ChildItem $OriginPath -Filter *.uni |
                 Sort -Property LastWriteTime |
                 Select -First $MoveNr |
                 Out-File $LogFile
    ForEach-Object $MoveFiles | Move-Item -Path $OriginPath -Destination $DestinationPath >> $LogFile
} else {
    # Folder is not empty
    Write-Warning "Folder not empty!"
}
Write-Warning "Now back to work!"

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

1 Ответ

0 голосов
/ 12 сентября 2018

Проблема возникает из-за того, что вы использовали | Out-File в конце строки, которая генерирует коллекцию файлов в $MoveFiles.Поскольку Out-File не создает выходных данных объекта, эта переменная не заполняется.

Сделайте это вместо этого:

$MoveFiles = Get-ChildItem $OriginPath -Filter *.uni |
             Sort -Property LastWriteTime |
             Select -First $MoveNr
$MoveFiles | Out-File $LogFile

Вам также, вероятно, не нужен ForEach-Object в строке послеэто (и его использование недопустимо), и вы не должны объявлять -Path в Move-Item, потому что это исходит из конвейера.Например:

$MoveFiles | Move-Item -Destination $DestinationPath

Должно работать.

Здесь >> $LogFile может быть избыточным, поскольку Move-Item не генерирует никакого вывода.

...