Я пытаюсь заменить файл prefs.js в профиле Firefox, чтобы изменить поведение firefox на компьютерах с 5k.
Я убиваю Firefox, удаляю файл скриптом
Remove-Item -Path "C:\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*\prefs.js" -Force -Recurse
, который работает без проблем.Затем я использую copy-item для извлечения нужной копии prefs.js во все профили Firefox на машине.ЭТО СЦЕНАРИЙ, КОТОРЫЙ Я ЗАДАВАЮ ВОПРОС.
$Target = Get-ChildItem -path "C:\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*"
Copy-Item "C:\DTS\BMC\ReplacePrefsjs\prefs.js" -Destination $Target -Force -Recurse
Когда я запускаю сценарий вручную на своей учетной записи (администратора домена), я получаю сообщения об отказе в доступе для всех профилей пользователей, которые не являются моими, но файл успешно скопирован в мой профиль Firefox.Это кажется нормальным, поскольку он работает только с обычными разрешениями.Вот выдержка из журнала этого выполнения:
Get-ChildItem : Access is denied
At C:\DTS\BMC\ReplacePrefsjs\PrefsJSReplace.ps1:2 char:11
+ $Target = Get-ChildItem -path "C:\Users\*\AppData\Roaming\Mozilla\Fir ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:\Users\<removed>\AppData:String) [Get-ChildItem], UnauthorizedAccessException
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand
Get-ChildItem : Access is denied
At C:\DTS\BMC\ReplacePrefsjs\PrefsJSReplace.ps1:2 char:11
+ $Target = Get-ChildItem -path "C:\Users\*\AppData\Roaming\Mozilla\Fir ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:\Users\<removed>\AppData:String) [Get-ChildItem], UnauthorizedAccessException
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand
Однако, когда я отправляю сценарий с нашим решением развертывания (например, SCCM и т. Д.), Я получаю следующую ошибку:
PS>TerminatingError(Copy-Item): "Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Destination'. Specified method is not supported."
Copy-Item : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Destination'. Specified
method is not supported.
At C:\DTS\BMC\ReplacePrefsjs\PrefsJSReplace.ps1:3 char:61
+ ... tem "C:\DTS\BMC\ReplacePrefsjs\prefs.js" -Destination $Target -Force ...
+ ~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Copy-Item], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.CopyItemCommand
Copy-Item : Cannot convert 'System.Object[]' to the type 'System.String'
required by parameter 'Destination'. Specified method is not supported.
At C:\DTS\BMC\ReplacePrefsjs\PrefsJSReplace.ps1:3 char:61
+ ... tem "C:\DTS\BMC\ReplacePrefsjs\prefs.js" -Destination $Target -Force ...
+ ~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Copy-Item], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.CopyItemCommand
Когда я впервые заметил это, я подумал, что скрипту нужно что-то вроде 'foreach' для адресации каждой записи, которую будет вытягивать $ Target (запуск скрипта для ВСЕХ профилей Firefox), а не -recurse.
Если бы это было так, то это также не должно работать вообще, когда я запускаю его вручную, но когда я делаю это, он просматривает каждый профиль, дает мне доступ, запрещенный для мест, которые я не могу редактировать без повышенных разрешений, работает для моегопрофиль и завершается без ошибки преобразования.
Может кто-нибудь помочь мне понять, почему мой Copy-Item не может разрешить целевой объект $ Target при запуске системным профилем?