Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Powershell删除数百万个日志文件_Powershell - Fatal编程技术网

使用Powershell删除数百万个日志文件

使用Powershell删除数百万个日志文件,powershell,Powershell,在旧服务器上,我们有数百万个日志文件。这些日志文件是我们正在运行的集成框架的一部分,该框架从未被清理过。大约有180万个XML日志文件分布在3000多个目录中 文件夹具有以下结构: D:\ProgramFiles\\\Environment\\\\XmlLogs\\logname.xml 示例: D:\Program Files\Company\Company Integration 4.5.5\Environment\Company A\GenericEmailer\Release1.0.0.

在旧服务器上,我们有数百万个日志文件。这些日志文件是我们正在运行的集成框架的一部分,该框架从未被清理过。大约有180万个XML日志文件分布在3000多个目录中

文件夹具有以下结构:

D:\ProgramFiles\\\Environment\\\\XmlLogs\\logname.xml

示例:

D:\Program Files\Company\Company Integration 4.5.5\Environment\Company A\GenericEmailer\Release1.0.0.I1\XmlLogs\01-01-2014\logname.xml

D:\Program Files\Company\Company Integration 4.5.6\Environment\Company B\GlobalEmailer\Release1.2.3.I2\XmlLogs\01-01-2019\logname.xml

我的计划是搜索所有XmlLogs目录并清空这些目录,但每当我执行Get ChildItem时,整个服务器都会冻结,并且永远不会输出结果

Get ChildItem-目录“D:\Program Files\Company\Company Integration 4.5.6\Environment\Company A\”-递归-名称-包括“XmlLogs”

执行此操作并删除所有日志文件的正确方法是什么

可能您可以尝试这样做(根据需要修改类似内容或使用-match操作符+regex表达式)

注1:要真正删除,必须在我的示例中删除“-whatif”选项


注2:为了获得更好的性能,如果公司名称不变,您可以使用“D:\Program Files\Company”。

除非您要保留其他XML文件,否则您可以尝试
Get ChildItem'D:\…\Company A'-Filter*.XML-Recurse-Force
@AnsgarWiechers抱歉,我忘了提到.xml文件也用作配置文件。所以我认为这不管用。无论如何,谢谢你的建议!然后,您需要提供更多用于识别文件的标准。它们总是被命名为“logname.xml”,还是在您的问题中只是一个占位符名称?它们是否总是存储在子文件夹树“XmlLogs\####-##-#####-##”中?听起来像是
Get ChildItem
-Recurse
开关正忙于遍历整个文件夹结构,这可能会影响“旧”服务器上的磁盘性能。您可以尝试添加
-Depth 1
,这样它就不需要查看所有的日期子文件夹就可以找到您的“XmlLogs”文件夹(或者可能是
-Depth 2
-尝试一下!)
Get-ChildItem "C:\Program Files" -directory -recurse | % {

  if ($_.fullname -like '*\XmlLogs\*')
  {
    Get-ChildItem $_.FullName -Recurse -file -filter "*.xml" | Remove-Item -Force -WhatIf
  }

}