Powershell 将删除的文件记录到文本文件中

Powershell 将删除的文件记录到文本文件中,powershell,Powershell,我想知道如何将此脚本中的操作记录到文本文件中,因为我不知道如何执行此操作,因为cmdletStart-Transcript对我不起作用,而且我无法在Internet上找到解决方案 问题是Where-Objectcmdlet不会输出Get-ChildItem捕获的任何内容 有人有解决这个问题的好办法吗 $limit = (Get-Date).AddDays(-30) $path = Split-Path -Parent $MyInvocation.MyCommand.Definition Ge

我想知道如何将此脚本中的操作记录到文本文件中,因为我不知道如何执行此操作,因为cmdlet
Start-Transcript
对我不起作用,而且我无法在Internet上找到解决方案

问题是
Where-Object
cmdlet不会输出
Get-ChildItem
捕获的任何内容

有人有解决这个问题的好办法吗

$limit = (Get-Date).AddDays(-30)  
$path = Split-Path -Parent $MyInvocation.MyCommand.Definition
Get-ChildItem -Path $path -Recurse -Force | Where-Object {
    !$_.PSIsContainer -and
    $_.LastWriteTime -lt $limit
} | Remove-Item -Force

Get-ChildItem -Path $path -Recurse -Force | Where-Object {
    $_.PSIsContainer -and
    (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object {
        !$_.PSIsContainer
    }) -eq $null
} | Remove-Item -Force -Recurse
你好,先生

您可以使用几种不同的方法

  • Tee对象
    =将流分叉到文件
  • -PipelineVariable
    =在变量中累积信息
  • 使用循环=将日志放入其中的文件步骤
  • 将每个对象的
    放入管道
    它既可以记录您的信息,也可以执行
    删除项
循环是最容易理解的。[grin]但是,如果要将其保留在管道中,可以在
where Object
脚本块所在的位置添加一个
ForEach Object
,并将筛选测试和各种操作都放在该块中

保重,
李先生你好

您可以使用几种不同的方法

  • Tee对象
    =将流分叉到文件
  • -PipelineVariable
    =在变量中累积信息
  • 使用循环=将日志放入其中的文件步骤
  • 将每个对象的
    放入管道
    它既可以记录您的信息,也可以执行
    删除项
循环是最容易理解的。[grin]但是,如果要将其保留在管道中,可以在
where Object
脚本块所在的位置添加一个
ForEach Object
,并将筛选测试和各种操作都放在该块中

保重,

试试这样的

$limit = (Get-Date).AddDays(-30)  
$path =Split-Path -Parent $MyInvocation.MyCommand.Definition

Get-ChildItem $path -file -recurse -force | where LastWriteTime -lt $limit | 
        Tee-Object -FilePath "c:\temp\deleted.txt"  -Append | Remove-Item

Get-ChildItem $path -directory | 
    where {(Get-ChildItem $_.FullName -file -Recurse | select -First 1) -eq $null} | 
        Tee-Object -FilePath "c:\temp\deleted.txt" -Append | Remove-Item

试试这样的

$limit = (Get-Date).AddDays(-30)  
$path =Split-Path -Parent $MyInvocation.MyCommand.Definition

Get-ChildItem $path -file -recurse -force | where LastWriteTime -lt $limit | 
        Tee-Object -FilePath "c:\temp\deleted.txt"  -Append | Remove-Item

Get-ChildItem $path -directory | 
    where {(Get-ChildItem $_.FullName -file -Recurse | select -First 1) -eq $null} | 
        Tee-Object -FilePath "c:\temp\deleted.txt" -Append | Remove-Item

当您尝试使用Start Transcript时会发生什么情况?他们仍然需要将
-Verbose
添加到
删除项
。否则,他们必须在循环中运行
删除项
,并分别记录每次成功删除。Start-Transcript仅显示日期和命令操作应在的空白部分,据我所知,Start Transcript仅显示用户在控制台中键入的命令的操作。当您尝试使用Start Transcript时会发生什么情况?他们仍然需要将
-Verbose
添加到
删除项
。否则,他们必须在循环中运行
删除项
,并分别记录每次成功删除。Start-Transcript仅显示日期和命令操作应在的空白部分,据我所知,Start Transcript仅显示用户在控制台中键入的命令的操作。问题是,
其中object
不给我任何输出,我无法在控制台上显示此cmdlet的任何结果、将其保存为字符串或将其任何内容写入文本文件。我想没有办法避免
where object
,因为
Get ChildItem
filter
参数只对字符串有效。(我不熟悉Powershell脚本,所以我还不了解所有内容。)@error666-因此,将整个
Where对象
替换为
ForEach对象
,并将测试放在其中。一个IF将完成这项工作。[grin]然后将要删除的项目名称保存到日志文件中。最后,删除该文件。在
ForEach Object
块中执行所有这些操作。问题是
如果Object
不给我任何输出,我就无法在控制台上显示此cmdlet的任何结果、将其保存到字符串或将其任何内容写入文本文件。我想没有办法避免
where object
,因为
Get ChildItem
filter
参数只对字符串有效。(我不熟悉Powershell脚本,所以我还不了解所有内容。)@error666-因此,将整个
Where对象
替换为
ForEach对象
,并将测试放在其中。一个IF将完成这项工作。[grin]然后将要删除的项目名称保存到日志文件中。最后,删除该文件。在
ForEach对象
块中执行所有这些操作。