Question

I've got the following code snippet which currently removes everything in my temp directory and re-adds a new temp directory.

if($serverVersion.name -like "*2003*"){
    $dir = "\\$server" + '\C$\WINDOWS\Temp\*'
    remove-item $dir -force -recurse
    if($?){new-item -path "\\$server\admin$\Temp" -Type Directory}
}
elseif($serverVersion.name -like "*2008*"){
    $dir = "\\$server" + '\C$\Windows\Temp\*'
    remove-item $dir -force -recurse
    if($?){New-Item -Path "\\$server\admin$\Temp" -Type Directory}  
}

I'm trying to slightly alter the code to where it will no longer delete the temp directory and instead simply remove all of the contents inside of temp. I added \* at the end of my $dir variable so that it tries to get all of the items inside of temp rather than deleting Temp itself. When I run this however I'm not deleting anything. What is wrong with my code?

Was it helpful?

Solution 3

Figured out how to do this and figure it may be useful for someone in the future.

if($serverVersion.name -like "*2003*"){
    $dir = "\\$server" + '\C$\WINDOWS\Temp'
    Get-ChildItem -path $dir -Recurse | %{Remove-Item -Path $_.FullName -Force}
    if($?){new-item -path "\\$server\admin$\Temp" -Type Directory}
}
elseif($serverVersion.name -like "*2008*"){
    $dir = "\\$server" + '\C$\Windows\Temp'
    Get-ChildItem -path $dir -Recurse | %{Remove-Item -Path $_.FullName -Force}
    write-host "success?"
    if($?){New-Item -Path "\\$server\admin$\Temp" -Type Directory}  
}

Using get-childitem it will look at everything inside of Temp without deleting Temp itself.

OTHER TIPS

This works for me, so long as you meet the pre-reqs and have full control over all files/folders under Temp

# Prerequisites
# Must have the PowerShell ActiveDirectory Module installed
# Must be an admin on the target servers
#
# however if you have no permissions to some folders inside the Temp,
# then you would need to take ownship first.
#
$Server = "server Name"
$dir = "\\$Server\admin$\Temp\*"
$OS = (Get-ADComputer $Server -Properties operatingsystem).operatingSystem
IF (($os -like "*2003*") -or ($os -like "*2008*"))
{
    remove-item $dir -Recurse -force
}

According to the PowerShell help file for remove-item, the -recurse parameter is faulty. It recommends that you get-childitem and pipe to remove-item. See example from the help file below.

-------------------------- EXAMPLE 4 --------------------------

C:\PS>get-childitem * -include *.csv -recurse | remove-item
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top