Администраторам часто нужно(или просто хочется) выполнять настройки удаленно. Это позволяет не отрывать лишний раз от работы пользователя и укреплять знание принципов работы ОС.
Разберемся как создать на удаленном ПК сетевую папку используя PsExec
Создаем сетевую папку
Одновременно создать папку и назначить на нее права средствами CMD нельзя, поэтому предварительно создадим папку
psexec \\COMP2135 cmd "/c md C:\Users\Username\Test"
По умолчанию, если при открытии сетевого доступа к папке вы не назначили нужные вам права, будет назначен доступ на чтение только для группы Everyone.
Делаем папку сетевой
psexec \\COMP2135 net share ShareFolder=C:\Users\Username\Test
Если теперь вы попробуете добавить папке права следующей командой,
psexec \\COMP2135 net share ShareFolder=C:\Users\Username\Test /grant:"user1",full /grant:"user2",change /grant:"user3",read
то получите сообщение о том, что
Общий доступ к этому имени уже открыт.
По описанной выше причине, расшаривать папку нужно сразу, указывая нужный набор прав, иначе придется снять с папки сетевой доступ командой
psexec \\COMP2135 net share Test /delete
и выдать доступ по новой, с уже заданными правами.
Upd: Добавление прав на сетевую папку средствами Powershell
Для этого можно использовать командлет из модуля SmbShare
Grant-SmbShareAccess -CimSession "ServerName" -Name "ShareName" -AccountName "Domain\Username$" -AccessRight Read -Confirm:$False
Проверить успех операции можно командлетом
Get-SmbShareAccess -Name "ShareName"
Назначение сетевых прав через Powershell
Необходимость в предварительном создания папки никуда не пропала
psexec -s \\COMP2135 powershell -command New-Item -ItemType Directory -Path C:\Users\Username\Test
Делаем папку общей и назначаем ей права сетевого доступа
psexec -s \\COMP2135 powershell -windowStyle hidden -command New-SmbShare -Name Test -Path C:\Users\Username\Test -FullAccess user1,user2 -ReadAccess user3
Назначение прав NTFS
Вспомним как назначаются права доступа через Powershell
# Считываем текущие параметры ACL для нашей папки $acl = Get-Acl C:\Users\Username\Test # Создаем набор разрешений, который мы назначим папке $permission = "user1","fullcontrol","containerinherit,objectinherit","none","allow" # Смотрим текущие ACE $acl.Access # ACE - Запись соответствия пользователя и его прав доступа для данного объекта # Создаем объект ACE на основе ранее записанных разрешений $ace = new-object security.accesscontrol.filesystemaccessrule $permission # Вносим сделанные изменения в исходный ACL $acl.setaccessrule($ace) # Назначаем ACL на выбранную папку $acl | set-acl C:\Users\Username\Test
Как видим, параметры доступа в Powershell не задаются одной строкой.
Поэтому для удаленного назначения прав NTFS стоит воспользоваться CMD утилитой icacls:
psexec \\COMP2135 icacls "C:\Users\Username\Test" /grant user1:F /Q
/Q — не выводить сообщения о успешной выполненных командах
user1:F — предоставить пользователю user1 полный доступ.
Так же допустимы варианты и другие варианты. Например:
R — доступ на чтение
W — доступ на запись
А более подробно про ACL можно прочитать в отдельно посвященной этой теме статье