2013-11-01 4 views
1

У меня есть следующий фрагмент кода, который в настоящее время удаляет все в моем временном каталоге и повторно добавляет новый каталог temp.Удалить содержимое папки temp

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

Я пытаюсь немного изменить код, где она больше не будет удалить временную директорию и вместо того, чтобы просто удалить все содержимое внутри температуры. Я добавил \* в конце моей переменной $dir, чтобы попытаться получить все элементы внутри темпа, а не удалять сам 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, он будет смотреть на все внутри Temp без удаления самой Temp.

+0

Вам не нужно% {} вокруг Remove-Item. Он принимает массив (из Get-ChildItem) в качестве входного. –

+0

Одна вещь, которую я не понимаю, - это то, почему вы дифференцируетесь между 2003 и 2008 годами, когда ваш код одинаковый в обоих блоках. Если вы не думаете, что путь к каталогу чувствителен к регистру, чего нет в Windows. – crownedjitter

+0

Это всего лишь небольшой фрагмент кода, он получает гораздо больше, чем просто темп, и некоторые вещи, которые у него есть, имеют разные пути. – Valrok

0

В соответствии с файлом справки PowerShell для remove-item параметр -recurse неисправен. Он рекомендует вам get-childitem и трубу до remove-item. См. Пример из файла справки ниже.

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

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

Неисправное поведение -recurse было исправлено в V4. – mjolinor

+0

Пользователь не указал, какая версия PowerShell используется. –

+0

Нет, но если у него есть V4, он не найдет ссылки на то, что он ошибается в его помощи. – mjolinor

1

Это работает для меня, так долго, как вы встречаете предварительно Reqs и иметь полный контроль над всеми файлами/папками под 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 
} 
Смежные вопросы