Привет. Есть задача такая:
Скопировать автономные файлы из 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
}
}