Изменение прав доступа к сетевому ресурсу Windows с помощью инструментов командной строки

Команда NET SHARE – общие ресурсы компьютера

А для простого просмотра общих ресурсов компьютера используется команда NET VIEW
.

Here is my current code:

 NET SHARE "NameOfShare=D:\Shares" /GRANT:Everyone,FULL /CACHE:None
FOR /D %%G IN (D:\Shares\00_Users\*.*) DO NET SHARE "%%G=%%G" /GRANT:Everyone,FULL /CACHE:None 

Where I am running into issues is the “%%G=%%G” – I want to replace the first part of the parameter with JUST the name of the folder, not the whole path.

Thank you for your help!

As far as I’m aware, this is done via the net
command.

However, the help section isn’t very helpful, as it only shows me the secondary options and not how to use those.

Bill the Lizard's user avatar

asked Oct 8, 2009 at 10:55

KdgDev's user avatar

 net share sharename=drive:path 
 net share Public=s:\Public 

The above command will automatically grant “Everyone” with Read permissions only. If you want to grant Everyone with Full Control the command would be:

 net share Public=s:\Public /GRANT:Everyone,FULL 

answered Mar 4, 2014 at 7:16

Dave Lucre's user avatar

Dave Lucre

1 gold badge
14 silver badges
16 bronze badges

Community's user avatar

answered Oct 8, 2009 at 10:59

Sinan Ünür's user avatar

Sinan Ünür

15 gold badges
196 silver badges
339 bronze badges

FOR ANYONE STILL FINDING THIS QUESTION, YOU CAN USE POWERSHELL:

 Grant-SmbShareAccess -Name example -AccountName Administrators -AccessRight Full -Force
Grant-SmbShareAccess -Name example -AccountName Everyone -AccessRight Change -Force 

HERE IS MY ORIGINAL PRE-POWERSHELL ANSWER:

 NET SHARE example /DELETE /Y
NET SHARE example=C:\FolderPath /GRANT:Everyone,Change /GRANT:Administrators,Full /UNLIMITED 
 SetACL.exe -on "example" -ot shr -actn ace -ace "n:S-1-1-0;p:change"
SetACL.exe -on "example" -ot shr -actn ace -ace "n:S-1-5-32-544;p:full" 

For efficiency multiple changes can be merged into a single command:

 SetACL.exe -on "example" -ot shr -actn ace -ace "n:S-1-1-0;p:change" -ace "n:S-1-5-32-544;p:full" 

Если у вас Windows 8 или свежее, всё очень и очень просто. В этих ОС есть готовый модуль для PowerShell. Расшарить папку очень просто:

 New-SmbShare -Name $sharename -Path $sharepath -ContinuouslyAvailable 0 –FullAccess Все 
  • $sharename — имя шары
  • $sharepath — путь к шаре
  • ContinuouslyAvailable — доступность после перезагрузки (0 — недоступны, 1 — доступны)
  • –FullAccess — полный доступ

В скрипте надо сформаровать переменную, содержащую имя и путь к шаре, вида

 sharename=DISK:\\sharepath 
 $sharename = "mainshare"
$sharepath = $volumeletter + ":\main"
$sharecmd = $sharename+'='+$sharepath 
 net share $sharecmd --% /GRANT:all,FULL 

Что тут важно?

  1. «—%» — все переменные слева от этой последовательности powershell преобразует в значения до запуска команды
  2. Из powershell в командную строку плохо передаются русские символы, да и вообще, все национальные символы, по этому, если надо добавить доступ служебной группе «Все», самый простой способ выкрутиться:
    1. Создать группу All
    2. Сделать членом группы All, группу Все 🙂
:/>  Как очистить память на компьютере с Windows 7 и Windows 10

Впервые о схеме сетевой организации Microsoft я услышал в марте 1985 г. при появлении программы IBM PC Network Support Program, выпущенной Microsoft, а точнее, IBM. Это была сетевая операционная система

, отличительной особенностью которой стали «серверы», функционирующие на персональных компьютерах под управлением MS-DOS, что, по существу, исключало возможность сколько-нибудь серьезной конкуренции для Novell со стороны Редмонда на протяжении последующих восьми лет. Однако эта первая сетевая технология (известная также под названием MS-Net) уже 21 год приносит мне большую пользу, поскольку позволяет осуществлять все сетевое администрирование в режиме командной строки. Хотите верьте, хотите нет, но и в Windows Server 2003 по-прежнему присутствует поддержка IBM PC Network Support Program, т. е. программа продолжает работать.

Синтаксис

 net share 

и нажать Enter, мы получим поименный список схем совместного использования с указанием точного пути к ресурсам и любых относящихся к ним комментариев. При этом регистр ввода не имеет значения, как и практически для всех встроенных инструментов Windows, запускаемых из командной строки.

Чтобы создать новую схему совместного использования ресурса, следует набрать (одной строкой)

 net share
/remark: " "
/grant: ,full|change|read
/grant: ,full|change|read 

Проиллюстрируем эту несколько громоздкую команду на примере:

 net share mytest=C:	est
/remark: "Playing with Net Share"
/grant:administrator,full
/grant:otherguy,change 

Изменение разрешений совместного использования

 net share mytest /delete 

Кэширование

 net share mytest=C:	est
/remark: "Playing with Net Share"
/grant:administrator,full
/grant:otherguy,change
/cache:none 

По умолчанию общие папки начиная с WIndows 2003 (если не ошибаюсь) создаются с разрешением everyone=read. Однако одной из рекомендованных практик раздачи разрешений является выдача на доступ к общей папке everyone=full control, и раздача необходимых разрешений уже средствами NTFS. Это сильно упрощает администрирование, так как не приходится сверять оба списка доступа.

 PS C:\Windows\System32> net share /?
The syntax of this command is:
NET SHARE
sharename sharename=drive:path  [/GRANT:user,[READ | CHANGE | FULL]]  [/USERS:number | /UNLIMITED] [/REMARK:"text"] [/CACHE:Manual | Documents| Programs | None ] sharename [/USERS:number | /UNLIMITED] [/REMARK:"text"] [/CACHE:Manual | Documents | Programs | None] {sharename | devicename | drive:path} /DELETE sharename \\computername /DELETE 
 PS C:\Windows\System32> net share myshare=Q:\temp /GRANT:everyone,FULL
The syntax of this command is:
. 

Что интересно, если запустить cmd.exe и выполнить в нём ту же команду, то всё отрабатывает прекрасно. В чем же дело? Выяснить как эта команда выглядит для net.exe поможет файл testargs.cmd
который я описал в предыдущем посте из серии:

 PS C:\Windows\System32> c:\root\testargs.cmd share myshare=Q:\temp /GRANT:everyone,FULL
Arg1: [share]
Arg2: [myshare]
Arg3: [Q:\temp]
Arg4: [/GRANT:everyone]
Arg5: [FULL] 

Теперь хорошо видно что PowerShell посчитал /GRANT:everyone,FULL массивом из двух строк (из за запятой), и передал их утилите по отдельности. Избежать этого опять же несложно, либо замаскировать запятую с помощью обратного апострофа:

 PS C:\Windows\System32> net share myshare=Q:\temp /GRANT:everyone`,FULL
myshare was shared successfully. 

либо заключить последний параметр в кавычки.

 PS C:\Windows\System32> net share myshare=Q:\temp "/GRANT:everyone,FULL"
myshare was shared successfully. 

Как видите всё достаточно просто 🙂

 # $folder is a DirectoryInfo object
Function Create-FileShare($folder)
{ $name = $folder.Name $path = $folder.FullName $description = "$name" $domain = "example.com" #AD Domain name here (Optional/Not really used/Here for completeness) $Method = "Create" $sd = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance() #AccessMasks: #2032127 = Full Control #1245631 = Change #1179817 = Read #Share with the user $ACE = ([WMIClass] "Win32_ACE").CreateInstance() $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance() $Trustee.Name = $name $Trustee.Domain = $Null #original example assigned this, but I found it worked better if I left it empty #$Trustee.SID = ([wmi]"win32_userAccount.Domain='$domain',Name='$name'").sid $ace.AccessMask = 1245631 $ace.AceFlags = 3 #Should almost always be three. Really. don't change it. $ace.AceType = 0 # 0 = allow, 1 = deny $ACE.Trustee = $Trustee $sd.DACL += $ACE.psObject.baseobject #Share with Domain Admins $ACE = ([WMIClass] "Win32_ACE").CreateInstance() $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance() $Trustee.Name = "Domain Admins" $Trustee.Domain = $Null #$Trustee.SID = ([wmi]"win32_userAccount.Domain='$domain',Name='$name'").sid $ace.AccessMask = 2032127 $ace.AceFlags = 3 $ace.AceType = 0 $ACE.Trustee = $Trustee $sd.DACL += $ACE.psObject.baseobject $mc = [WmiClass]"Win32_Share" $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} }
} 

Синтаксис команды NET SHARE

  • имя_ресурса

    – Задает сетевое имя данного совместно используемого ресурса. Если ввести в качестве параметра только имя ресурса, то выводится информация об этом ресурсе.
  • диск:путь

    – Указывает абсолютный путь к совместно используемому каталогу.
  • /USERS:число

    – Устанавливает максимальное число пользователей, которые могут одновременно получить доступ к совместно используемому ресурсу.
  • /UNLIMITED

    – Определяет, что ограничения на число пользователей, которые могут получить доступ к совместно используемому ресурсу, отсутствует.
  • /REMARK:”текст”

    – Задает краткое примечание, описывающее ресурс. Текст должен быть заключен в кавычки.
  • имя_устройства

    – Задает один или несколько принтеров (от LPT1: до LPT9:) совместно используемых под данным именем ресурса.
  • /CACHE:Manual

    – Задает ручное кэширование программ и документов на этом общем ресурсе.
  • /CACHE:Documents

    – Задает автоматическое кэширование документов на этом общем ресурсе.
  • /CACHE:Programs

    – Задает автоматическое кэширование документов и программ на этом общем ресурсе.
  • /CACHE:None

    – Отключает кэширование на этом общем ресурсе.
  • /DELETE

    – Прекращает совместное использование данного ресурса.

:/>  Проблема с дешифрованием файла, зашифрованного с помощью power shell

Пример команды NET SHARE

Примеры команды NET SHARE

  • Чтобы вывести справку о команде введите – NET HELP SHARE
  • Чтобы вывести сведения об общих ресурсах компьютера, введите – NET SHARE
  • Чтобы сделать папку «C:\Docs» общим ресурсом Sharedocs и включить примечание к нему, введите – NET SHARE Sharedocs=c:\Docs /remark:”Для отдела 123″
  • Чтобы отменить общий доступ к ресурсу Sharedocs, созданному в предыдущем примере, введите – NET SHARE Sharedocs /delete
  • Чтобы сделать папку «C:\123» общим ресурсом Share1, введите – NET SHARE Share1=c:\123

Видео – Работа с утилитой NET SHARE

Help

 $ net use /? 
net use Help
net use Help

Set Permission For Share Access

 /GRANT:username,right 
 $ net share myshare myshare /GRANT:john,FULL 

Unmount Share

 $ net use z: \\192.168.122.167\myshare /delete 

Create Share

 $ net share "myshare=c:\cygwin64" 
net use - Create Share
net use – Create Share

List Mounted Shares

 $ net use 
List Mounted Shares with net use
List Mounted Shares with net use
  • Status
     shows current situation like connected or not connected
  • Local
     shown the local mount point
  • Remote
     shows remote file share full path including the host name/IP address and the path
  • Network
     shows network used to access share.

Delete or Remove Share From Remote Computer

 $ net share myshare \\192.168.122.66 /delete 

Syntax

 net use [option] 

Delete or Remove Share With Share Name

 $ net share myshare /delete 
Delete or Remove Share
Delete or Remove Share

List Shares

 $ net share 
List Shares with net use
List Shares with net use
  • Share name
     is the name used to mount this share in the client side
  • Resource
     is the path the share will be mapped
  •   Remark
     is comments  and notes about this share which is set while share creation.

Mount Share

 $ net use z: \\192.168.122.167\myshare 
Mount Share with net use
Mount Share with net use

Delete or Remove Share With Physical Location

 $ net share c:\cygwin64 /delete