PowerShell脚本不会从变量

时间:2018-09-12 09:35:27

标签: powershell logging move

最近,我正在尝试一些更高级的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 :(得分:1)

之所以出现此问题,是因为您在生成| 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不会产生任何输出。