开发者问题收集

powershell不包括文件

2020-01-22
80

我在 5.1 版的 powershell 中运行脚本时出现以下错误

下面是我的简单脚本,用于删除超过 180 天的文件,我尝试了一些解决方案,但我没有发现可能是什么错误。 ( 以下错误从葡萄牙语翻译成英语

“Out-File:无法验证‘Encoding’参数中的参数。 “files\DeleteLogFile_21_01_2020.log”参数不属于集合“未知;字符串;unicode;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个回答

您的日志文件路径没有引号,因此它会在第一个空格处将其截断。您可以使用双引号,变量仍会展开。单引号则不会。

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

默认情况下,Windows 也不允许您写入程序文件文件夹,这通常不是好的做法。

CM42
2020-01-22

Out-File 行中,路径中有一个空格,并且没有用引号括起来。在 PowerShell 以及大多数脚本语言中,您必须考虑 位置参数 。任何不在字符串中或后面没有参数/前面没有参数的空格(例如 -FileName C:\FileName.txt )都将被视为位于位置参数之前。

话虽如此,它试图使用“D:\Program”作为路径,使用“files\DeleteLogFile_$LogDate.log”作为编码类型,这显然是无效的。要解决此问题,只需将路径放在引号中,使其成为字符串,如下所示:

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