Скрипт Powershell для вывода списка и удаления удаленной папки с содержимым - PullRequest
0 голосов
/ 22 января 2019

Я работаю над сценарием для удаления содержимого папки удаленного сервера:

$Servers = Get-Content "D:\servers.txt"
$Path = "\D$\Test"
$Folders = "\\$Servers$Path"
Get-ChildItem "$Folders" -Recurse -Force | Select-object -Property FullName, LastWriteTime

Foreach ($Item in $Servers)
    {       
    Get-ChildItem -LiteralPath "$Folders" -Recurse -Force | Remove-Item -Recurse -Force -Whatif
    }

Мне нужно сначала перечислить содержимое, а затем подтвердить его перед удалением.

Я не знаю, еслииспользовать Foreach или нет, если лучше использовать invoke-command или invoke-command в цикл Foreach и т. д.

Извините, я абсолютный нуб с PS: (

что такоелучшая структура для этого сценария?

Большое спасибо:)

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Привет снова @Kristian Kanchev

Это последний сценарий:

$Servers = Get-Content "D:\servers.txt"

$Folder = "\D$\Test"

foreach ($Server in $Servers)
    {
Write-output `n
Write-host -ForegroundColor Green List of content of "$Folder" in "$server"
Get-ChildItem "\\$server\$Folder" -Force | Select-object -Property FullName, LastWriteTime | Out-File "D:\result.txt"
Get-Content "D:\result.txt"

}
$delete = Read-Host Delete it Y/N?
Write-output `n
    if($delete -eq "Y") {



  foreach ($Server in $Servers)
    {   
    Get-ChildItem "\\$server\$Folder" -Recurse -Force | Remove-Item -Recurse -Force
    if( (Get-ChildItem "\\$server\$Folder" | Measure-Object).Count -eq 0)
    {
Write-Host "Files and folders deleted from \\$server\$Folder" -ForegroundColor Green -BackgroundColor Black
    }
    }
} 
elseif ($delete -eq "N") {

Write-Host "Deletion cancelled" -ForegroundColor Yellow -BackgroundColor Black
Write-output `n
}
else {
        Write-Host "Script cancelled" -ForegroundColor Red -BackgroundColor 
Black
        Write-output `n
        exit
}

С уважением;)

0 голосов
/ 22 января 2019

Да, вы можете использовать Invoke-Command до Get-ChildItem $Folders -Recurse -Force | Select-object -Property FullName, LastWriteTime | Out-File \\YOURPC\c$\Temp\result.txt. В целях тестирования я не использовал его.

  1. Вы просматриваете список серверов.
  2. Вы выводите список в файл, чтобы вы могли проверить.
  3. Вы предоставляете сценарию ответ Y / N.
  4. Не забудьте удалить -WhatIf, и вы можете добавить -Verbose, чтобы вы могли видеть, что было удалено на всякий случай.

Надеюсь, что приведенный ниже код поможет.

$Servers = Get-Content "C:\Temp\servers.txt"
$Path = "c$\Temp2"
$Folders = "\\$Servers\$Path"

ForEach ($server in $Servers) {

    Get-ChildItem $Folders -Recurse -Force | Select-object -Property FullName, LastWriteTime | Out-File \\YOURPC\c$\Temp\result.txt

}

$delete = Read-Host "Should the listed files in C:\Temp\result.txt be deleted Y/N?"

if($delete -eq "Y") {

    foreach ($server in $Servers) {
     Get-ChildItem -LiteralPath "$Folders" -Recurse -Force | Remove-Item -Recurse -Force -WhatIf
     Write-Host "Files/Folders deleted." -ForegroundColor Green -BackgroundColor Black
    }
} 
elseif ($delete -eq "N") {
        Write-Host "Deletion cancelled." -ForegroundColor Yellow -BackgroundColor Black
}
else {
        Write-Host "Invalid option, exiting script.." -ForegroundColor Red -BackgroundColor Black
        exit
}
...