Dargslan.WinSMBMgr.psm1

<#
.SYNOPSIS
    Windows SMB/CIFS share management toolkit — share inventory, session monitoring, open file tracking, and security configuration audit

.DESCRIPTION
    Part of the Dargslan Windows Admin Toolkit collection.
    More tools and resources at https://dargslan.com
    Free Cheat Sheets: https://dargslan.com/cheat-sheets
    Windows & DevOps Books: https://dargslan.com/books

.LINK
    https://dargslan.com

.LINK
    https://github.com/Dargslan/powershell-admin-scripts
#>


function Get-SMBAudit {
    <#
    .SYNOPSIS
        Audit SMB shares, sessions, and security
    .DESCRIPTION
        Lists all SMB shares, active sessions, open files, and audits SMB security configuration.
        Part of Dargslan.WinSMBMgr — https://dargslan.com
    #>

    [CmdletBinding()] param([switch]$Json)

    $report = [ordered]@{
        Shares = Get-SmbShare | Where-Object { $_.Name -notmatch "\$$" } | Select-Object Name, Path, Description, CurrentUsers, @{N="Permissions";E={(Get-SmbShareAccess -Name $_.Name -ErrorAction SilentlyContinue | Select-Object AccountName, AccessControlType, AccessRight)}}
        HiddenShares = Get-SmbShare | Where-Object { $_.Name -match "\$$" } | Select-Object Name, Path
        Sessions = Get-SmbSession -ErrorAction SilentlyContinue | Select-Object ClientComputerName, ClientUserName, NumOpens, @{N="ConnectedSec";E={$_.SecondsExists}}
        OpenFiles = (Get-SmbOpenFile -ErrorAction SilentlyContinue | Measure-Object).Count
        Config = [PSCustomObject]@{
            SMB1 = (Get-SmbServerConfiguration).EnableSMB1Protocol
            SMB2 = (Get-SmbServerConfiguration).EnableSMB2Protocol
            Signing = (Get-SmbServerConfiguration).RequireSecuritySignature
            Encryption = (Get-SmbServerConfiguration).EncryptData
        }
    }
    if ($Json) { return $report | ConvertTo-Json -Depth 4 }
    Write-Host "`n [SMB Audit]" -ForegroundColor Cyan
    Write-Host " SMB1: $($report.Config.SMB1) | SMB2: $($report.Config.SMB2) | Signing: $($report.Config.Signing) | Encryption: $($report.Config.Encryption)"
    $report.Shares | Format-Table Name, Path, CurrentUsers -AutoSize
    if ($report.Config.SMB1) { Write-Host " ⚠ SMB1 is enabled — this is a security risk!" -ForegroundColor Red }
    return $report
}

Export-ModuleMember -Function *