新手Powershell只是曾经屠杀现有的脚本或之前使用过bash。
我试图用一个标准列出所有目录,然后对其内容执行推荐。
基本上我想递归搜索所有名为Processed的目录,并在31天内删除所有项目。我所拥有的是以下命令:
$limit = (Get-Date).AddDays(-31)
$path = "C:\Users\mark.hodgson\Desktop\New folder"
$dirs = Get-ChildItem $path -Recurse -Directory| Where-Object {$_.PSIsContainer -eq $true -and $_.Name -match "Processed"} |select-object Fullname
当我回复$ dirs时,列表看起来很好,如下所示:
PS C:\Users\mark.hodgson\Desktop\New folder> echo $dirs
FullName
--------
C:\Users\mark.hodgson\Desktop\New folder\Folder1\FolderA\Processed
C:\Users\mark.hodgson\Desktop\New folder\Folder1\FolderB\Processed
C:\Users\mark.hodgson\Desktop\New folder\Folder2\Processed
C:\Users\mark.hodgson\Desktop\New folder\Folder3\Processed
C:\Users\mark.hodgson\Desktop\New folder\Folder4\Processed
C:\Users\mark.hodgson\Desktop\New folder\Folder5\Processed
但是当我尝试使用下面的项目,或者甚至只是做一个ls时,它会返回或删除桌面上的所有文件夹!!
$dirs | ForEach-Object { Get-ChildItem -Recurse -Force | Where-Object { !$_.PSIsContainer -eq $_.LastWriteTime -lt $limit } | Remove-Item -Force }
如果我在$ dirs中使用$ dir
我必须在这里弄错基础!我可以对路径进行硬编码,但我很乐意做好工作。
干杯,
hodgm
答案 0 :(得分:0)
您需要引用ForEach-Object
正文中的当前管道项:
$dirs | ForEach-Object { Get-ChildItem $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt $limit } | Remove-Item -Force }