2013-11-01 51 views
1

我有下面的代码片段,它目前删除我的临时目录中的所有内容,并重新添加一个新的临时目录。删除临时文件夹的内容

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} 
} 

我想稍微改变代码,它将不再删除临时目录,而是简单地删除所有的temp内容。我在我的$dir变量的末尾添加了\*,以便它试图获取temp内的所有项目,而不是删除Temp本身。当我运行这个,但我不删除任何东西。我的代码有什么问题?

回答

0

想出如何做到这一点,算起来可能完全控制对未来某人有用。

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} 
} 

使用Get-childitem这将着眼于一切温度的内部而不删除临时本身。

+0

你不需要围绕删除项目的%{}。它接受一个数组(来自Get-ChildItem)作为输入。 –

+0

我没有得到的一件事就是为什么当你的代码在两个块中都是相同的时候,你在区分2003年和2008年。除非你认为目录路径区分大小写,而不是在Windows中。 – crownedjitter

+0

这只是一个小小的代码片段,它获得的不仅仅是临时性的东西,而且它有一些不同的路径。 – Valrok

0

根据remove-item的PowerShell帮助文件,-recurse参数有问题。它建议你get-childitem和管道remove-item。请参阅下面的帮助文件中的示例。

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

C:\PS>get-childitem * -include *.csv -recurse | remove-item 
+0

V4中的错误疏散行为已得到修复。 – mjolinor

+0

用户没有指定正在使用哪个版本的PowerShell。 –

+0

不,但如果他有V4,他不会在他的帮助中找到提及它的错误。 – mjolinor

1

这个工作对我来说,只要你满足预请求数,并已超过所有文件/文件夹下的温度

# 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 
}