Contents of this directory is archived and no longer updated.

Примечание: данный пост перепечатан в связи с закрытием бложиков на spaces.live.com, как имеющий какую-то ценность для автора и/или читателей.


В предыдущих постах я рассказывал про управление списками ACL для объектов файловой системы и реестра. Для этих целей использовались встроенные команддеты Get-Acl и Set-Acl. Весьма тесно с этой темой выступает тема управления правами доступа общего ресурса (т.н. Share Permissions). PowerShell не имеет встроенного механизма управления сетевыми ресусрами, только средствами классов WMI. Управление шарами достаточно очень простое в PowerShell до тех пор, пока это не коснётся вопроса управления Share Permissions. Но начнём с самого простого - создание и удаление сетевого ресурса, а так же маппингом сетевых дисков. Для этого используется WMI класс Win32_Share. По ссылке можно узнать какими свойствами и методами обладает этот класс, поэтому здесь перечислять всё это не буду. Для создания нового сетевого ресурса (шары) нам потребуется метод Create с указанием необходимых параметров (которые так же перечислены по ссылке). Попробуем:

$share = [wmiClass] 'Win32_share'
$share.create("C:\Test", "UserShare", "0", "100", "Network share for users")

В первой строчке я вызвал класс Win32_Share и второй строчкой использовал метод Create, чтобы создать новый сетевой ресурс из папки C:\Test с именем UserShare, тип сетевого ресура - Disk Drive, максимальным количеством подключений равным 100 и описанием (поле Descritpion) Network share for users. В Windows Server 2003 и выше при создании нового общего ресурса права на ресурс назначаются только группе Everyone - Allow Read. Этот код можно записать и одной строчкой вообще без переменных:

([wmiClass] 'Win32_share').Create("C:\Test", "UserShare", "0", "100", "Network share for users")

Эта строка выдаст результат в виде таблицы. Последняя строчка ReturnValue будет содержать код возврата, который содержит информацию об операции. Если это 0, то значит, что команда исполнилась успешно и сетевая шара создалась (таблица сопоставления кода возврата текстовому значению находится в описании метода Create). Чтобы посмотреть список сетевых ресурсов на локальном компьютере достаточно выполнить команду Get-WmiObject Win32_Share. Используя метод Delete можно удалять сетевые ресурсы:

$share = Get-WmiObject Win32_Share | where {$_.name -eq "usershare"}
$share.Delete()

или одной строчкой:

(Get-WmiObject Win32_Share | where {$_.name -eq "usershare"}).Delete()

Здесь вместо параметра Name можно указать любой другой, который содержится к классе Win32_Share. Диски так же можно мапить, причём сделать это можно двумя путями. Первый вариант создаст новый диск PowerShell с именем User и который будет доступен только из PowerShell (из Explorer'а и других приложений он не будет доступен. Иногда это очень удобно) и классический маппинг дисков, который будет доступен из проводника:

New-PSDrive User FileSystem \\DC1\UserShare
(new-object -com WScript.Network).MapNetworkDrive("z:","\\dc1\UserShare")

Как же отмапить диски обратно? С точностью до наоборот:

Remove-PSDrive User
(new-object -com WScript.Network).RemoveNetworkDrive("z:")

В принципе, этот материал достаточно обширно расписан в интернете на англоязычных ресурсах и я опубликовал этот пост в качестве вводной статьи для использования метода SetShareInfo, который является достаточно полезным, интересным и, в то же время, достаточно сложным. Так же в следующей статье расскажу о некоторых недостатках упрощённого создания сетевых папок, как показано в примерах этой статьи. Вобщем, ждите продолжения :-)


Share this article:

Comments:

Alexey

Добрый день! У меня вопрос по данной теме. При выполнении: $share = Get-WmiObject -Class Win32_Share $share.Create("C:\test1","UserShare","0","100","Network sharefor user") выдается ошибка:Произошла ошибка при вызове метода, так как [System.Object[]] не содержит метод с именем "Create". В :строке:4 позиция:13 + $share.Create <<<< ("C:\test1","UserShare","0","100","Network sharefor user") PowerGUI показал что у $share нет свойства create. По гугли данную ошибку но ничего не нашл. Можете подсказать как решить данную проблему?

Vadims Podāns

ага, у объекта нет такого метода, зато есть у класса (статический метод): $share = [wmiClass] 'Win32_share'

Comments are closed.