簡體   English   中英

用 Powershell 刪除多個文件夾

[英]Delete multiple folder with Powershell

當 windows 服務停止時,我需要一個刪除多個文件夾的腳本。 我寫了這個腳本:

[Array] $Services = 'LAS_LMB','LAS_LWS','LAS_CORE';

$las_path = "D:"
$tomcat_path = @('tomcat_core', 'tomcat_lmb', 'tomcat_web')
$log_folder = "$las_path\tomcat_*\logs"
$temp_folder = "$las-path\temp\*"
$localhost_folder = "$las_path$tomcat_path\work\Catalina\localhost"

# loop through each service, if its stopped, delete some folders
foreach($ServiceName in $Services)
{
    $arrService = Get-Service -Name $ServiceName
    
    if ($arrService.Status -eq 'Stopped')
    {
        Start-Sleep -s 5
        Remove-Item $localhost_folder, $temp_folder -Force -Recurse -Verbose
        Get-ChildItem -Path  $log_folder -Recurse -include * | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-7)} | Remove-Item -Verbose
        if ($arrService.Status -eq 'Running')
            {
              Write-Host "To delete Logs, Temporary Datas etc. must all serveices be stopped. Please start script Stopservices.ps1 first"
            }
     }
 }

當我啟動腳本時,腳本檢查服務是否停止,但只有一個。 我需要在所有服務停止時刪除文件夾。 例如 1.service -and 2.service -and 3.service。 我不知道如何使用這個功能:通過啟動腳本必須要求寫一個名稱服務。 例如: $Dienste = Read-Host "Please enter the Services" 我寫的是 las1, las2, las3,這個值必須輸入:

[Array] $Services = $Dienste in this format 
[Array] $Services = 'las1','las2','las3';

多謝。

我需要在所有服務停止時刪除文件夾。

Get-Service接受一組服務名稱,因此您可以執行以下操作來等待所有服務停止:

while( Get-Service $Services | Where-Object Status -ne 'Stopped' ) { Sleep 3 }

# Now delete the folders...

Get-Service調用檢索在$Services數組中定義的所有服務。 這可以是通配符模式,例如Name*

從這些服務中,我們使用Where-Object cmdlet select 所有未停止的服務。 只要管道返回somethingwhile循環條件就會被滿足,這意味着至少一個服務沒有停止。 如果所有服務都停止,那么Where-Object將不會 output 任何東西並且while循環退出。

Sleep 3 (秒)在那里,所以我們不會使用比必要更多的系統資源。 3沒有特殊意義,你可以使用15 ,這並不重要。 只是不要忙循環,讓系統在腳本等待時有機會做其他事情。

謝謝你的解釋。 我寫了這個。 它的語法是正確的嗎?

[Array] $Services = 'service1','service2','service3';

$las_path = "D:\LAS"
$tomcat_path = "$las_path\tomcat_*"
$log_folder = "$las_path\tomcat_*\logs"
$temp_folder = "$las-path\temp\*"
$localhost_folder = "$las_path\tomcat_path\work\Catalina\localhost"

# loop through each service, if its stopped, delete some folders
foreach($ServiceName in $Services)
{
    $arrService = Get-Service -Name $ServiceName
    while( Get-Service $Services | Where-Object Status -ne 'Stopped') {Sleep 3 }
{
        Remove-Item $localhost_folder, $temp_folder -Force -Recurse -Verbose
        Get-ChildItem -Path  $log_folder -Recurse -include * | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-7)} | Remove-Item -Verbose
        
        if ($arrService.Status -eq 'Running')
            {
              Write-Host "To delete Logs, Temporary Datas etc. must all serveices be stopped. Please start script Stopservices.ps1 first"
            }
    
    }
}

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM