使用 PowerShell 脚本从多个服务器删除超过 X 天的文件

使用 PowerShell 脚本从多个服务器删除超过 X 天的文件

我在 PowerShell 和批处理文件中都有脚本,其中它将从一台计算机的根文件夹和子文件夹内删除超过 X 天的所有文件,但我正在寻找一个脚本,它将使用一个脚本从多个服务器中删除超过 X 天的文件。

下面是我在 PowerShell 和批处理文件中使用的代码

PowerShell 脚本:

Clear-Host

Set-ExecutionPolicy RemoteSigned
$Now = Get-Date
$Days = "30"

$TargetFolder = "C:\Older"
$Extension = "*.*"
$LastWrite = $Now.AddDays(-$Days)

$Files = Get-ChildItem $TargetFolder -Include $Extension -Recurse | Where {$_.LastWriteTime -le "$LastWrite"}


foreach ($File in $Files)
  {
  if ($File -ne $NULL)
    {
      write-host "Deleting File $File" -ForegroundColor "DarkRed"
    Remove-Item $File.FullName | out-null
    }
  else
    { Write-Host "No more files to delete!" -foregroundcolor "Green" }
  }

批处理文件:

ForFiles /p "C:\Older" /s /d -30 /c "cmd /c del @file"

Pause

答案1

要使 PowerShell 逻辑从一个位置针对多个服务器运行,请确保启用PSRemoting在您要远程运行命令的每台服务器上运行。启用后,使用调用命令在远程服务器上运行 PowerShell 命令和其他可执行文件。

  1. 确保在每台服务器上启用 PSRemoting,方法是Enable-PSRemoting -Force通过组策略或启动脚本在每台服务器上运行一次,或者以您在环境中通常执行的任何方式执行此操作。

  2. 创建一个要运行命令以进行清理的服务器列表,方法是将数组列表放入脚本逻辑或文本文件中,然后使用该列表通过以下方式创建数组获取内容

    因此对于服务器列表,两个选项是......

    1. 将服务器列表放入脚本本身中$Servers = @("Server1","Server2.domain.com","Server4.otherdomain.com");
    2. 有一个包含服务器的文本文件,并Get-Content在脚本中使用它来获取列表

脚本

Clear-Host
Set-ExecutionPolicy RemoteSigned

$Servers = @("Server1","Server2.domain.com","Server4.otherdomain.com");
###$Servers = Get-Content "\\Server\Share\Folder\Lists\ServerCleanupList.txt"

$Now = Get-Date
$Days = "30"
$TargetFolder = "C:\Older"
$Extension = "*.*"
$LastWrite = $Now.AddDays(-$Days)

$Servers | %{
    Invoke-Command -ComputerName $_ -ScriptBlock {
        $Files = Get-ChildItem $Using:TargetFolder -Include $Using:Extension -Recurse | Where {$_.LastWriteTime -le $Using:LastWrite}
        $Files | %{If($_.FullName){$_.FullName | Remove-Item -Force}}
        C:\Windows\System32\forfiles.exe /p "C:\Older" /s /d -30 /c "cmd /c del @file"
        } -AsJob;
};

使用Invoke-Command参数-AsJob会在远程系统上将命令作为后台作业执行,然后对列表中的每个后续服务器执行相同的操作。

支持资源

  • 启用PSRemoting
  • 调用命令

    -ScriptBlock scriptblock

    要运行的命令。

    将命令括在花括号中{ }以创建脚本块。此参数是必需的。

    默认情况下,命令中的任何变量都会在远程计算机上进行评估。要在命令中包含局部变量,请-ArgumentList在 PowerShell 3.0+ 中使用或使用前缀$using:在局部变量之前例如通过 { echo $using:mylocalVar }

  • 获取内容

相关内容