Мы будем развертывать «динамические» классы с использованием SCCM, и, следовательно, нам также потребуется на лету создавать подразделения и соответствующих пользователей и домашних пользователей. В настоящее время я пытаюсь понять, как отредактировать права безопасности для этих домашних компьютеров с помощью сценария. У меня был ограниченный успех в использовании Google, потому что многие из них выглядят устаревшими, поэтому я хотел узнать, что ServerFault считает лучшим способом.
Что мне нужно сделать: - Создать папку (это не совсем проблема) - Поделиться ею и установить разрешения на Полный доступ для всех - изменить настройки NTFS на «Изменить» или «Изменить» для одного пользователя, рекурсивно
Остальные части скрипта в настоящее время выполняются в vbscript, но я, очевидно, могу вызвать другой скрипт из этого, если потребуется. PowerShell может быть вариантом (если это возможно для начала), но я очень хочу услышать и другие варианты!
Спасибо
Мне нравится CMD.EXE ... (не совсем):
mkdir x:\directory\to\make
cacls x:\directory\to\make /e /t /g DOMAIN\user:C
net share sharename=X:\directory\to\make
Это создает каталог, добавляет «ДОМЕН \ пользователь» с разрешениями «Изменить» в каталог (который наследуется для подпапок и файлов) и совместно использует каталог. Первые две команды могут быть запущены с путями UNC, если вы хотите, но net share
должен выполняться на сервере, на котором находится общий каталог. (Был старый rmtshare.exe
инструмент в одном из дистрибутивов Windows NT Resource Kit, который имел примерно тот же синтаксис, что и net share
но мог создавать общие ресурсы на удаленных компьютерах.)
Вот сценарий PowerShell, который делает то, что вы хотите.
$Computer = "localhost"
$Class = "Win32_Share"
$Method = "Create"
$name = "foldername$"
$path = "C:\Folderpath"
$description = "This is shared for me to test"
$sd = ([WMIClass] "\\$Computer\root\cimv2:Win32_SecurityDescriptor").CreateInstance()
$ACE = ([WMIClass] "\\$Computer\root\cimv2:Win32_ACE").CreateInstance()
$Trustee = ([WMIClass] "\\$Computer\root\cimv2:Win32_Trustee").CreateInstance()
$Trustee.Name = "EVERYONE"
$Trustee.Domain = $Null
$Trustee.SID = @(1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0)
$ace.AccessMask = 2032127
$ace.AceFlags = 3
$ace.AceType = 0
New-Item -type directory -path $path
$Acl = Get-Acl $path
$Ar = New-Object system.security.accesscontrol.filesystemaccessrule("user\domain","Write","Allow")
$Acl.SetAccessRule($Ar)
Set-Acl $path $Acl
$ACE.Trustee = $Trustee
$sd.DACL += $ACE.psObject.baseobject
$mc = [WmiClass]"\\$Computer\ROOT\CIMV2:$Class"
$InParams = $mc.psbase.GetMethodParameters($Method)
$InParams.Access = $sd
$InParams.Description = $description
$InParams.MaximumAllowed = $Null
$InParams.Name = $name
$InParams.Password = $Null
$InParams.Path = $path
$InParams.Type = [uint32]0
$R = $mc.PSBase.InvokeMethod($Method, $InParams, $Null)
switch ($($R.ReturnValue))
{
0 {Write-Host "Share:$name Path:$path Result:Success"; break}
2 {Write-Host "Share:$name Path:$path Result:Access Denied" -foregroundcolor red -backgroundcolor yellow;break}
8 {Write-Host "Share:$name Path:$path Result:Unknown Failure" -foregroundcolor red -backgroundcolor yellow;break}
9 {Write-Host "Share:$name Path:$path Result:Invalid Name" -foregroundcolor red -backgroundcolor yellow;break}
10 {Write-Host "Share:$name Path:$path Result:Invalid Level" -foregroundcolor red -backgroundcolor yellow;break}
21 {Write-Host "Share:$name Path:$path Result:Invalid Parameter" -foregroundcolor red -backgroundcolor yellow;break}
22 {Write-Host "Share:$name Path:$path Result:Duplicate Share" -foregroundcolor red -backgroundcolor yellow;break}
23 {Write-Host "Share:$name Path:$path Result:Reedirected Path" -foregroundcolor red -backgroundcolor yellow;break}
24 {Write-Host "Share:$name Path:$path Result:Unknown Device or Directory" -foregroundcolor red -backgroundcolor yellow;break}
25 {Write-Host "Share:$name Path:$path Result:Network Name Not Found" -foregroundcolor red -backgroundcolor yellow;break}
default {Write-Host "Share:$name Path:$path Result:*** Unknown Error ***" -foregroundcolor red -backgroundcolor yellow;break}
}
Я скопировал его и пропатчил с нескольких других сайтов, 1 и 2. Он работает на моей машине с Windows 7. Для получения дополнительной информации об объекте filesystemaccessrule см. Вот.
Должен уметь использовать команду calcs
.