@WarStyle

Изменение HKCU текущего пользователя, вошедшего в систему, из сценария, запущенного как SYSTEM?

Привет. Есть задача такая:
Скопировать автономные файлы из c\win\csc.. на ту же тачку где они лежат, только в другое место С:\csc
отключить автономные файлы
поправить путь домашних папок в реестре залогиненого юзера (desktop, documents) с сетевого dfs \\dfs.example на локальный %localprofile%\docs..
отключить автономные файлы
переместить файлы файлы с С:\csc в %localprofile%\
Вопрос:
Скрипт будет запускаться от имени nt authority\system с шедулера. Ключи реестра
которые я хочу поменять находятся в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders и поменять эти ключи нужно у пользователя который в момент вполнения скрита залогинен в систему. Но если скрипт будет запущен от имени nt authority\system, то такая команда
Set-Itemproperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name 'Personal' -value 'TEST'

приведет к тому, что ключ изменится у nt authority\system. Как быть? Смотрю в сторону HKEY_USERS но эта ветка по умолчанию не зарегистрирована
Да и в целом впервые что-то пишу на ps, ткните где и что не так сделал)

spoiler
$drive_free = "{0:N0} GB" -f ((get-psdrive c | measure Free -s).sum / 1Gb)
$folder_size = "{0:N0} GB" -f ((gci c:\windows\csc | measure Length -s).sum / 1Gb)
$new_folder = mkdir C:\CSC_copy -ErrorAction SilentlyContinue
$user_logon = (get-wmiobject Win32_ComputerSystem).UserName.Split('\')[1]
$userlogon_sid = ([System.Security.Principal.WindowsIdentity]::GetCurrent()).User.Value
$ExcludedUsers = "Public","Migr","daimyo",”adm”,”$user_logon”, "adam", "DefaultAccount", "eve", "WDAGUtilityAccount", "Admin", "User", "ADMT.USER", "LocalService", "systemprofile", "NetworkService", "gamer"
$LocalProfiles = Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and (!$_.Loaded) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-30))}
#$csc_copy = cd C:\CSC_copy
#$domain = example.com
#$domainuser = example.com
$csdomain = (Get-WmiObject Win32_ComputerSystem).domain
$csuserdomain = (get-wmiobject Win32_ComputerSystem).UserName.Split('\')[0]
 
#Write-Host $drive_free
#Write-Host $folder_size
 
ForEach-Object -Process{
 
    if ($drive_free -lt $folder_size){
        robocopy C:\Windows\CSC C:\CSC_Copy /MIR /FFT /R:3 /W:10 /Z /NP /NDL
 
        }
    else { foreach ($LocalProfile in $LocalProfiles){
 
           if (!($ExcludedUsers -like $LocalProfile.LocalPath.Replace("C:\Users\","")))
{
#удалить папки старых профилей..
#$LocalProfile | Remove-WmiObject
Write-host $LocalProfile
Write-host $LocalProfile.LocalPath.Replace("C:\Users\","")
	}
		}
			}
                }
 
#Отключаем автономные файлы, отключаем дфс путь, копируем файлы на землю
 
foreach ($csdomain in $domain){
 
    if ($csdomain -like $domain -and $csuserdomain -like $domainuser) {
#{FDD39AD0-238F-46AF-ADB4-6C85480369C7} - документы
#{B4BFCC3A-DB2C-424C-B029-7FE99A87C641} - десктоп
#Отключаем автономные файлы 
        Set-Itemproperty -path 'HKLM:\SYSTEM\CurrentControlSet\Services\CSC' -Name 'Start' -value '00000004'
        Set-Itemproperty -path 'HKLM:\SYSTEM\CurrentControlSet\Services\CscService' -Name 'Start' -value '00000004'
#как поменять на logon user ветке?? регистрировать ветку в psitem HKEY_USERS??
       #??? Set-Itemproperty -path 'HKU:\$userlogon_sid\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name 'Desktop' -value '%USERPROFILE\Desktop'
       #??? Set-Itemproperty -path 'HKU:\$userlogon_sid\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name 'Personal' -value 'TEST'
 
        (Get-Process -Name explorer).Kill()
        #вырезать файлы? 
        #robocopy C:\CSC_Copy\... C:\%USERPROFILE\... /MIR /FFT /R:3 /W:10 /Z /NP /NDL
        }
 
    else { break 
                }
                    }
  • Вопрос задан
  • 234 просмотра
Решения вопроса 1
@WarStyle Автор вопроса
Погуглив пару дней нашел это install-module RunAsUser
Invoke-AsCurrentUser -UseWindowsPowerShell  {Set-Itemproperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders' -Name 'Desktop' -value '%USERPROFILE\Desktop' }

работает)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы