Назад | Перейти на главную страницу

Как дать пользователю права NTFS на папку через Powershell

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

New-Item \\ fileserver \ home $ \ Smithd - каталог типа

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

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

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

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

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

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

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

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

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

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

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

Удачи! :)