Копирование файлов с одинаковыми именами из разных мест - PullRequest
0 голосов
/ 31 мая 2019

В целях реагирования на инцидент я пытаюсь создать сценарий powershell, который пройдет через все каталоги c: \ users и скопирует ntuser.dat, а затем вставит их в новый каталог, созданный сценарием. У меня есть некоторые кусочки головоломки, но мне трудно все это собрать. Некоторые проблемы, которые я не могу решить 1. Найдите все c: \ users * \ ntuser.dat и раскройте 2. Переименуйте все ntuser.dat, чтобы включить имя папки 3. Копирование всего недавно переименованного ntuser.dat в новую папку 4. Переименование всех файлов ntuser.dat в c: \ users обратно в обычное состояние.

#1 Unhides the ntuser.dat
$h = gci C:\Users\Test1\NTUSER.DAT -Force
$h.Attributes = $h.Attributes -bxor [System.IO.FileAttributes]::Hidden

#2 Renames ntuser.dat as foldername_ntuser.dat
Get-ChildItem C:\users\test1\ -Filter *.dat -Recurse | Rename-Item -NewName {$_.Directory.Name+'_'+$_.Name}

#3 Creating a new folder and copying the newly named test_ntuser.dat 
$SourceFile = "c:\users\test1\*.dat"
$DestinationFile = "c:\users\user2\desktop\test\test_netuser.dat"
If (Test-Path $DestinationFile) {
    $i = 0
    While (Test-Path $DestinationFile) {
        $i +=1
        $DestinationFile = "c:\users\user2\desktop\test\"
    }
}Else {
    New-Item -ItemType file -Path $DestinationFile -Force
}
Copy-Item -Path $SourceFile -Destination $DestinationFile -Force

В конце этого я хотел бы, чтобы скрипт отображал, переименовывал и перемещал в новую папку из C: \ Users \ test1 \ C: \ Users \ test2 C: \ Users \ test3 Без ссылки на путь каждого отдельного пользователя

1 Ответ

0 голосов
/ 31 мая 2019

Что ж, у вас будет несколько проблем с этим, поскольку NTUSER.dat загружается в память, если используется пользователь.Таким образом, вы не можете скопировать свой собственный NTUSER.dat, когда вы вошли в компьютер.Также, если есть служба, работающая под именем пользователя, вы не сможете получить эти эфиры.

Итак, давайте рассмотрим, что вы хотели и почему вам это не нужно.

1 Поиск всех c: \ users \ ntuser.dat и отображение *: нет необходимости отображать исходный файл.Вам просто нужно показать копию.

2 Переименуйте все ntuser.dat, указав имя папки : Нет необходимости переименовывать исходный файл, только копию.

3 Копирование всех недавно переименованных файлов ntuser.dat в новую папку. : Само Копирование позволяет вам называть файл по вашему желанию без первых двух шагов.

4 Переименование всех файлов ntuser.dat.в c: \ users возвращается к нормальной работе : нет необходимости в этом шаге ether, поскольку исходные файлы никогда не переименовывались.

Function Copy-NTUser($SavePath){
    Get-ChildItem C:\Users\ -Directory | %{
        $Name = $_.Name
        Get-ChildItem "$($_.FullName)\ntuser.dat" -File -force -ErrorAction SilentlyContinue | %{
            $FullName = $_.FullName
            try{
                Copy-Item -Path $_.FullName -Destination "$($SavePath)\$($Name)_$($_.name)" -Force -PassThru  | %{
                    $_.Attributes = $_.Attributes -bxor [System.IO.FileAttributes]::Hidden
                }
            }catch{
                "$($FullName) could not be copied as its currently in use."
            }
        }
    }
}

Copy-NTUser -SavePath C:\Test\NTUSER
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...