繁体   English   中英

Powershell 脚本可根据结束域在多台服务器上执行不同的操作

[英]Powershell script to execute different actions on multiple servers based on their ending domain

我一直在尝试编写一个脚本,该脚本将在以文本形式(来自 .txt 或 .csv)给出的所有主机上执行一些操作--> 演示:

 **## C:\hosts.txt**  
 - Machine4.Int.ecom.domain
 - Machine3.emea.domain.com 
 - Machine1.production.domain.com 
 - Machine2.quality.domain.com

理想情况下,脚本的任务是使用 Get-Date

Clear-Host

Set-ExecutionPolicy RemoteSigned
$Now = Get-Date
$Days = @("90","30","14","7")                    ## THIS LINE SHOULD BE DEPENDING DOMAIN IN HOSTNAME

$TargetFolder = @("C:\Windows\SoftwareDistribution\Downloads","C:\Windows\Temp","C:\Windows\CCMCache")
$Extension = @("*.vhk*","*.txt*")
$LastWrite = $Now.AddDays(-$Days)

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

例如,假设我有以下主机名:

  • Machine1.production.domain.com
  • Machine2.quality.domain.com
  • Machine3.emea.domain.com
  • Machine4.Int.ecom.domain

现在,基于域“.production”或“.quality”或“.emea”或“.int”,我想执行以下操作。

  • 在生产服务器 -> 删除超过 90 天的文件。
  • 在质量服务器 -> 删除超过 30 天的文件。
  • 在 emea 服务器中 -> 删除超过 14 天的文件。
  • 在 INT 服务器中 -> 删除超过 7 天的文件。

删除后,它还会将文件路径保存在 CSV 文件中,以便我可以在必要时仔细检查和恢复它们。

你能帮我解决这个问题吗? 提前致谢。

如果您使用包含服务器的文本文件,您可以在循环内添加使用开关,您可以通过服务器并在那里设置清理参考日期:

$servers       = Get-Content -Path 'C:\hosts.txt'
$targetFolders = "C:\Windows\SoftwareDistribution\Downloads","C:\Windows\Temp","C:\Windows\CCMCache"
$extensions    = "*.vhk","*.txt"
$today         = (Get-Date).Date

foreach ($machine in $servers) {
    # determine the reference date by the machine's name
    $refDate = switch -Regex ($machine) {
        '\.production\.' { $today.AddDays(-90); break }
        '\.quality\.'    { $today.AddDays(-30); break }
        '\.emea\.'       { $today.AddDays(-14); break }
        '\.int\.'        { $today.AddDays(-7) }
    }
    Invoke-Command -ComputerName $machine -ScriptBlock {
        $Files = Get-ChildItem -Path $using:targetFolders -File -Include $using:extensions -Recurse | 
                 Where-Object {$_.LastWriteTime -le $using:refDate}
        # do your clean-up here on the files you have gathered
        # maybe write a log first or simply delete these files?
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM