Powershell, исключая только файлы - PullRequest
1 голос
/ 22 января 2020

У меня следующая ошибка при запуске скрипта в powershell в версии 5.1

Ниже моего простого скрипта для удаления файлов в течение 180 дней, я пробовал некоторые решения, но я не нашел, что может быть ошибка. ( Ниже приведена ошибка, переведенная с португальского на английский язык sh)

"Out-File: невозможно проверить аргумент в параметре 'Кодировка'." Files \ DeleteLogFile_21_01_2020. log "аргумент не принадлежит множеству" unknown; строка; юникода; bigendianunicode; utf8; UTF7; UTF32; ASCII; дефолт; oem ", определенный атрибутом ValidateSet. Укажите аргумент, который есть в наборе, и повторите команду. В строке: 1 символ: 36 + $ Log | Out-File -Append D: \ Program files \ DeleteLogFile_ $ LogDate.log + ~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo: InvalidData: (:) [Out-File], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationError, Microsoft .PowerShell.Commands.OutFileCommand "

$logPath = "D:\Program files\NICE Systems\Logs"
$nDays = 10
$startTime = Get-Date
$Extensions = "*.*"
$LogDate = (Get-Date).ToString("dd_MM_yyyy")
$Files = Get-Childitem $LogPath -Include $Extensions -Recurse | Where-Object {$_.LastWriteTime -le (Get-Date).AddDays(-$nDays)}
foreach ($File in $Files) 
{
    if ($NULL -ne $File )
    {
        $Log = "`nData e Hora da Deleção: " + $startTime + ". O arquivo " + $File + " foi deletado do sistema."
        $Log | Out-File -Append D:\Program files\DeleteLogFile_$LogDate.log
        Remove-Item $File.FullName | out-null
    }
}

Ответы [ 2 ]

2 голосов
/ 22 января 2020

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

$Log | Out-File -Append "D:\Program files\DeleteLogFile_$LogDate.log"

По умолчанию windows также не позволит вам записывать в папку программных файлов, и это, как правило, не очень хорошая практика.

1 голос
/ 22 января 2020

В строке Out-File ваш путь содержит пробел и не заключен в кавычки. В PowerShell и большинстве языков сценариев вы должны учитывать Позиционные параметры . Предполагается, что любой пробел, который не находится в строке или за которым не следует / не предшествует параметр (например, -FileName C:\FileName.txt), предшествует позиционному параметру.

При этом он пытается использовать «D: \ Program» в качестве пути и «files \ DeleteLogFile_ $ LogDate.log» в качестве типа кодировки, что явно недопустимо. Чтобы это исправить, просто сделайте путь строкой, поставив его в кавычки, например:

$Log | Out-File -Append "D:\Program files\DeleteLogFile_$LogDate.log"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...