2015-11-17 2 views
2

Привет, я хочу предоставить пользователям домена полный доступ к папке с PowerShell. Я работаю с этим набором кода, полученным от исследований с помощью Technet и блогов. У меня все еще есть проблемы.Powershell - Настройка разрешений на папку

Я получаю эту ошибку, когда я запускаю код чуть ниже:

Exception calling "SetAccessRule" with "1" argument(s): "Some or all  identity references could not be translated." 
At line:13 char:1 
+ $acl.SetAccessRule($accessRule) 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : IdentityNotMappedException 

Вот мой код:

$directory = "C:\inetpub\wwwroot\app.webservice" 
$domainName = (gwmi Win32_NTDomain).DomainName 
$group = 'Domain Users' 
$inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit" 
$propagation = [system.security.accesscontrol.PropagationFlags]"None" 
$acl = (Get-Item $directory).GetAccessControl("Access") 
$user = "{0}\{1}" -f "$domainName", $group 
$user.trim() 
$access = "FullControl" 
$accessType = "Allow" 
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule -ArgumentList @("$user","$access", "$inherit", "$propagation", "$accessType") 
$acl.SetAccessRule($accessRule) 
set-acl $directory $acl 

Я попытался заменить пользовательскую переменную $ с «домена \ Пользователи домена "и код работает так, как ожидалось. Я не смог понять, как правильно передать переменную $ user, чтобы пользовательский параметр мог быть передан, а не жестко закодирован.

Благодаря

ответ

1

Проверьте значение переменной DomainName. Если я запускаю тот же код здесь, я получаю не только домен, в котором я запущен, но и все доверенные домены как массив. Это означает, что переменная $ user содержит что-то вроде MyDomain OtherDomain\Domain Users.

Я рекомендую объявить домен как $domainName = "MyDomain", если это возможно. Если вам нужно динамически получить домен, который вам нужен, чтобы проверить массив;

$domainName = (gwmi Win32_NTDomain).DomainName 
if ($domainName -is [array]) { $domainName = $domainName[0] } 

ПРИМЕЧАНИЕ: Мой домен первым по алфавиту, так что я не знаю, если текущий домен отображается первым, или если они просто отображаются в алфавитном порядке. Вам нужно будет протестировать и найти решение, которое будет работать для вас.

EDIT: Похоже, $domainName = $env:USERDOMAIN может сделать трюк

+2

Я бы определенно пойти на '$ ENV: USERDOMAIN' (пользователя) или' (Gwmi Win32_ComputerSystem) .Domain' (машина) вместо 'Win32_NTDomain' –

+0

Спасибо Deadly-бублик. Этот код работает и для того, что мне тоже нужно. – JustJohn

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