Búsqueda de sitios web

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


El módulo integrado de PowerShell SMBShare 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

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 mediante el cmdlet Set-SmbServerConfiguration.

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

Puede ver varios recursos compartidos administrativos y la carpeta compartida Distr en esta computadora.

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

New-SmbShare -Name Scripts -Path C:\PS -FullAccess a-d\mun_admins, a-d\mun-man01$ -ChangeAccess "a-d\mun-man01_scripts_rw" -ReadAccess "$env:USERDOMAIN\domain 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 *

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 "a-d\b.hoffmann" -AccessRight Change -force

Mostrar la lista de acceso a la carpeta compartida actual:

Get-SmbShareAccess scripts

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 a-d\ExternalGuests -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-man01\scripts).access

Para cambiar los permisos de NTFS, use el cmdlet Set-Acl (obtenga más información sobre cómo administrar los permisos de NTFS con 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 "a-d\b.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

Obtenga más información sobre cómo administrar archivos abiertos en recursos compartidos SMB en Windows.

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 U:, ejecute el siguiente comando:

New-SmbMapping -LocalPath U: -RemotePath \\munfs01\scripts -UserName b.hoffmann -Password my22pass -Persistent $true -SaveCredential
  • Sin la opción Persistente, la unidad de red asignada solo estará disponible hasta que se reinicie la computadora;

  • La opción SaveCredential 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

Puede usar GPO para asignar unidades de red en Windows.

Artículos relacionados