Встроенный PowerShell модуль SMBShare позволяет создавать, тонко настраивать и управлять общими сетевыми папками в Windows. В этой статье рассмотрим особенности управления сетевыми SMB папками Windows с помощью PowerShell. Вы можете использовать эти примеры для простого и быстрого управления настройками ваших файловых SMB серверов и сетевых папкок в различных сценариях автоматизации.
В модуле SMBShare доступно 42 команлета PowerShell для управления сетевыми папками. Их полный список можно вывести так:
Get-Command -Module SMBShare
Вывести текущую конфигурацию SMB сервера Windows:
Get-SmbServerConfiguration
AnnounceServer : False AsynchronousCredits : 64 AuditSmb1Access : False AutoDisconnectTimeout : 15 AutoShareServer : True AutoShareWorkstation : True CachedOpenLimit : 10 DurableHandleV2TimeoutInSeconds : 180 EnableAuthenticateUserSharing : False EnableDownlevelTimewarp : False EnableForcedLogoff : True EnableLeasing : True EnableMultiChannel : True EnableOplocks : True EnableSecuritySignature : False EnableSMB1Protocol : False EnableSMB2Protocol : True EnableStrictNameChecking : True EncryptData : False IrpStackSize : 15 KeepAliveTime : 2 MaxChannelPerSession : 32 MaxMpxCount : 50 MaxSessionPerConnection : 16384 MaxThreadsPerQueue : 20 MaxWorkItems : 1 NullSessionPipes : NullSessionShares : OplockBreakWait : 35 PendingClientTimeoutInSeconds : 120 RejectUnencryptedAccess : True RequireSecuritySignature : False ServerHidden : True Smb2CreditsMax : 2048 Smb2CreditsMin : 128 SmbServerNameHardeningLevel : 0 TreatHostAsStableStorage : False ValidateAliasNotCircular : True ValidateShareScope : True ValidateShareScopeNotAliased : True ValidateTargetName : True
Чтобы изменить эти параметры используйте командлет Set-SmbServerConfiguration:
Например, чтобы отключить использование устаревшего протокола SMB 1, выполните:
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
Вывести список версий протокола SMB, использующихся активными клиентами для подключения к общим папкам на этом файловом сервере:
Get-SmbConnection
Чтобы ограничить пропускную способность для файлового SMB трафика, можно настроить политику QoS для SMB сервера. Например, следующая команда ограничит максимальную используемую ширину канала для SMB трафика до 10 Мб:
Set-SmbBandwidthLimit -Category Default -BytesPerSecond 10MB
Создать сетевую папку Windows с помощью PowerShell
Чтобы вывести полный список сетевых папок, доступных на компьютере, выполните:
Get-SmbShare
На этом компьютере открыт доступ к административным общим ресурсам и к каталогу Distr.
Чтобы создать новую общую сетевую папку, выполните команду:
New-SmbShare -Name Scripts -Path C:\PS -FullAccess winitpro\spb_admins, winitpro\msk-man01$ -ChangeAccess "winitpro\msk-man01_script_rw" -ReadAccess “$env:USERDOMAIN\domain users” –description “Collection of management PowerShell scripts”
В этом примере мы создали сетевую папку и предоставили права доступа доменным группам и одному компьютеру.
Дополнительно при создании папки можно использовать такие параметры:
-
-CachingMode [None|Manual|Programs|Documents|BranchCache]
– задать режим кэширования для офлайн доступа (автономных файлов); -
-EncryptData $True
– включить шифрование SMB трафика; -
-FolderEnumerationMode [AccessBased | Unrestricted]
– включить опцию перечисления на основании доступа (Access-based Enumeration). Позволяет скрыть в сетевой папке объекты, на которых у пользователя нет доступа; -
-CompressData $True
– включить сжатие при передаче файлов по SMB; -
-ConcurrentUserLimit 50
– позволяет ограничить количество одновременных подключений к папке (по умолчанию 0, не ограничено); -
-Temporary
– создать временную сетевую папку (пропадет после следующей перезагрузки Window).
Полный список настроек сетевой папки можно вывести:
Get-SmbShare -Name scripts| select *
Чтобы удалить сетевую папку:
Remove-SmbShare Scripts
Добавить в список доступа сетевой папки разрешения на запись для указанного пользователя:
Grant-SmbShareAccess -Name Scripts -AccountName "winitpro\kbuldogov" -AccessRight Change –force
Вывести текущий список доступа к общей папке:
Get-SmbShareAccess scripts
Удалить группу из списка доступа:
Revoke-SmbShareAccess -Name Scripts -AccountName Everyone –Force
Принудительный запрет на доступ к общей папке (запрещающее разрешение имеет более высокий приоритет):
Block-SmbShareAccess -Name Scripts -AccountName winitpro\ExtUsers -Force
В большинстве случаев на уровне сетевой папки предоставляют доступ Everyone RW, а фактически права доступа к папке определяются на уровне NTFS.
Текущий NTFS ACL для сетевой папки можно получить с помощью команды:
(get-acl \\msk-man01\scripts).access
Чтобы изменить права доступа, используйте Set-Acl (подробнее про управление NTFS разрешениями с помощью PowerShell).
Управление открытыми файлами в сетевой папке
Командлеты модуля SMBShare можно использовать для просмотра списка файлов, открытых клиентами в сетевой папке на файловом сервере.
Вывести список открытых файлов с именами пользователей, именами компьютеров (IP адресами), и путями к файлам:
Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionID
Вывести список файлов, открытых определённым пользователем:
Get-SMBOpenFile –ClientUserName "corp\kbuldogov" |select ClientComputerName,Path
Закрыть файл, открытый и заблокированный пользователем:
$sessn = New-CIMSession –Computername msk-fs01
Get-SMBOpenFile -CIMSession $sessn | where {$_.Path –like "*godovoy_otchet_2021.docx"} | Close-SMBOpenFile -CIMSession $sessn
Подключение сетевых дисков с помощью командлетов SmbMapping
Командлеты форматы SbmMapping используются для управления сетевыми дисками.
Чтобы подключить удаленную сетевую папку в сетевой диск U:, выполните команду:
New-SmbMapping -LocalPath U: -RemotePath \\msk-man01\scripts -UserName kbuldogov -Password mypass –Persistent $true -SaveCredential
- Без параметра Persistent сетевой диск будет доступен только до перезагрузки компьютера;
- Параметр SaveCredential позволяет сохранить учетные данные пользователя для подключения в диспетчер учетных данных Windows Credential Manager
Вывести список подключенных сетевых папок:
Get-SmbMapping
Для удаления сетевого диска:
Remove-SmbMapping U: -force
The built-in SMBShare PowerShell module allows you to create, configure, and manage shared network folders in Windows. In this article, we will look at how to manage file shares (SMB network folders) using PowerShell. You may use these examples to quickly and easily manage your SMB file servers and shared folders in different automation scenarios.
Contents:
- Creating a Shared Folder onWindows with PowerShell
- How to View and Manage Open Files in Windows Shares?
- Map SMB Network Drives with SmbMapping Cmdlets
The SMBShare module contains 42 PowerShell cmdlets to manage shared network folders. You can display the full list of cmdlets in the module:
Get-Command -Module SMBShare
To display the current configuration of your Windows SMB server:
Get-SmbServerConfiguration
AnnounceComment : AnnounceServer : False AsynchronousCredits : 64 AuditSmb1Access : False AutoDisconnectTimeout : 15 AutoShareServer : True AutoShareWorkstation : True CachedOpenLimit : 10 DurableHandleV2TimeoutInSeconds : 180 EnableAuthenticateUserSharing : False EnableDownlevelTimewarp : False EnableForcedLogoff : True EnableLeasing : True EnableMultiChannel : True EnableOplocks : True EnableSecuritySignature : False EnableSMB1Protocol : True EnableSMB2Protocol : True EnableStrictNameChecking : True EncryptData : False IrpStackSize : 15 KeepAliveTime : 2 MaxChannelPerSession : 32 MaxMpxCount : 50 MaxSessionPerConnection : 16384 MaxThreadsPerQueue : 20 MaxWorkItems : 1 NullSessionPipes : NullSessionShares : OplockBreakWait : 35 PendingClientTimeoutInSeconds : 120 RejectUnencryptedAccess : True RequireSecuritySignature : False ServerHidden : True Smb2CreditsMax : 2048 Smb2CreditsMin : 128 SmbServerNameHardeningLevel : 0 TreatHostAsStableStorage : False ValidateAliasNotCircular : True ValidateShareScope : True ValidateShareScopeNotAliased : True ValidateTargetName : True
You can change SMB server options using the Set-SmbServerConfiguration cmdlet.
For example, to disable the legacy SMB 1 protocol, run the command below:
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
To display a list of SMB protocol versions used by active clients to connect to file shares on the current SMB file server:
Get-SmbConnection
To set bandwidth limits for SMB file traffic, you may configure the QoS policy for your SMB server (How to configure SMB bandwidth limits?). For example, the command below will limit the maximum bandwidth for SMB traffic to 10 MB:
Set-SmbBandwidthLimit -Category Default -BytesPerSecond 10MB
Creating a Shared Folder onWindows with PowerShell
To display a list of shared folders available on a computer, run this command:
Get-SmbShare
You can see several administrative shares and the Distr shared folder on this computer.
To create a new shared folder, run the command below:
New-SmbShare -Name Scripts -Path C:\PS -FullAccess woshub\mun_admins, woshub\mun-man01$ -ChangeAccess "woshub\mun-man01_scripts_rw" -ReadAccess "$env:USERDOMAIN\domain users" –description "PowerShell scripts for admin"
In this example, we created a shared folder and granted access to domain groups and one computer account.
Additionally, when creating a shared folder, you can use the following options:
-CachingMode [None|Manual|Programs|Documents|BranchCache]–set a caching mode for offline access (Windows offline files);-EncryptData $True– to enable SMB traffic encryption;-FolderEnumerationMode [AccessBased | Unrestricted]– to enable Access-based Enumeration. Allows to hide objects a user doesn’t have permission to access from the shared folder;-CompressData $True– to enable SMB compression for file transfers;-ConcurrentUserLimit 50– to set a limit of simultaneous connections to the folder (0 by default, unlimited);-Temporary– to create a temporary shared folder (disappears after the next Windows restart).
You can display a full list of shared folder settings:
Get-SmbShare -Name scripts| select *
To remove a shared network folder:
Remove-SmbShare Scripts
To add write permission for a user to the list ACL of the shared folder:
Grant-SmbShareAccess -Name Scripts -AccountName "woshub\b.hoffmann" -AccessRight Change –force
Display the current shared folder access list:
Get-SmbShareAccess scripts
To remove a security group from a share’s ACL:
Revoke-SmbShareAccess -Name Scripts -AccountName Everyone –Force
To force block access to a shared folder (a deny permission has a higher priority):
Block-SmbShareAccess -Name Scripts -AccountName woshub\ExternalGuests -Force
In most cases, you should use the Everyone -> RW permissions on a shared folder. In this case, the folder permissions are determined at the NTFS level.
You can get the current NTFS ACL for a shared folder using this command:
(get-acl \\mun-man01\scripts).access
To change NTFS permissions, use the Set-Acl cmdlet.
How to View and Manage Open Files in Windows Shares?
You can use SMBShare cmdlets to view a list of files opened by users on a shared folder on a Windows file server.
To display a list of opened files with usernames, computer names (IP addresses), and file paths:
Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionID
To show a list of files opened by a specific user:
Get-SMBOpenFile –ClientUserName "woshub\b.hoffmann" |select ClientComputerName,Path
To close a file a user opened and locked by a remote user:
$sessn = New-CIMSession –Computername munfs01
Get-SMBOpenFile -CIMSession $sessn | where {$_.Path –like "*sale_report2022.docx"} | Close-SMBOpenFile -CIMSession $sessn
Map SMB Network Drives with SmbMapping Cmdlets
SmbMapping cmdlets are used to manage network drives.
To map a network shared folder to the network drive U:, run the command below:
New-SmbMapping -LocalPath U: -RemotePath \\munfs01\scripts -UserName b.hoffmann -Password my22pass –Persistent $true -SaveCredential
- Without the Persistent option, the mapped network drive will only be available until the computer is restarted;
- The SaveCredential option allows saving user credentials to the Windows Credential Manager.
To display a list of mapped network folders:
Get-SmbMapping
To remove a network drive:
Remove-SmbMapping U: -force
Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Sign up
Powershell – Creating a shared folder
Powershell – Creating a shared folder
Would you like to learn how to use Powershell to create a shared folder? In this tutorial, we are going to show you how to create a shared folder using the Powershell command-line on a computer running Windows.
• Windows 2012 R2
• Windows 2016
• Windows 2019
• Windows 10
• Windows 7
Equipment list
The following section presents the list of equipment used to create this tutorial.
As an Amazon Associate, I earn from qualifying purchases.
Related tutorial – PowerShell
On this page, we offer quick access to a list of tutorials related to PowerShell.
Tutorial Powershell – Create a shared folder
As an Administrator, start an elevated Powershell command-line.
Here is the command output:
Create a shared folder using Powershell.
Here is the command output:
Optionally, configure the change permission.
Here is the folder permissions.
List available shared folders.
Here is the command output:
In our example, we created a shared folder named SOFTWARE.
Congratulations! You are able to create a shared folder using Powershell.
VirtualCoin CISSP, PMP, CCNP, MCSE, LPIC22021-04-08T11:44:13-03:00
Related Posts
Page load link
Ok
Публикуем вторую часть перевода статьи File Server Management with Windows PowerShell. В первой части мы рассматривали как с помощью PowerShell строить отчеты о сетевых папках.
На этот раз в зоне нашего внимания находятся такие вопросы как создание сетевой папки, делегирование прав доступа к ней и прекращение совместного доступа.
Создаем новые папки
Теперь давайте взглянем на то, как можно использовать PowerShell для создания файлов и папок и управления ими. Все, что я продемонстрирую, Вы можете использовать в PS 2.0 и 3.0 (хотя в PS 3.0 приводимые мною примеры можно упростить). Управление файловым сервером в PowerShell 2.0 требует обращения к WMI и написанию сложных скриптов. В PowerShell 3.0, особенно если у вас Windows Server 2012, этот тип управления значительно упрощен. Именно его я и собираюсь рассмотреть.
Все, что нам необходимо, уже имеется в модуле SMBShare, который по умолчанию установлен на моей машине Windows 8. Команды в этом модуле позволят нам локально и удаленно управлять папками. Я не собираюсь останавливаться на каждой команде подробно – они довольно однотипны; рекомендую прочитать справку и примеры. Мы же начнем с использования команды New-SMBShare, чтобы создать новую папку.
Сделать это нужно за пару шагов. Так как папка должна быть на удаленном сервере, я установлю удаленную сессию PowerShell:
$session=New-PSSession -ComputerName SRV2K12RC
Я, конечно, могу использовать интерактивную сессию, однако передо нами стоит задача автоматизации, так что использую команду Invoke-Command. Для начала я создам новую папку:
invoke-command -ScriptBlock {mkdir c:\shares\companyfiles}-Session $session
А сейчас сложная часть. Я хочу установить такие NTFS разрешения, чтобы JDHLAB\Domain Users имела разрешения на изменения (Change). Для этого необходимо создать новое правило доступа, изменяющего список правил доступа и заново применяющих их к папке. В примере 6 приведен пример скрипта:
Пример 6: Создание, изменение и применение правила доступа
$sb={
Param($path)
$du=new-object System.Security.AccessControl.FileSystem
AccessRule "jdhlab\domain users","Modify","allow"
$acl = Get-ACL $path
$acl.AddAccessRule($du)
Set-Acl -Path $path -AclObject $acl
}
В примере 6 я сделал так, чтобы параметр пути можно было заново использовать.
Invoke-Command -ScriptBlock $sb -Session $session -ArgumentList
c:\shares\companyfiles
Существует способы упростить этот процесс, но для целей ясности мы сохраним все так как есть. Сейчас мы готовы создать новую папку.
Я могу использовать эту сессию, но я хочу продемонстрировать, как можно использовать команду New-SmbShare, чтобы удаленно подключиться к файловому серверу:
New-SmbShare -Name Files -Path c:\shares\companyfiles
-CimSession SRV2K12RC -FullAccess "jdhlab\domain admins"
-ChangeAccess Everyone -Description "Company files"
Право доступа к папке по умолчанию стоит “Только чтение” (ReadOnly). Я выдал доменным админам Полный контроль (Full Control) на папку, и всем остальным выдал права на изменение (Change). Этот путь относителен к удаленному компьютеру, который должен работать под PS 3.0.
Расширенные настройки папки
Получить информацию о папке можно в любое время, использовав команду Get-SMBShare, как вы можете видеть на рисунке 9. Можно сделать еще парочку вещей с нашими папками, например, зашифровать SMB соединение, какой режим перечисления (enumeration mode) и тип кеширования использовать для папки. Я собираюсь использовать Set-SMBShare, чтоб осуществить гибкую настройку для только что созданной папки. Посмотрим это на примере 7.
Пример 7: Гибкая настройка папки
PS C:\> Set-SmbShare -Name Files -EncryptData $True
-FolderEnumerationMode AccessBased -CachingMode
Documents -CimSession SRV2K12RC
Confirm
Are you sure you want to perform this action?
SRV2K12RC: Performing operation 'Modify' on Target '*,Files'.
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?]
Help (default is "Y"):
Указанное выше применяется к одной единственной папке, но вы с легкостью можете использовать Get-SMBShare для извлечение всех папок и их последующей передачи в Set-SMBShare и применения изменений к ним всем:
Get-SMBShare -CimSession SRV2K12RC -Special $False | Set-SmbShare -EncryptData $True -Confirm:$false
Эта команда извлечет все папки (кроме административных папок) на компьютере SRV2K12RC и установим свойство EncryptData в значении True. Мне не хочется подтверждать каждое действие, поэтому переключатель Confirm установлен в значение False. Set-SMBshare не запишет ничего в конвейер, в том случае если вы не используете –Passthru. Как видите, я смог изменить все с помощью одной единственной команды.
Удаление сетевых папок
Напоследок удалим сетевую папку. Код в примере 8 полностью отключает совместный доступ к папке, которую я только что создал. Можно ли это сделать проще? Конечно, структура папок до сих пор на файловом сервере.
Пример 8: Удаляем сетевую папку
PS C:\> Remove-SmbShare -Name Files -CimSession SRV2K12RC
Confirm
Are you sure you want to perform this action?
SRV2K12RC: Performing operation 'Remove-Share' on Target
'*,Files'.
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?]
Help (default is "Y"):
Сводим воедино
А теперь давайте сведем все в одном скрипте. Не вдаваясь с детали кода, отмечу, что команды могут быть запущены параллельно. Например, после создания папки, создаю сетевую папку и устанавливаю NTFS разрешения в то же время, см. пример 9.
Пример 9: Создаем сетевую папку и устанавливаем NTFS разрешения
Workflow New-FileShare {
Param(
[string]$Name,
[string]$Path,
[string]$Principal,
[string]$Right="Modify"
)
#Это делаем в первую очередь.
Sequence {
#создаем папку
Write-Verbose -Message "Creating new folder $path on
$pscomputername"
$newfolder = New-Item -Path $path -ItemType Directory
}
#Идем дальше.
Sequence {
Parallel {
#эти команды могут быть запущены параллельно
InlineScript {
Write-Verbose -Message "Modifying NTFS permissions"
Write-Verbose -Message "Creating entry for
$using:principal with a right of $using:Right"
$entry=New-Object -typename System.Security
.AccessControl.FileSystemAccessRule -argumentlist
$using:Principal,$using:Right,"allow"
#получаем существующий ACL
$acl = Get-ACL -path $using:path
#добавляем новую запись
$acl.AddAccessRule($entry)
Write-Verbose -Message "Applying the new ACL"
Set-Acl -Path $using:path -AclObject $acl
} #inline
#Создаем сетевую папку.
Write-Verbose -message "Creating the file share $name"
$newshare = New-SmbShare -Name $name -Path $path
-Description "File share for $principal" -EncryptData $True
-FolderEnumerationMode AccessBased -CachingMode
Documents -FullAccess "$env:userdomain\domain admins"
-ChangeAccess $Principal
} #Parallel
} #sequence
#Получаем результаты.
Sequence {
Parallel {
Write-Verbose -Message "Getting the new share"
Get-SmbShare -Name $name
Write-Verbose -Message "Getting the new share access"
Get-SmbShareAccess -Name $name
}
}
Этот скрипт создает новую сетевую папку, присваивает разрешения пользователю или группе. Я могу запустить ее из-под Windows 8 или на файловом сервере Windows Server 2012, использовав следующую команду (которая должна быть введена в одну строчку):
New-FileShare -Name adeco -Path c:\shares\adeco -Principal jdhlab\adeco -Right "FullControl" -PSComputerName SRV2K12RC
Процесс займет пару секунд. Результаты на скриншоте ниже.
Нет ничего плохого в том, чтобы использовать обыкновенный графический интерфейс для того же самого. Однако если Вам нужны специализированные отчеты или же вы желаете автоматизировать этот процесс, PowerShell подойдет как нельзя лучше.
Все примеры можно скачать здесь. Автор также рекомендует посетить форумы на сайте PowerShell.org по всем вопросам, связанным с PowerShell.
