Я пытаюсь написать следующий скрипт, который проверяет папку для набора файлов, если они существуют, переместите их в папку «архив». Если они этого не делают, напишите сообщение об ошибке на экран и в файл журнала.else не выполняется в пределах foreach
Файлы перемещаются в порядке, поэтому первая часть IF работает правильно, но если нет файлов для перемещения, другое должно вставлять и выводить ошибку .... но это не так.
variables.ps1:
#----- define parameters -----#
#----- Treat All Errors as Terminating -----#
$ErrorActionPreference = "Stop"
#----- Set count to 0 -----#
$count = 0
#----- get current date ----#
$Now = Get-Date
#----- define amount of days ----#
$Days = "0"
#----- define folder where files are located ----#
$SourceFolder = "C:\HG1\Test\Files"
#----- define folder where files are to be moved to ----#
$DestFolder = "C:\HG1\Test\Files\Archive"
#----- define folder where files are to be moved to ----#
$LogPath = "C:\HG1\archive.log"
#----- define extension ----#
$Extension = "*.log"
#----- define LastWriteTime parameter based on $Days ---#
$LastWrite = $Now.AddDays(-$Days)
#----- get files based on lastwrite filter and specified folder ---#
$Files = Get-Childitem $SourceFolder -Include $Extension -Recurse | Where {$_.LastWriteTime -le "$LastWrite"}
archive_files.ps1
#----- Call variables file variables.ps1 - MUST BE IN SAME LOCATION AS SCRIPT ----#
. ./variables.ps1
foreach ($File in $Files)
{
if ($File -ne $NULL)
{
move-item -path $File.FullName -destination $DestFolder
Add-Content $LogPath -value ("$((Get-Date).ToString('yyyy-MM-dd HH:mm:ss')) `t INFO: Archived File $File")
}
else
{
write-host "ERROR: No files to archive" -ForegroundColor "Red"
Add-Content $LogPath -value ("$((Get-Date).ToString('yyyy-MM-dd HH:mm:ss')) `t ERROR: No files to archive")
}
}
Add-Content $LogPath -value ("$((Get-Date).ToString('yyyy-MM-dd HH:mm:ss')) `t INFO: ***Archiving script completed successfully***")
Любая помощь будет принята с благодарностью.
'$ File 'никогда не будет нулевым, по крайней мере, это будет строка. Вы можете проверить существующие файлы с помощью 'Test-Path', как показано в этом вопросе: http://stackoverflow.com/questions/1732250/check-if-file-exist-and-run-a-batch-file-in -powershell –
Если в '$ Files' нет файлов, тогда' foreach' просто пропускается. 'Else' никогда не должен запускаться с вашим кодом. – Enigmativity
Хотите ли вы изучить все подпапки '$ sourcefolder' и выполнить действие в этих папках на основе наличия файлов .log? – Matt