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 SMBSharePara mostrar la configuración actual de su servidor SMB de Windows:
Get-SmbServerConfigurationAnnounceComment :
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 : TruePuede 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 -ForcePara 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-SmbConnectionPara 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 10MBCreación de una carpeta compartida en Windows con PowerShell
Para mostrar una lista de carpetas compartidas disponibles en una computadora, ejecute este comando:
Get-SmbSharePuede 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 ScriptsPara 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 -forceMostrar 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 -ForcePara 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 -ForceEn 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).accessPara 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,SessionIDPara mostrar una lista de archivos abiertos por un usuario específico:
Get-SMBOpenFile -ClientUserName "a-d\b.hoffmann" |select ClientComputerName,PathPara 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 $sessnObtenga 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 -SaveCredentialSin 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-SmbMappingPara eliminar una unidad de red:
Remove-SmbMapping U: -forcePuede usar GPO para asignar unidades de red en Windows.



