powershell - 如何限制递归详细输出?
问题描述
我有以下脚本可以删除与名称匹配的文件和任何文件夹。需要递归以避免确认提示。
Invoke-Command -Computer $Server -ScriptBlock {
param ($dir, $name)
$f = Get-ChildItem -Path $dir | Where {$_.Name -Match "$name"}
If ($f) {
$f | Foreach {
Remove-Item $_.fullname -confirm:$false -Recurse -Verbose
}
}
else {
Write-Verbose "No file found"
}
} -ArgumentList $Directory, $DB
我收到大量冗长的消息,其中每一项都说
详细:对目标 \name1\subitem 执行“删除目录”操作
详细:对目标 \name1\subitem1 执行“删除目录”操作
详细:对目标 \name1\subitem2 执行“删除目录”操作
详细:对目标 \name1.db 执行“删除目录”操作
我可以让它只在文件夹级别打印详细信息,而不是为每个子项打印吗?基本上我只想要这样的输出:
详细:对目标 \name1 执行“删除目录”操作
详细:对目标 \name1.db 执行“删除目录”操作
解决方案
添加-Verbose
到Remove-Item
将始终导致它列出它正在删除的每个项目(即,这是详细输出的重点。它是一个打开或关闭的消防水带)。
如果您愿意,不一定要减少日志记录,而是过滤日志记录,那么唯一真正的选择是删除-Verbose
并自己做。
例如:
Invoke-Command -Computer $Server -ScriptBlock {
param ($dir, $name)
$f = Get-ChildItem -Path $dir | Where {$_.Name -Match "$name"}
If ($f) {
$f | Foreach {
#Check to see if it is a folder
if($_.PSIsContainer)
{
Write-Host "Removing Directory: $($_.FullName)"
}
Remove-Item $_.fullname -confirm:$false -Recurse
}
}
else {
Write-Verbose "No file found"
}
} -ArgumentList $Directory, $DB
推荐阅读
- c++ - 预提交时cpp中的memleak
- ruby-on-rails - 如何为 API 版本化模型验证?
- amazon-ec2 - 设置 Github 操作以在 EC2 上构建和部署 java 代码
- java - 为什么我不能从本地存储库导入 maven jar?
- tensorflow - Rasa 训练数据集
- javafx - JavaFX:标签与文本布局的区别
- javascript - JS 代码只在第一组文本的范围内换行,其余的不换行
- swiftui - 如何在 Swift 中理解这种语法 (a ? b ? c : d : c)
- c# - 使用 C# 运行带有关键字 GO 的 .sql 语句?
- apache-spark - 如果在 S3 的镶木地板文件中发现同一列的数据类型不同,AWS Glue 作业会在 Redshift 中创建新列