PSWinOps.psd1

#
# Module manifest for module 'PSWinOps'
#
# Generated by: Franck SALLET
#
# Generated on: 10/04/2026
#

@{

    # Script module or binary module file associated with this manifest.
    RootModule           = 'PSWinOps.psm1'

    # Version number of this module.
    ModuleVersion        = '0.0.23'

    # Supported PSEditions
    # Core is supported on Windows only; the module-level guard in PSWinOps.psm1 blocks
    # non-Windows hosts. Exchange snapin (Add-PSSnapin) is Desktop-only but the function
    # gracefully falls back to Import-Module on Core (see Get-ExchangeServerHealth).
    CompatiblePSEditions = 'Desktop', 'Core'

    # ID used to uniquely identify this module
    GUID                 = 'b8f23fbd-069e-4d11-8e94-e4fc69d71aa5'

    # Author of this module
    Author               = 'Franck SALLET'

    # Company or vendor of this module
    CompanyName          = 'kfrlabs'

    # Copyright statement for this module
    Copyright            = '(c) Franck SALLET. All rights reserved.'

    # Description of the functionality provided by this module
    Description          = 'A collection of PowerShell utilities for Windows system administrators'

    # Minimum version of the PowerShell engine required by this module
    PowerShellVersion    = '5.1'

    # Name of the PowerShell host required by this module
    # PowerShellHostName = ''

    # Minimum version of the PowerShell host required by this module
    # PowerShellHostVersion = ''

    # Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
    # DotNetFrameworkVersion = ''

    # Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
    # ClrVersion = ''

    # Processor architecture (None, X86, Amd64) required by this module
    # ProcessorArchitecture = ''

    # Modules that must be imported into the global environment prior to importing this module
    # RequiredModules = @()
    # NOTE: Several public functions lazy-import optional modules (ActiveDirectory, Hyper-V,
    # FailoverClusters, DhcpServer, DnsServer, WebAdministration, IISAdministration,
    # FileServerResourceManager, ExchangeManagementShell, RemoteDesktop, UpdateServices,
    # ADFS, PrintManagement, DFSN). None are listed in RequiredModules so the module
    # remains loadable on hosts that only need a subset of its surface.
    # See the "Optional Dependencies" section in readme.md for the full install reference.

    # Assemblies that must be loaded prior to importing this module
    # RequiredAssemblies = @()

    # Script files (.ps1) that are run in the caller's environment prior to importing this module.
    # Enum types must be defined here (not inside the module) so consumers can reference
    # [PSWinOpsHealthStatus]::Healthy in typed parameters and parse-time expressions.
    ScriptsToProcess     = @('PSWinOpsHealthStatus.ps1')

    # Type files (.ps1xml) to be loaded when importing this module
    # TypesToProcess = @()

    # Format files (.ps1xml) to be loaded when importing this module
    FormatsToProcess     = 'PSWinOps.Format.ps1xml'

    # Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
    # NestedModules = @()

    # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
    FunctionsToExport    = @(
        'Clear-Arp',
        'Clear-DiskCleanup',
        'Clear-WindowsUpdateCache',
        'Connect-RdpSession',
        'ConvertFrom-MisencodedString',
        'Disable-ADUserAccount',
        'Disconnect-RdpSession',
        'Edit-HostsFile',
        'Enable-ADUserAccount',
        'Export-NetworkConfig',
        'Get-ADComputerDetail',
        'Get-ADComputerInventory',
        'Get-AdDomainControllerHealth',
        'Get-ADDomainInfo',
        'Get-ADFSHealth',
        'Get-ADGroupInventory',
        'Get-ADGroupMembership',
        'Get-ADLockedAccount',
        'Get-ADNestedGroupMembership',
        'Get-ADPasswordStatus',
        'Get-ADPrivilegedAccount',
        'Get-ADReplicationStatus',
        'Get-ADSiteTopology',
        'Get-ADStaleAccount',
        'Get-ADStaleComputer',
        'Get-ADUserDetail',
        'Get-ADUserGroupInventory',
        'Get-ADUserInventory',
        'Get-ARPTable',
        'Get-CertificateAuthorityHealth',
        'Get-ClusterHealth',
        'Get-ComputerUptime',
        'Get-DfsNamespaceHealth',
        'Get-DfsReplicationHealth',
        'Get-DhcpServerHealth',
        'Get-DiskCleanupInfo',
        'Get-DiskSpace',
        'Get-DnsServerHealth',
        'Get-EnvironmentVariable',
        'Get-ExchangeServerHealth',
        'Get-FileServerHealth',
        'Get-HyperVHostHealth',
        'Get-IISAppPoolHistory',
        'Get-IISCertificateBinding',
        'Get-IISCurrentRequest',
        'Get-IISFailedRequestTrace',
        'Get-IISHealth',
        'Get-IISParsedLog',
        'Get-IISWorkerProcess',
        'Get-InstalledSoftware',
        'Get-ListeningPort',
        'Get-NetworkAdapter',
        'Get-NetworkCIDR',
        'Get-NetworkConnection',
        'Get-NetworkRoute',
        'Get-NetworkStatistic',
        'Get-NTPConfiguration',
        'Get-NTPPeer',
        'Get-NTPSyncStatus',
        'Get-PageFileConfiguration',
        'Get-PendingReboot',
        'Get-PrintServerHealth',
        'Get-ProxyConfiguration',
        'Get-PublicIPAddress',
        'Get-RdpSession',
        'Get-RdpSessionHistory',
        'Get-RdpSessionLock',
        'Get-RDSHealth',
        'Get-ScheduledTaskDetail',
        'Get-ServiceHealth',
        'Get-ShadowCopy',
        'Get-ShadowCopyStorage',
        'Get-SSLCertificate',
        'Get-StartupProgram',
        'Get-SubnetInfo',
        'Get-SystemSummary',
        'Get-WindowsUpdate',
        'Get-WindowsUpdateConfiguration',
        'Get-WindowsUpdateHistory',
        'Get-WSUSHealth',
        'Hide-WindowsUpdate',
        'Install-WindowsUpdate',
        'Invoke-ADSecurityAudit',
        'Measure-NetworkLatency',
        'New-NetworkRoute',
        'New-RandomPassword',
        'New-ShadowCopy',
        'Remove-NetworkRoute',
        'Remove-ProxyConfiguration',
        'Remove-RdpSession',
        'Remove-ShadowCopy',
        'Remove-UserProfile',
        'Reset-ADUserPassword',
        'Resolve-MACVendor',
        'Restore-ShadowCopyFile',
        'Save-WindowsUpdate',
        'Search-ADObject',
        'Set-IISBindingCertificate',
        'Set-NetworkRoute',
        'Set-NTPClient',
        'Set-PageFile',
        'Set-ProxyConfiguration',
        'Set-ShadowCopyStorage',
        'Show-NetworkStatisticMonitor',
        'Show-PingMonitor',
        'Show-SystemMonitor',
        'Show-WindowsUpdate',
        'Sync-NTPTime',
        'Test-DNSResolution',
        'Test-IISBindingCertificate',
        'Test-PortConnectivity',
        'Test-ProxyConnection',
        'Test-WinRM',
        'Trace-NetworkRoute',
        'Uninstall-WindowsUpdate',
        'Unlock-ADUserAccount',
        'Watch-IISLog'
    )

    # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
    CmdletsToExport      = @()

    # Variables to export from this module
    # VariablesToExport = @()

    # Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.
    AliasesToExport      = @()

    # DSC resources to export from this module
    # DscResourcesToExport = @()

    # List of all modules packaged with this module
    # ModuleList = @()

    # List of all files packaged with this module
    # FileList = @()

    # Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
    PrivateData          = @{

        PSData = @{

            # Tags applied to this module. These help with module discovery in online galleries.
            Tags         = @(
                # General
                'Windows', 'WindowsServer', 'PowerShell', 'PSModule',
                'SysAdmin', 'Administration', 'Ops', 'WinOps', 'Utilities',
                'Monitoring', 'HealthCheck', 'Automation', 'Infrastructure',
                # Active Directory
                'ActiveDirectory', 'AD', 'RSAT', 'ADUser', 'ADComputer', 'ADGroup',
                'ADReplication', 'AccountManagement', 'Inventory', 'Audit', 'Compliance',
                # Network
                'Network', 'DNS', 'ARP', 'TCP', 'Ping', 'Subnet', 'CIDR', 'SSL',
                'NetStat', 'Traceroute', 'WinRM', 'Route', 'HostsFile', 'PublicIP',
                # System
                'CIM', 'Uptime', 'DiskSpace', 'PendingReboot', 'ScheduledTask',
                'InstalledSoftware', 'PageFile', 'EnvironmentVariable', 'Startup',
                # RDP / Sessions
                'RDP', 'RemoteDesktop', 'Sessions',
                # NTP / Time
                'NTP', 'TimeSynchronization', 'W32Time',
                # Proxy
                'Proxy', 'WinHTTP', 'WinINET',
                # Security / Utils
                'Security', 'Password', 'Encoding',
                # Server Roles / HealthCheck
                'DHCP', 'DFS', 'Cluster', 'HyperV',
                'IIS', 'PrintServer', 'WSUS', 'ADFS', 'Exchange', 'CertificateAuthority',
                'RDS', 'FileServer', 'DNSServer',
                # VSS / Shadow Copy
                'VSS', 'ShadowCopy', 'VolumeSnapshot', 'Backup', 'Restore'
            )

            # A URL to the license for this module.
            LicenseUri   = 'https://github.com/k9fr4n/PSWinOps/blob/main/LICENSE'

            # A URL to the main website for this project.
            ProjectUri   = 'https://github.com/k9fr4n/PSWinOps'

            # A URL to an icon representing this module.
            # IconUri = ''

            # ReleaseNotes of this module
            ReleaseNotes = '## 0.0.23 - 2026-05-21
### Added
- feat(iis): introduce new public domain Public/iis/ (registered in CI matrix and about_PSWinOps).
- feat(iis): add Set-IISBindingCertificate — replace SSL/TLS certificate on IIS HTTPS bindings with idempotent rotation, -WhatIf/-Confirm (ConfirmImpact=High), remote execution via WinRM, pipeline-by-property-name from Get-SSLCertificate / Get-IISHealth (#47).
- feat(iis): add Get-IISParsedLog — stream-parse IIS W3C log files into typed PSWinOps.IISLogEntry objects; header re-detection, dash-normalisation, UserAgent "+"-to-space decoding; -After/-Before window, -Method/-Status/-ClientIP multi-value OR filters, -UriLike wildcard, -Tail circular buffer, pipeline-by-property-name FullName (#49).
- feat(iis): add Get-IISWorkerProcess — inventory IIS w3wp.exe processes joined with AppPoolName, Sites/Applications, identity, PID, uptime, CPU, working/private/virtual memory, thread/handle counts; WebAdministration → IISAdministration → appcmd/CIM fallback; -AppPoolName/-ProcessId filters; Status enum (Running/Orphaned/Failed/IISNotInstalled/NoWorkerProcess) (#50).
- feat(iis): add Get-IISCurrentRequest — list HTTP requests currently executing in IIS (typed equivalent of `appcmd list requests`) with ComputerName, ProcessId, AppPoolName, SiteName, Url, Verb, ClientIPAddress, TimeElapsed/TimeElapsedMs, PipelineState; -AppPoolName/-SiteName wildcards and -MinElapsedMs threshold (#51).
- feat(iis): add Watch-IISLog — real-time IIS W3C log tailer emitting typed PSWinOps.IISLogEntry objects; FileShare.ReadWrite|Delete; -InitialLines, -FollowRollover, -PollIntervalMs, -Duration, -MaxEntries; in-stream filters -Method/-Status/-UriLike/-ClientIP/-MinStatus (#52).
- feat(iis): add Get-IISFailedRequestTrace — parse FREB fr######.xml files into typed PSWinOps.IISFailedRequestTrace objects; auto-resolves FREB folder per site; surfaces URL/verb/statusCode/subStatus/timeTaken/appPool/worker PID/failureReason plus first ERROR/WARNING event; -After/-Before/-StatusCode/-FailureReason filters, -Tail, -IncludeEvents (#53).
- feat(iis): add Get-IISCertificateBinding — read-only inventory of IIS HTTPS bindings joined to their presented X509 certificate; SiteName, BindingInformation, Protocol, SslFlags (SNI/CCS), Thumbprint, Subject, SAN, Issuer, NotBefore/NotAfter, DaysUntilExpiration, Expired, CertificateStore, HasPrivateKey; -SiteName/-HostHeader/-Thumbprint/-Port filters, -ExpiringInDays, -IncludeExpired (#54).
- feat(iis): add Test-IISBindingCertificate — read-only auditor running six independent checks per binding (expiration vs Warning/Critical thresholds, X509Chain.Build, hostname/SAN match, HasPrivateKey, signature/key-algorithm strength, CertStoreName alignment); emits PSWinOps.IISCertificateBindingTestResult with OverallStatus and Findings array; -WarningDays/-CriticalDays, -SkipChainValidation, -IncludeRevocationCheck (#55).
- feat(iis): add Get-IISAppPoolHistory — reconstructs app pool lifecycle (recycles, rapid-fail shutdowns, crashes, start/stop, identity changes, orphaned workers) by mining System (Microsoft-Windows-WAS), Application (W3SVC-WP) and optionally IIS-W3SVC-WP/Operational event logs; classifies events via a 16-entry EventId map into typed PSWinOps.IISAppPoolHistoryEvent rows with AppPoolName, WorkerPid, normalised ReasonCode, UTC/local timestamps; server-side -After/-Before/-EventId, client-side -AppPoolName wildcard, -Tail, -IncludeOperationalLog (#56).
- feat(format): TableControl views for all new typed outputs in PSWinOps.Format.ps1xml.
### Changed
- refactor: automated remediation chain — quality, testability & monitor extraction (ITER 1-8).
### Fixed
- fix(tests): import PSWinOps.psd1 explicitly in Set-NTPClient.Tests.
 
## 0.0.17 - 2026-04-02
- refactor: Invoke-RemoteOrLocal rewrite (#30)
- refactor: move OverallHealth computation to process{} block (#31)
- fix: misc cleanup — synopsis, #Requires, module-scoped local names (#32)
- feat: add about_PSWinOps help file and PSWinOpsHealthStatus enum (#33)
- feat: add Get-ExchangeServerHealth healthcheck function (#34)
- fix: replace Clear-Host with Console.SetCursorPosition (#35)
- fix/docs: audit coherence documentation (#36)
- docs: fix documentation audit findings - Axis 1 (#37)
- fix: coherence Axis 2 (#38)
 
## 0.0.16 - 2026-03-31
- feat(format): add TableControl default views for all typed outputs (#29)
 
## 0.0.15 - 2026-03-31
- fix: miscellaneous fixes (#25)
- fix(ntp): NTP function fixes (#27)
- feat: new functions and expanded test coverage (#28)
 
## 0.0.14 - 2026-03-26
- fix: miscellaneous fixes (#25)
 
## 0.0.13 - 2026-03-25
- refactor: rename folder structure (#19)
- feat(tests): new Pester tests (#20)
- perf: optimization pass (#22)
- feat: general improvements (#23)
- refactor: coherence pass (#24)
 
## 0.0.12 - 2026-03-24
- refactor: rename folder structure (#19)
- feat(tests): new Pester tests (#20)
- perf: optimization pass (#22)
 
## 0.0.11 - 2026-03-24
- refactor: rename folder structure (#19)
 
## 0.0.10 - 2026-03-23
- perf: optimization pass (#15)
- feat(proxy): add Get-ProxyConfiguration (#16)
- feat: general improvements (#17)
- feat: first audit commit (#18)
 
## 0.0.9 - 2026-03-23
- perf: optimization pass (#15)
 
## 0.0.8 - 2026-03-22
- fix: minor fixes (#14)
 
## 0.0.7 - 2026-03-22
- fix: remove useless property (#8)
- feat(system): add Get-ComputerUptime (#9)
- feat(system): add Get-SystemSummary (#10)
- feat: general improvements (#11)
- feat(system): add Get-PendingReboot (#12)
- feat: PSTypeName on all outputs (#13)
 
## 0.0.6 - 2026-03-21
- fix: remove useless property (#8)
- feat(system): add Get-ComputerUptime (#9)
 
## 0.0.5 - 2026-03-21
- Minor improvements
 
## 0.0.4 - 2026-03-20
- fix: fixed function (#5)
- fix(rdp): fixed sessions functions (#6)
- feat(ntp): add Test-NTPSync (#7)
 
## 0.0.3 - 2026-03-20
- Minor improvements
 
## 0.0.2 - 2026-03-19
- feat(ci): new CI pipeline (#1)
- feat(utils): add ConvertFrom-MisencodedString (#2)
- feat(rdp): add Get-RdpSessionHistory (#3)
- feat(rdp): add sessions functions (#4)'


            # Prerelease string of this module
            # Prerelease = ''

            # Flag to indicate whether the module requires explicit user acceptance for install/update/save
            # RequireLicenseAcceptance = $false


        } # End of PSData hashtable

    } # End of PrivateData hashtable

    # HelpInfo URI of this module
    # HelpInfoURI = ''

    # Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
    # DefaultCommandPrefix = ''

}