2013-11-01 215 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 
}