Вопрос: Как предоставить пользователю права доступа NTFS к папке через Powershell


Я пытаюсь создать скрипт, который создаст папку для нового пользователя на нашем файловом сервере. Затем удалите унаследованные права из этой папки и добавьте в нее определенные права. Я успешно добавляю эту папку (если я даю ей статическую запись в скрипте), предоставляя права администратора домена, удаляя наследование и т. Д., Но я У меня возникли проблемы с его использованием переменной, которую я установил как пользователь. Я не хочу, чтобы каждый раз был статическим пользователем, я хочу иметь возможность запускать этот скрипт, спрашивать у меня имя пользователя, затем он выходит и создает папку, а затем дает тому же пользователю полные права на это на основе имени пользователя, которое я ему предоставил. Я могу использовать Smithd как пользователь, например:

New-Item \\ fileserver \ home $ \ Smithd -Type Directory

Но не может заставить его ссылаться на пользователя следующим образом:

New-Item \\ fileserver \ home $ \ $ username -Type Directory

Вот что у меня есть:

Создание новой папки и установка разрешений NTFS.

$username = read-host -prompt "Enter User Name"

New-Item \\\fileserver\home$\$username –Type Directory

Get-Acl \\\fileserver\home$\$username  

$acl = Get-Acl \\\fileserver\home$\$username

$acl.SetAccessRuleProtection($True, $False)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Domain\Domain Admins","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Domain\"+$username,"FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

Set-Acl \\\fileserver\home$\$username $acl

Я попробовал несколько способов заставить его работать, но не повезло. Любые идеи или предложения будут приветствоваться, спасибо.


5
2017-11-15 23:00


Источник


Я не получаю ошибок, пытаясь создать каталоги с первыми двумя строками вашего скрипта, как они появляются в вопросе. Из-за того, что вы читаете свой вопрос, похоже, что вы получаете ошибку. Не могли бы вы обновить свой вопрос с точной ошибкой, которую вы получаете? - MDMarra
какую ошибку вы получаете? Вы можете попробовать разбить его, как New-Item -Path \\ fileserver \ home $ -Name $ username -Type Directory. Не знаю, будет ли это работать. - Shawn Melton
Клянусь, что вторая строка не работала для меня раньше, но теперь она отлично работает, просто меняя переменную имени пользователя. : / Я, очевидно, делал что-то неправильно раньше или смешиваюсь во время тестирования. Повторив это снова, я обновляю сообщение с конкретными ошибками и подробностями относительно того, где он висит. Спасибо всем за ваш вклад. - Don
Ну, я не уверен, что на днях случилось не так, но сегодня это работает отлично с помощью сценария выше, за исключением того, что я изменил имя домена «+» на то, что я изначально имел, Домен \ $ имя пользователя». Я могу только предположить, что я что-то толкнул. Спасибо всем за вашу помощь! Это одна часть скрипта, над которым я работаю, в другой части все еще есть небольшой захват, который импортирует активный модуль каталога, и будет ли он сам работать. :) Благодаря! - Don


Ответы:


На моей предыдущей работе я вспоминаю возможность использовать старую команду «mkdir» для создания папок в моих сценариях powershell, но для начала я бы предложил сначала указать ваш путь и тестирование с помощью echo / write-host. Попробуйте это, просто чтобы проверить:

write-host "\\${file_server}\home$\${user_name}"

У меня нет доступа к машине Windows для тестирования, но я предполагаю, что «$» также может быть проблемой.

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

write-host "\\${file_server}\home`$\${user_name}"

и не продолжайте, пока не узнаете, что строка вам по душе. Я не думаю, что вам нужен «-prompt» в вашем хосте, хотя это, вероятно, не проблема. Запись-хостинг - это всегда хорошая проверка работоспособности.

Я надеюсь скоро получить доступ к Windows-машине, чтобы я мог лучше помочь.

Кроме того, если вы заинтересованы, вы можете указать имя пользователя в качестве параметра в верхней части программы, чтобы вы могли либо повторно вызвать скрипт из другого, который читает имена из файла из $ file_server, $ user_name пар. Просто плюньте param( [string] $file_server, [string] $user_name )

Удачи! :)


2
2017-11-19 18:13



Спасибо за ответ! Когда я выполняю вышеуказанные строки, я получаю \\\ home $ \ и \\\ home '$ \ соответственно. Я бы хотел, чтобы он установил, где я устанавливаю имя пользователя в верхней части скрипта, это на самом деле то, как я пытаюсь настроить его в конечном итоге. Сначала попросите ввести имя пользователя, а затем в любое время, когда я хочу использовать имя пользователя, просто используйте $ username. Я просто не могу понять, как заставить его использовать переменную $ username, так как я бы хотел, чтобы этот скрипт мог использовать любой новый сотрудник (и не нужно каждый раз вручную менять код. ! - Don
Мне жаль, что у меня не было Windows-машины для тестирования. Я полностью против этого, lol. Ты пробовал write-host "username=$username" сразу после назначения $ username? Если он выводит «username =», то он должен быть read-host. Кроме того, у нас есть несоответствие, когда я использую $ user_name и вы $ username. Извини за это. Я уверен, что вы, вероятно, использовали $ username, но на всякий случай подумали, что я дважды проверю. Хотел бы я помочь больше. Удачи, Дон. - kikuchiyo


Ознакомьтесь с этими статьями:

http://powershell.com/cs/blogs/tobias/archive/2011/09/21/applying-ntfs-permissions.aspx

а также

http://consulting.risualblogs.com/blog/2011/03/25/powershell-to-assign-permissions-to-home-directories/

Это было бы полезно ..


-2
2017-11-16 01:17



Нет проблем с проголосованием, но кто-то, кто голосует, действительно ожидает, что я напишу весь сценарий здесь, я думаю. Чтобы кто-то мог смешивать ресурсы выше и писать сценарий и запускать его, как я это делал и проверял, конечно, перед публикацией здесь ... - The_aLiEn
Просто связывание не рекомендуется. Это сайт Q & A, который нельзя смешивать с сайтом Q & link на сайте. Что происходит через год, когда эти ссылки нарушаются? Вам нужно больше мяса и картофеля в вашем ответе и поддержать его ссылками. :) - Nixphoe
Кроме того, у ОП возникает проблема с созданием папки, а не с установкой разрешений. Попробуйте на самом деле читать больше, чем название. Иногда они вводят в заблуждение. - MDMarra