WindowsPower shell脚本未按预期工作

WindowsPower shell脚本未按预期工作,shell,powershell,powershell-2.0,powershell-3.0,Shell,Powershell,Powershell 2.0,Powershell 3.0,大家好,我有一个脚本,它需要删除90天以前的文件。问题是90天脚本没有时间计算工作正常。如果我们添加时间条件来检查时间范围,例如:90天,它不工作 我有一个特定的文件夹,其中包含子文件夹下面的脚本不删除子文件夹下面的文件脚本删除文件只指定文件夹其删除子文件夹文件 我们有一个requirementpowershell脚本,它应该删除90天以前的文件,还应该删除子文件夹下的文件 有人能建议对下面的脚本做些什么更改吗 Get-ChildItem -Path "D:\samples\" -Include

大家好,我有一个脚本,它需要删除90天以前的文件。问题是90天脚本没有时间计算工作正常。如果我们添加时间条件来检查时间范围,例如:90天,它不工作

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

我们有一个requirementpowershell脚本,它应该删除90天以前的文件,还应该删除子文件夹下的文件

有人能建议对下面的脚本做些什么更改吗

Get-ChildItem -Path "D:\samples\" -Include *.* -Recurse -Force | where CreationTime -lt (Get-Date).AddDays(-10) | foreach {$_.Delete()}
你的| where需要花括号{}。该对象由$\引用。使用该选项,您的代码将如下所示:

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

注:我已替换-包括。使用-file包含所有文件。这至少需要3.0版本的powershell。检查带有$Host的版本

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

Remove-Item cmdlet直接接受管道输入,因此我将使用它代替ForEach对象和objects.delete方法

-File参数需要PSv3+,另一种方法是检查not=!$\。心灵容器

在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中放入实时,它将不会因为我们将有相同的每日触发器路径,所以如果有任何修复,请提前告诉我谢谢Hi,没有运气不删除任何文件:Get ChildItem-path D:\samples\test-file-Recurse-Force | where{$\ CreationTime-lt Get Date.AddDays-5}}foreach{$\删除}我也尝试了上面的脚本,但没有工作。该文件夹包含不同类型的文件,如.log、.txt等,但没有删除任何文件。当您输入Get ChildItem-Path D:\samples \-Include*.*-Recurse-Force | where{$\.CreationTime-lt Get Date.AddDays-10}时,您是否可以获得任何输出?你应该得到每一个超过10天的文件…我看不到任何输出。文件夹D:\samples\test有大约60个文件,具有不同类型的扩展名,如XML、.log等,几乎所有的文件都是旧文件。将其与| where{$\ uu.CreationTime-gt get Date.AddDays-10}一起使用如何?gt应该使它显示过去10天内创建的所有文件。