【问题标题】:WindowsPower shell script not working as expectingWindowsPower shell 脚本没有按预期工作
【发布时间】:2019-06-16 02:34:21
【问题描述】:

大家好,我有脚本需要删除早于 90 天的文件。问题是没有时间计算 90 天的脚本工作正常。如果我们添加何时条件来检查时间框架,例如:90 天它不起作用。

我有特定的文件夹,其中包含脚本下面的子文件夹,不删除子文件夹脚本下的文件删除文件只指定文件夹它删除子文件夹文件。

我们有要求的 power shell 脚本,它应该删除超过 90 天的文件,它还应该删除子文件夹下的文件。

任何人都可以建议对以下脚本进行任何更改

Get-ChildItem -Path "D:\samples\" -Include *.* -Recurse -Force | where CreationTime -lt (Get-Date).AddDays(-10) | foreach {$_.Delete()}

【问题讨论】:

  • 输入Get-ChildItem -Path "D:\samples\" -Include *.* -Recurse -Force | where {$_.CreationTime -lt (Get-Date).AddDays(-10)}时有没有输出?您应该获取所有超过 10 天的文件...
  • 我没有看到任何输出。文件夹 D:\samples\test 有大约 60 个文件,具有不同类型的扩展名,如 XML、.log 等,几乎所有文件都是旧文件。
  • | where {$_.CreationTime -gt (Get-Date).AddDays(-10)}一起使用怎么样? -gt 应使其显示过去 10 天内创建的所有文件。

标签: shell powershell powershell-2.0 powershell-3.0


【解决方案1】:

您的| where 需要大括号{}。该对象由$_ 引用。使用它,您的代码将如下所示:

Get-ChildItem -Path "D:\samples\" -file -Recurse -Force | where {$_.CreationTime -lt (Get-Date).AddDays(-10)} | foreach {$_.Delete()}

注意:我将 -Include "." 替换为 -file 以包含所有文件。这需要至少 3.0 版的 powershell。使用$Host检查版本

【讨论】:

  • 嗨,不删除任何文件,运气不好:(
  • Get-ChildItem -Path "D:\samples\test" -file -Recurse -Force |其中 {$_.CreationTime -lt (Get-Date).AddDays(-5)} | foreach {$_.Delete()} 我也试过上面的脚本,但没有工作该文件夹包含不同类型的文件,如 .log、.txt 等,但没有删除文件
【解决方案2】:

您对几个 powershell 标签(通常相互排斥)的使用不明确,
如果您想确保脚本在 PSv2 下可运行,请仅使用该标签。

Remove-Item cmdlet 直接接受管道输入,因此我将使用它而不是 ForEach-Object 和对象 .delete() 方法。

-File 参数需要 PSv3+ ,替代方法是检查 (not=!) $_.PSIsContainer

该脚本在 IMO 中更易于阅读 PowerShell 需要继续和缩进的断行:

## Q:\Test\2019\01\22\SO_54311383.ps1
$BasePath = "D:\samples\*"
$Treshold = (Get-Date).Date.AddDays(-10)

Get-ChildItem -Path $BasePath -Recurse -Force |
    Where-Object {!$_.PSIsContainer -and
                  $_.CreationTime -lt $Treshold} |
        Remove-Item  -WhatIf # -Force

如果输出正常,请删除最后一行中的-WhatIf
最终需要的 -Force 参数暂时被注释掉。

【讨论】:

  • 您好感谢您的快速回复我尝试了上面的脚本它没有删除文件我尝试更改路径给子文件夹但没有删除任何文件
  • 嗨,如果我用同一个文件夹多次测试它不会删除文件,我发现了一件事。假设如果我使用相同的文件夹来测试脚本,如果我给出其他路径,它不会删除文件,它的工作正常似乎一些脚本持有缓存内存,我们可以对此进行任何修复。因为如果我在 DEV 或 SIT 中实时输入,那将不会因为我们每天触发的路径相同,所以如果有任何解决办法,请提前告诉我谢谢
猜你喜欢
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 2012-02-06
相关资源
最近更新 更多