0

Хорошо, я видел ответ здесь по этому самому вопросу, но я не понимаю его и что это следующий шаг. The original question Что я должен делать, если я хочу эту линию, чтобы работать

$from = "$dirFiles\config.xml" 
$to = "C:\Users\$env:USERNAME\AppData\Roaming\Folder\Folder\config.xml" 
Copy-Item $from $to -recurse 

начиная с $ ENV: имя пользователя разрешает мне в имени компьютера при развертывании хотя SCCM. Как и где я должен ввести:

([Security.Principal.WindowsIdentity]::GetCurrent()).Name.replace("$ENV:USERDOMAIN\","") 

Надеется, что вы меня понимаете

редактировать ** Я нашел то, что я мог бы использовать благодаря bluuf и Syberdoor, который указал мне в правильном направлении

**$CurrentUser = (Get-LoggedOnUser).UserName** 
$from = "$dirFiles\config.xml" 
$to = "C:\Users\$CurrentUser\AppData\Roaming\Folder\Folder\config.xml" 
Copy-Item $from $to -recurse 
+1

Я, безусловно, не делаю, чего вы пытаетесь достичь? – 4c74356b41

+0

Я пытаюсь сделать powershell и SCCM скопировать файл в папку пользователя Appdata на компьютере, на котором запущена установка. Но я получаю ошибку, что папка C: \ Users \ "Computername" \ не существует. Таким образом, SCCM или powershell разрешают переменную $ env: USERNAME в имени компьютера, а не вошедшем в систему имя пользователя. – jetmanus

+1

, так что очевидный вопрос: как вы ожидаете, что это будет имя пользователя, если никто не войдет в систему? какого пользователя вы ожидаете получить? – 4c74356b41

ответ

0

По умолчанию программы SCCM выполняются с учетной записью SYSTEM текущего компьютера.

Если это программа из пакета/программы, то что вам нужно сделать, чтобы изменить это, в свойствах программы перейдите в «Среда», выберите «программа может запускаться: только при входе пользователя» и «Запуск с правами пользователя», возможно, также перейдите в «Дополнительно» и выберите «Когда эта программа назначена компьютеру: выполните один раз для каждого пользователя, который входит в систему» ​​

Если это тип приложения, вы должны перейти к свойствам для типа развертывания и «Пользовательский опыт», а там «Поведение установки» изменяется на «Установить для пользователя».

Это будет внутренний метод SCCM, чтобы делать то, что вы хотите. Это, конечно, также означает, что вы теряете все права администратора и обращаются к ним, поскольку контекст теперь является зарегистрированным пользователем. Доступ к пользовательскому профилю не должен быть проблемой (лучшей переменной окружения будет $ env: appdata btw), но вам также потребуется прочитать доступ к $ dirFiles для каждого пользователя.

Другой подход (если это нужно сделать только один раз для всех компьютеров) будет поддерживать права администратора, а вместо использования переменной окружения получить все пользователи с чем-то вроде «gci C: \ users» (минус public профиль), а затем администратор сразу же заменит все файлы пользователей.

+0

. Так что в принципе это невозможно, если я не даю пользователям права администратора. – jetmanus

+0

. Я предполагаю, что вы принимаете неправильный подход к справиться с этой проблемой. Существует несколько способов получения текущего имени пользователя (например, wmi class win32_computersystem) даже из системной учетной записи. Также возможна итерация по папке c: \ users и проверка на конкретную активность в файле или папке. Одна дорога, ведущая в тупик, не означает, что что-то невозможно: это просто означает, что вам нужно идти по другому пути (будь то обход или ярлык). – bluuf

+0

Я не думаю, что вам понадобятся права администратора, чтобы перезаписать файл в профиле пользователей.Пользователям принадлежат эти файлы, права должны быть достаточными. Вам нужны права доступа к файлам $ dirFiles, и если они не указаны, вы, вероятно, можете использовать точку распространения, чтобы исправить это для вас. То, что сказал @bluuf (и я в последнем абзаце), также правдиво, администратор может получить доступ к другим пользователям, однако это зависит от вашей настройки, независимо от того, имеет ли это смысл. Наконец, вы знаете, что копирование (с помощью admin priviliges) для пользователя одного файла легко выполняется с помощью GPP? – Syberdoor

0

Я пытаюсь ответить на исходный вопрос, который вы задали: вы можете создать свою собственную переменную, чтобы заменить $ env: username. Например, ниже я использую $ uu:

$from = "$dirFiles\config.xml" 
$uu = (([Security.Principal.WindowsIdentity]::GetCurrent().Name) -split "\\")[1] 
$to = "C:\Users\$uu\AppData\Roaming\Folder\Folder\config.xml" 
Copy-Item $from $to -recurse 
+0

Ваш ответ не имеет для меня никакого смысла быть честным (пламя не предназначено): плакат не жалуется на то, что имя пользователя не работает; проблема заключается в том, что сценарий работает под учетной записью системы, поэтому учетная запись AD Computer - переменная имени пользователя (а также метод GetCurrent()) будет содержать учетную запись пользователя AD, так как это учетная запись пользователя, которая запускает скрипт. – bluuf

 Смежные вопросы

  • Нет связанных вопросов^_^