gpt4 book ai didi

powershell - 我需要我的脚本在 -Whatif 输出中包含 "LastWriteTime"属性

转载 作者:行者123 更新时间:2023-12-04 00:51:32 24 4
gpt4 key购买 nike

我需要编辑我在此处找到的脚本,以便我可以首先看到它将删除的文件的报告,包括文件名和路径以及“LastWriteTime”属性,以便我可以分析脚本的输出在执行之前和我将其配置为计划任务之前的几个月:

我已经尝试使用 LastWriteTime 对象属性一段时间了,但我不知道还能做什么..

代码如下:

$limit = (Get-Date).AddDays(-30)

$del30 = "D:\contoso_ftp\users"

$ignore = Get-Content "C:\Users\username\Documents\Scripts\ignorelist.txt"

Get-ChildItem $del30 -Recurse |

Where-Object {$_.LastWriteTime -lt $limit } |

Select-Object -ExpandProperty FullName |

Select-String -SimpleMatch -Pattern $ignore -NotMatch |

Select-Object -ExpandProperty Line |

Remove-Item -Recurse -WhatIf

到目前为止,这是 -Whatif 输出的样子:

假设:在目标“D:\contoso_ftp\users\ftp-contosoaccount\contoso Downloads\contosofile.zip”上执行“删除文件”操作。

所以..如您所见,我需要能够在其中获取“LastWriteTime”属性。

非常感谢对文章或文档的任何帮助或指示。

提前致谢

//伦纳特

最佳答案

当使用 -WhatIf 运行时,您不能修改 Remove-Item 的输出,但您可以将管道包装在支持 -WhatIf< 的函数中 并提供自己定制的 -WhatIf 输出:

function Test-Something {
[CmdletBinding(SupportsShouldProcess)] # This enables -WhatIf processing
param (
[string] $path,
[datetime] $limit,
[string] $ignore
)

Get-ChildItem $path -Recurse |

Where-Object { $_.LastWriteTime -lt $limit } |

Select-Object -ExpandProperty FullName |

Select-String -SimpleMatch -Pattern $ignore -NotMatch |

Select-Object -ExpandProperty Line |

Get-ChildItem -Recurse | ForEach-Object {

# If -WhatIf is passed, output the message and skip the deletion.
# Else enter the if-block and delete the file.
if( $PSCmdlet.ShouldProcess(
"Performing the operation `"Remove File`" on target `"$_`" (LastWriteTime: $($_.LastWriteTime))",
"Are you sure you want to delete file `"$_`" ?",
"Confirm" ) ) {

Remove-Item $_
}
}
}

请注意,我不必在函数中定义 -WhatIf 参数,因为它是通过指定 SupportsShouldProcess 自动添加的。现在您可以将 -WhatIf 传递给您的函数以进行空运行:

Test-Something $del30 $limit $ignore -WhatIf

示例输出:

What if: Performing the operation "Remove File" on target "C:\test\file1.txt" (LastWriteTime: 12/30/2020 19:47:10)
What if: Performing the operation "Remove File" on target "C:\test\file2.txt" (LastWriteTime: 01/12/2021 00:59:59)

我用过 $PSCmdlet.ShouldProcess overload它采用三个参数来提供详细的 -WhatIf 消息。其他两个参数为相关的 -Confirm 参数提供消息和标题,该函数也支持:

Test-Something $del30 $limit $ignore -Confirm

现在 PowerShell 在删除前会询问:

Confirm
Are you sure you want to delete file "C:\test\file1.txt" ?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Yes"):

您免费获得的另一个很酷的功能是详细输出。当您使用 -Verbose 调用函数时,提供给 $PSCmdlet.ShouldProcess() 的消息将用作详细输出:

Test-Something $del30 $limit $ignore -Verbose

输出:

VERBOSE: Performing the operation "Remove File" on target "C:\test\file1.txt" (LastWriteTime: 12/30/2020 19:47:10)
VERBOSE: Performing the operation "Remove File" on target "C:\test\file2.txt" (LastWriteTime: 01/12/2021 00:59:59)

进一步阅读:Everything you wanted to know about ShouldProcess

关于powershell - 我需要我的脚本在 -Whatif 输出中包含 "LastWriteTime"属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66092498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com