pitster
asked on
Simple powershell script
I have a script right now that looks for all files certain day old and certain file extension and it deletes all of the files. This works fine and it counts fine
Then I have to delete all folders that correspond to being empty and that includes all sub folders too. I also have to output this into a file and display each file deleted. The output would show 30 folders deleted but actually 48 were really deleted.
Now my question is i am trying to do a count of all the folders deleted. I have this script but it just counts the deepest folders not all the ones deleted. Here is the part of the script i can not get to count
$TargetFolder = "C:\Users\user\Desktop\tem p"
$LogFile = "C:\Summary.txt"
$Count = 0
Date | Out-File -filepath $LogFile
get-childitem $TargetFolder -recurse -force | Where-Object {$_.psIsContainer}| sort fullName -des |
Where-Object {!(get-childitem $_.fullName -force)} | ForEach-Object{$Count++; $_.fullName} | remove-item -whatif | Out-File -filepath $LogFile -append
$Count = "Total Folders = " + $Count
$Count | Out-File -filepath $LogFile -append
Then I have to delete all folders that correspond to being empty and that includes all sub folders too. I also have to output this into a file and display each file deleted. The output would show 30 folders deleted but actually 48 were really deleted.
Now my question is i am trying to do a count of all the folders deleted. I have this script but it just counts the deepest folders not all the ones deleted. Here is the part of the script i can not get to count
$TargetFolder = "C:\Users\user\Desktop\tem
$LogFile = "C:\Summary.txt"
$Count = 0
Date | Out-File -filepath $LogFile
get-childitem $TargetFolder -recurse -force | Where-Object {$_.psIsContainer}| sort fullName -des |
Where-Object {!(get-childitem $_.fullName -force)} | ForEach-Object{$Count++; $_.fullName} | remove-item -whatif | Out-File -filepath $LogFile -append
$Count = "Total Folders = " + $Count
$Count | Out-File -filepath $LogFile -append
ASKER
No the count shows 30. So it is counting incorrectly but deleting the right amount.
ASKER
It seems to just count the deepest folders and ignores the others. This I do not understand i thought the recurse would count each folder?
Hmmm.... I just ran a similar test...
Nested folders with no files in them... and others with files. The folders deleted were ONLY the deepest folder... I assume this would be due to parent folders *not* being empty... they contain other folders. In my case, the count was also correct
Nested folders with no files in them... and others with files. The folders deleted were ONLY the deepest folder... I assume this would be due to parent folders *not* being empty... they contain other folders. In my case, the count was also correct
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
not sure if you tested this at all but i get an error of
The term 'prune-directory' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is co
rrect and try again.
At line:1 char:16
+ prune-directory <<<< c:\users\paul.healey\temp
+ CategoryInfo : ObjectNotFound: (prune-directory:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
The term 'prune-directory' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is co
rrect and try again.
At line:1 char:16
+ prune-directory <<<< c:\users\paul.healey\temp
+ CategoryInfo : ObjectNotFound: (prune-directory:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
prune-directory is actually a function that the author of the post wrote (see the article).
I am guessing that powershell is removing items from top level (rather than bottom up).. resulting in the skewed results... that is... all empty folders deleted, but the count does not add up for empty folders.
If I run this on my test folder:
$TargetFolder = "C:\folders\"
get-childitem $TargetFolder -recurse -force | ? {$_.psIsContainer} |
sort fullName -des | ? {!(get-childitem $_.fullName -force -recurse)} | select fullName
... the bottom level folders are listed. If I replace the 'select' statement with the 'remove'... the top level folder is also removed.
I am guessing that powershell is removing items from top level (rather than bottom up).. resulting in the skewed results... that is... all empty folders deleted, but the count does not add up for empty folders.
If I run this on my test folder:
$TargetFolder = "C:\folders\"
get-childitem $TargetFolder -recurse -force | ? {$_.psIsContainer} |
sort fullName -des | ? {!(get-childitem $_.fullName -force -recurse)} | select fullName
... the bottom level folders are listed. If I replace the 'select' statement with the 'remove'... the top level folder is also removed.
ASKER
This got me to part of what i needed still having trouble getting a count but i can now at least display what I need
Open in new window