¿Cómo administrar recursos compartidos de archivos de Windows usando PowerShell?

El incorporado SMBShare El módulo PowerShell le permite crear, configurar y administrar carpetas de red compartidas en Windows. En este artículo, veremos cómo administrar archivos compartidos (carpetas de red SMB) usando PowerShell. Puede usar estos ejemplos para administrar rápida y fácilmente sus servidores de archivos SMB y carpetas compartidas en diferentes escenarios de automatización.

El módulo SMBShare contiene 42 cmdlets de PowerShell para administrar carpetas de red compartidas. Puede mostrar la lista completa de cmdlets en el módulo:

Get-Command -Module SMBShare

El módulo SMBShare PowerShell permite administrar carpetas compartidas en Windows

Para mostrar la configuración actual de su servidor SMB de Windows:

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

Puede cambiar las opciones del servidor SMB usando el Establecer-SmbServerConfiguration cmdlet.

Por ejemplo, para deshabilitar el protocolo SMB 1 heredado, ejecute el siguiente comando:

Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force

Para mostrar una lista de las versiones del protocolo SMB utilizadas por los clientes activos para conectarse a recursos compartidos de archivos en el servidor de archivos SMB actual:

Get-SmbConnection

Para establecer límites de ancho de banda para el tráfico de archivos SMB, puede configurar la política de QoS para su servidor SMB (¿Cómo configurar los límites de ancho de banda SMB?). Por ejemplo, el siguiente comando limitará el ancho de banda máximo para el tráfico SMB a 10 MB:

Set-SmbBandwidthLimit -Category Default -BytesPerSecond 10MB

Creación de una carpeta compartida en Windows con PowerShell

Para mostrar una lista de carpetas compartidas disponibles en una computadora, ejecute este comando:

Get-SmbShare

Get-SmbShare: lista de carpetas compartidas en Windows

Puede ver varios recursos compartidos administrativos y el Distribución carpeta compartida en esta computadora.

Para crear una nueva carpeta compartida, ejecute el siguiente comando:

New-SmbShare -Name Scripts -Path C:PS -FullAccess woshubmun_admins, woshubmun-man01$ -ChangeAccess "woshubmun-man01_scripts_rw" -ReadAccess "$env:USERDOMAINdomain users" –description "PowerShell scripts for admin"

En este ejemplo, creamos una carpeta compartida y otorgamos acceso a grupos de dominio y una cuenta de computadora.

Además, al crear una carpeta compartida, puede utilizar las siguientes opciones:

  • -CachingMode [None|Manual|Programs|Documents|BranchCache] –establecer un modo de almacenamiento en caché para el acceso sin conexión (archivos sin conexión de Windows);
  • -EncryptData $True – para habilitar el cifrado de tráfico SMB;
  • -FolderEnumerationMode [AccessBased | Unrestricted] – para habilitar la enumeración basada en el acceso. Permite ocultar objetos a los que un usuario no tiene permiso para acceder desde la carpeta compartida;
  • -CompressData $True – para habilitar la compresión al enviar archivos a través de SMB;
  • -ConcurrentUserLimit 50 – establecer un límite de conexiones simultáneas a la carpeta (0 por defecto, ilimitado);
  • -Temporary – para crear una carpeta compartida temporal (desaparece después del próximo reinicio de Windows).

Puede mostrar una lista completa de configuraciones de carpetas compartidas:

Get-SmbShare -Name scripts| select *

Configuración de Get-SmbShare con powershell

Para eliminar una carpeta compartida de red:

Remove-SmbShare Scripts

Para agregar permiso de escritura para un usuario a la lista ACL de la carpeta compartida:

Grant-SmbShareAccess -Name Scripts -AccountName "woshubb.hoffmann" -AccessRight Change –force

Mostrar la lista de acceso a la carpeta compartida actual:

Get-SmbShareAccess scripts

permisos get-smbshareaccess

Para eliminar un grupo de seguridad de la ACL de un recurso compartido:

Revoke-SmbShareAccess -Name Scripts -AccountName Everyone –Force

Para forzar el bloqueo del acceso a una carpeta compartida (un permiso de denegación tiene mayor prioridad):

Block-SmbShareAccess -Name Scripts -AccountName woshubExternalGuests -Force

En la mayoría de los casos, debe usar los permisos Todos -> RW en una carpeta compartida. En este caso, los permisos de las carpetas se determinan a nivel de NTFS.

Puede obtener la ACL de NTFS actual para una carpeta compartida con este comando:

(get-acl \mun-man01scripts).access

Para cambiar los permisos de NTFS, use el Set-Acl cmdlet (obtenga más información sobre cómo administrar los permisos de NTFS mediante PowerShell).

¿Cómo ver y administrar archivos abiertos en recursos compartidos de Windows?

Puede usar los cmdlets de SMBShare para ver una lista de archivos abiertos por los usuarios en una carpeta compartida en un servidor de archivos de Windows.

Para mostrar una lista de archivos abiertos con nombres de usuario, nombres de computadora (direcciones IP) y rutas de archivos:

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

Para mostrar una lista de archivos abiertos por un usuario específico:

Get-SMBOpenFile –ClientUserName "woshubb.hoffmann" |select ClientComputerName,Path

Para cerrar un archivo que un usuario abrió y bloqueó por un usuario remoto:

$sessn = New-CIMSession –Computername munfs01
Get-SMBOpenFile -CIMSession $sessn | where {$_.Path –like "*sale_report2022.docx"} | Close-SMBOpenFile -CIMSession $sessn

Asigne unidades de red SMB con cmdlets SmbMapping

Los cmdlets SmbMapping se utilizan para administrar unidades de red.

Para asignar una carpeta compartida de red a la unidad de red tu:ejecute el siguiente comando:

New-SmbMapping -LocalPath U: -RemotePath \munfs01scripts -UserName b.hoffmann -Password my22pass –Persistent $true -SaveCredential

  • Sin el Persistente opción, la unidad de red asignada solo estará disponible hasta que se reinicie la computadora;
  • los Guardar Credencial La opción permite guardar las credenciales de usuario en el Administrador de credenciales de Windows.

Para mostrar una lista de carpetas de red asignadas:

Get-SmbMapping

Para eliminar una unidad de red:

Remove-SmbMapping U: -force

Artículos Interesantes