WinBatchOrchestrator.psd1

@{
    ModuleVersion = '1.0.1'
    GUID = 'eea860d6-0426-4275-a140-1e1fef87e81a'
    Author = 'Michael Muecke'
    CompanyName = 'auronet GmbH'
    Copyright = '(c) 2025 auronet GmbH. All rights reserved.'
    Description = 'WinBatchOrchestrator is a robust framework for managing local batch jobs on Windows Servers. It abstracts Windows Task Scheduler to provide polyglot support (PowerShell, Node.js), dependency management, centralized logging, execution history, and secure secret injection. Ideal for DevOps teams seeking to standardize local automation tasks.'
    PowerShellVersion = '5.1'
    # The module drives Windows Task Scheduler and Windows ACLs.
    CompatiblePSEditions = @('Desktop')
    FunctionsToExport = @(
        'Initialize-OrchestratorEnvironment',
        'New-OpsJob',
        'Register-OpsJobs',
        'New-OpsCreds',
        'Get-OpsJob',
        'Start-OpsJob',
        'Stop-OpsJob',
        'Remove-OpsJob',
        'Get-OpsJobHistory',
        'Get-OpsJobLog'
    )
    # Explicit empty lists: omitting these exports everything and slows down
    # command discovery for anyone with the module installed.
    CmdletsToExport = @()
    VariablesToExport = @()
    AliasesToExport = @()
    FileList = @(
        'WinBatchOrchestrator.psm1',
        'WinBatchOrchestrator.psd1',
        'README.md',
        'Assets\JobRunner.ps1',
        'Assets\New-OpsJob.ps1',
        'Assets\Register-OpsJobs.ps1',
        'Assets\New-OpsCreds.ps1',
        'Assets\OpsUtils.psm1',
        'Assets\ops-utils.js',
        'Assets\Get-OpsJob.ps1',
        'Assets\Start-OpsJob.ps1',
        'Assets\Stop-OpsJob.ps1',
        'Assets\Remove-OpsJob.ps1',
        'Assets\Get-OpsJobHistory.ps1',
        'Assets\Get-OpsJobLog.ps1',
        'Assets\Cleanup-OpsLogs.ps1',
        'Assets\Template-Boilerplate.ps1',
        'Assets\Template-Boilerplate.js',
        'Assets\Dashboard\server.js',
        'Assets\Dashboard\package.json',
        'Assets\Dashboard\client\index.html',
        'Assets\Dashboard\client\package.json',
        'Assets\Dashboard\client\vite.config.js',
        'Assets\Dashboard\client\tailwind.config.js',
        'Assets\Dashboard\client\postcss.config.js',
        'Assets\Dashboard\client\src\main.jsx',
        'Assets\Dashboard\client\src\App.jsx',
        'Assets\Dashboard\client\src\index.css'
    )

    PrivateData = @{
        PSData = @{
            Tags = @('Operations', 'Orchestrator', 'Batch', 'Scheduling', 'Windows', 'TaskScheduler')
            ProjectUri = 'https://github.com/auronet/WinBatchOrchestrator'
            LicenseUri = 'https://github.com/auronet/WinBatchOrchestrator/blob/main/LICENSE'
            ReleaseNotes = @'
1.0.1
- Fixed: -ScriptArguments hashtables are now passed to jobs intact. Job settings
  travel to JobRunner as a Base64 JSON payload instead of a concatenated command
  line, so arguments containing spaces, quotes or a leading '-' survive and a
  crafted job name can no longer inject extra runner parameters.
- Fixed: -Interval was applied to every job because [timespan]::Zero is truthy;
  an interval now produces a repeating trigger with a valid duration.
- Fixed: non-SYSTEM service accounts are registered with the S4U logon type
  instead of the invalid ServiceAccount type.
- Fixed: assets were redeployed on every Initialize-OrchestratorEnvironment call
  due to a trailing newline in version.txt.
- Fixed: the Secrets ACL now uses well-known SIDs and works on non-English Windows.
- Fixed: Get-OpsJobHistory parses the NDJSON history line by line (it failed
  outright on PowerShell 5.1).
- Fixed: Node.js jobs run in-process so their output reaches the transcript, and
  npm install is invoked in a way that resolves npm.cmd.
- Fixed: a script exiting non-zero now fails its job instead of reporting success.
- Fixed: Cleanup-OpsLogs no longer deletes job history, and trims it instead.
- Fixed: dashboard directory traversal via the job name, and wide-open CORS.
- Fixed: the dashboard shows real job status instead of hardcoded placeholders.
- Fixed: failure alerts are sent after the transcript is closed. They were sent
  while Start-Transcript still held the log open, so Send-MailMessage -Attachments
  always failed with "the process cannot access the file". The mail is now retried
  without the attachment if it still cannot be read.
- Changed: email alerts require OPS_SMTP_SERVER/OPS_SMTP_FROM (or -SmtpServer/
  -SmtpFrom); they previously pointed at smtp.example.com and always failed.
  OPS_SMTP_PORT / OPS_SMTP_USESSL (-SmtpPort / -SmtpUseSsl) are also supported.
'@

        }
    }
    RootModule = 'WinBatchOrchestrator.psm1'
}