Управление сетевыми папками с помощью PowerShell

Управление сетевыми папками с помощью PowerShell

Встроенный PowerShell модуль SMBShare позволяет создавать, тонко настраивать и управлять общими сетевыми папками в Windows. В этой статье рассмотрим особенности управления сетевыми SMB папками Windows с помощью PowerShell. Вы можете использовать эти примеры для простого и быстрого управления настройками ваших файловых SMB серверов и сетевых папкок в различных сценариях автоматизации.

В модуле SMBShare доступно 42 команлета PowerShell для управления сетевыми папками. Их полный список можно вывести так:

Get-Command -Module SMBShare

SMBShare - powershell модулья для управления сетевыми папками и SMB сервером в Windows

Вывести текущую конфигурацию 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

Get-SmbShare список общих сетевых папок на компьютере

На этом компьютере открыт доступ к административным общим ресурсам и к каталогу Distr.

Чтобы создать новую общую сетевую папку, выполните команду:

New-SmbShare -Name Scripts -Path C:PS -FullAccess winitprospb_admins, winitpromsk-man01$ -ChangeAccess "winitpromsk-man01_script_rw" -ReadAccess “$env:USERDOMAINdomain 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 *

вывести настройки сетевой папки с помощью PowerShell

Чтобы удалить сетевую папку:

Remove-SmbShare Scripts

Добавить в список доступа сетевой папки разрешения на запись для указанного пользователя:

Grant-SmbShareAccess -Name Scripts -AccountName "winitprokbuldogov" -AccessRight Change –force

Вывести текущий список доступа к общей папке:

Get-SmbShareAccess scripts

Get-SmbShareAccess - список разрешений для доступа к сетевой папке

Удалить группу из списка доступа:

Revoke-SmbShareAccess -Name Scripts -AccountName Everyone –Force

Принудительный запрет на доступ к общей папке (запрещающее разрешение имеет более высокий приоритет):

Block-SmbShareAccess -Name Scripts -AccountName winitproExtUsers -Force

В большинстве случаев на уровне сетевой папки предоставляют доступ Everyone RW, а фактически права доступа к папке определяются на уровне NTFS.

Текущий NTFS ACL для сетевой папки можно получить с помощью команды:

(get-acl msk-man01scripts).access

Чтобы изменить права доступа, используйте Set-Acl (подробнее про управление NTFS разрешениями с помощью PowerShell).

Управление открытыми файлами в сетевой папке

Командлеты модуля SMBShare можно использовать для просмотра списка файлов, открытых клиентами в сетевой папке на файловом сервере.

Вывести список открытых файлов с именами пользователей, именами компьютеров (IP адресами), и путями к файлам:

Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionID

Вывести список файлов, открытых определённым пользователем:

Get-SMBOpenFile –ClientUserName "corpkbuldogov" |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-man01scripts -UserName kbuldogov -Password mypass –Persistent $true -SaveCredential

  • Без параметра Persistent сетевой диск будет доступен только до перезагрузки компьютера;
  • Параметр SaveCredential позволяет сохранить учетные данные пользователя для подключения в диспетчер учетных данных Windows Credential Manager

Вывести список подключенных сетевых папок:

Get-SmbMapping

Для удаления сетевого диска:

Remove-SmbMapping U: -force

Windows 10
Управление сетевыми папками с помощью PowerShell