Создание файла в контексте пользователя в powershell - PullRequest
0 голосов
/ 17 сентября 2010

Я пытаюсь создать файл с помощью powershell в определенном пользовательском контексте. Например, у меня на локальном компьютере есть пользователь user01, и я хочу создать файл в его контексте.

Я делаю что-то вроде

Новый элемент c: \ file.txt -Credential User01

Это работает, но запрашивает у меня пароль, который я не хочу. Есть ли способ, которым я могу сделать это без запроса пароля?

Ответы [ 4 ]

2 голосов
/ 18 сентября 2010

Параметр учетных данных для new-item на самом деле не поддерживается для файловых систем, поэтому я не уверен, что вы подразумеваете под словом «это работает». Он НЕ создает файл как переданный пользователь. Фактически провайдер файловой системы скажет:

"Поставщик не поддерживает использование учетных данных. Выполните операцию еще раз, не указав учетные данные."

Сделав обоснованное предположение, я бы сказал, что вы пытаетесь создать файл с другим владельцем. PowerShell не может сделать это самостоятельно, поэтому вам понадобится следующий нетривиальный скрипт:

http://cosmoskey.blogspot.com/2010/07/setting-owner-on-acl-in-powershell.html

Работает, включив привилегию SeBackup для вашего токена безопасности (но вы уже должны быть администратором). Это позволяет вам установить любого произвольного владельца файла. Обычно вы можете сменить владельца только на администратора или свою учетную запись.

О, и этот скрипт предназначен только для powershell 2.0.

1 голос
/ 18 сентября 2010

Вместо использования командлета PowerShell или сценариев .NET в этом случае вы можете взглянуть на утилиту Windows takeown.exe.Однако даже для этого требуется указать пароль пользователя, которому вы назначаете владельца.

0 голосов
/ 08 октября 2010

Или просто позвонить в SUBINACL.EXE? Тогда пароль не нужен.

0 голосов
/ 22 сентября 2010

Хорошо, я запускаю процесс в контексте пользователя, а затем создаю файл. Работает как шарм.

Password, FilePath и UserName передаются в качестве аргументов из командной строки.

$ pw = convertto-securestring "$ Password" -asplaintext –force $ credential = new-object -typename system.management.automation.pscredential -argumentlist "-default -", $ pw $ localArgs = "/ c echo> $ FilePath" [System.Diagnostics.Process] :: Start («cmd», $ localArgs, «$ UserName», $ credential.Password, «$ Computer»)

...