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 目录的位置,而是简单地删除 temp 中的所有内容。我\*在变量的末尾添加,$dir以便它尝试获取 temp 中的所有项目,而不是删除 Temp 本身。但是,当我运行它时,我不会删除任何内容。我的代码有什么问题?

4

3 回答 3

1

这对我有用,只要您满足先决条件并完全控制 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
}
于 2013-11-01T18:31:57.077 回答
0

根据 PowerShell 帮助文件remove-item-recurse参数错误。它建议您使用get-childitem管道传输到remove-item. 请参阅下面帮助文件中的示例。

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

C:\PS>get-childitem * -include *.csv -recurse | remove-item
于 2013-11-01T18:27:49.183 回答
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 本身。

于 2013-11-01T18:42:03.560 回答