Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
<#
    .NOTES
    Автор:          iNNOKENTIY21
#>
 
#Requires -RunAsAdministrator
 
Param (
    # Что копировать. Полный путь к папке источнику
    [Parameter(Mandatory)]
    [ValidateNotNullOrEmpty()]
    [string]
    $Source,
 
    # Куда копировать. Полный путь к папке назначения
    [Parameter(Mandatory)]
    [ValidateNotNullOrEmpty()]
    [string]
    $Destination
)
 
function New-ShadowCopy {
    #Requires -RunAsAdministrator
 
    Param (
        # Диск для создания теневой копии (Пример: C:\ или C:)
        [Parameter(Mandatory = $true, HelpMessage = 'Укажите диск (например c:) для создания теневой копии')]
        [ValidateNotNullOrEmpty()]
        [ValidateCount(2, 3)]
        [ValidateScript( { (Test-Path $_ -PathType Container) -and (Split-Path $_ -IsAbsolute) })]
        [String]
        $Disc
    )
 
    if ($Disc.EndsWith(':')) { $Disc = Join-Path -Path $Disc -ChildPath \ }
 
    # Создаём теневую копию
    $ShadowID = ((Get-WmiObject -List Win32_ShadowCopy).Create($Disc, "ClientAccessible")).ShadowID
    $DeviceObject = (Get-WmiObject Win32_ShadowCopy | Where-Object { $_.ID -eq $ShadowID }).DeviceObject
    $ShadowCopyPath = Join-Path -Path $DeviceObject -ChildPath \
 
    # Создаём ссылку на теневую копию
    $MountName = (Split-Path $ShadowCopyPath -Leaf) + '-' + (Get-Date -Format ("yyyy.MM.dd-hh.mm.ss"))
    $MountPoint = Join-Path -Path $Disc -ChildPath $MountName
 
    $null = cmd /c mklink /d "$MountPoint" "$ShadowCopyPath"
 
    [pscustomobject] @{
        "Disc"           = $Disc
        "ShadowID"       = $ShadowID
        "DeviceObject"   = $DeviceObject
        "ShadowCopyPath" = $ShadowCopyPath
        "MountName"      = $MountName
        "MountPoint"     = $MountPoint
    }
}
 
function Remove-ShadowCopy {
    param (
        # ID теневой копии
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]
        $ShadowID,
 
        # Точка монтирования теневой копии (ntfs link)
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]
        $MountPoint
    )
 
    # Удаление теневой копии
    $null = vssadmin Delete Shadows /Shadow="$ShadowID" /Quiet
 
    # Удаление точки монтирования теневой копии
    # Remove-Item баг
    # https://github.com/powershell/powershell/issues/621
    # https://stackoverflow.com/questions/51160864/delete-children-directories-in-powershell-including-symlinks
    (Get-Item $MountPoint).Delete()
}
 
# Создание теневой копии
$Disc = Split-Path -Path $Source -Qualifier
$ShadowCopy = New-ShadowCopy -Disc $Disc
 
# Копирование из теневой копии
$SourceWithoutQualifier = Split-Path -Path $Source -NoQualifier
$SourcePath = Join-Path -Path $ShadowCopy.MountPoint -ChildPath $SourceWithoutQualifier
Copy-Item -LiteralPath $SourcePath -Destination $Destination -Recurse -Force
 
# Удаление теневой копии и ссылки на неё
Remove-ShadowCopy -ShadowID $ShadowCopy.ShadowID -MountPoint $ShadowCopy.MountPoint

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 19:37 21-10-2019 | Исправлено: iNNOKENTIY21, 19:42 21-10-2019
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru