Я бы начал с вопроса реестра, где находятся профили, потому что они, теоретически, могут быть настроены. В связи с этим, так же как и расположение папки AppData\Roaming
в каждом профиле, поэтому мы должны учитывать это, чтобы быть тщательным.
# Get the list of profile paths from the registry; since they theoretically can be customized.
$profileListReg = 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
# This filters out short SIDs (such as the system account)
$profilesReg = Get-ChildItem $profileListReg | Where-Object { $_.Name.Split('-').Count -gt 4 }
$userProfiles = @{}
# Add Default Profile to hashtable
foreach ($profileReg in $profilesReg) {
$userProfiles.Add($profilesReg.PSChildName, (Get-ItemProperty ('Registry::{0}' -f $profileReg.Name)).ProfileImagePath)
}
# Add Default Profile to hashtable
# This will cover new users getting the file
$userProfiles.Add('.DEFAULT', (Get-ItemProperty $profileListReg).Default)
$source = '\\FileShare\FancyConfigurationFiles\Config.xml'
$userShellFoldersReg = 'Registry::HKEY_USERS\{0}\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders'
# Copy Config to each Profile ...
foreach ($userProfile in $userProfiles.GetEnumerator()) {
Write-Verbose "$($userProfile.Name): $($userProfile.Value)"
$userShellFolders = Get-Item ($userShellFoldersReg -f $userProfile.Name)
$appData = $userShellFolders.GetValue('AppData','','DoNotExpandEnvironmentNames')
Write-Verbose "AppData: ${appData}"
$destination = $appData.Replace('%USERPROFILE%', $userProfile.Value)
Write-Verbose "Destination: ${destination}"
Copy-Item -Path $Source -Destination ($destination -f $userProfile) -Force
}
Вы должны закомментировать строку Copy-Item
внизу и включить многословие ($VerbosePreference = 'continue'
), чтобы проверить и убедиться, что эти подробные сообщения выглядят так, как вы ожидаете.
Примечание: мне не нравится использование HKLM:
поскольку взаимодействие с реестром не возвращает полные пути с HKLM:
оно возвращает HKEY_LOCAL_MACHINE
. Таким образом, вы должны либо заменить их строкой, либо знать, что вы можете просто прикрепить Registry::
в начале и перейти к пути. В любом случае это более полезно, так как все ульи не доступны в качестве дисков PS.