Capa.PowerShell.Module.SDK.SystemSdk.psm1


# TODO: #189 Update and add tests

<#
    .SYNOPSIS
        Counts the number of conscom actions.
 
    .DESCRIPTION
        Counts the number of conscom actions.
 
    .PARAMETER CapaSDK
        The CapaSDK object.
 
    .PARAMETER ManagementServerID
        The management server ID to check for. If omitted, conscom actions for all servers are counted.
 
    .EXAMPLE
        PS C:\> Count-CapaConscomActions -CapaSDK $CapaSDK -ManagementServerID 1
 
    .NOTES
        For more information, see https://capasystems.atlassian.net/wiki/spaces/CI64DOC/pages/19306247078/Count+conscom+actions
#>

function Count-CapaConscomActions {
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory = $true)]
        $CapaSDK,
        [Parameter(Mandatory = $true)]
        [int]$ManagementServerID
    )

    $value = $CapaSDK.CountConscomActions($ManagementServerID)
    return $value
}


# TODO: #190 Update and add tests

<#
    .SYNOPSIS
        Get a list of all business units.
 
    .DESCRIPTION
        Get a list of all business units.
 
    .PARAMETER CapaSDK
        The CapaSDK object.
 
    .EXAMPLE
        PS C:\> Get-CapaBusinessUnits -CapaSDK $CapaSDK
 
    .NOTES
        For more information, see https://capasystems.atlassian.net/wiki/spaces/CI64DOC/pages/19306247086/Get+Business+Units
#>

function Get-CapaBusinessUnits {
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory = $true)]
        $CapaSDK
    )

    $oaUnits = @()

    $aUnits = $CapaSDK.GetBusinessUnits()

    foreach ($sItem in $aUnits) {
        $aItem = $sItem.Split(';')
        $oaUnits += [pscustomobject]@{
            Name = $aItem[0];
            GUID = $aItem[1];
            Id   = $aItem[2]
        }
    }

    Return $oaUnits
}


# TODO: #191 Update and add tests

<#
    .SYNOPSIS
        Get a list of all external tools.
 
    .DESCRIPTION
        Get a list of all external tools.
 
    .PARAMETER CapaSDK
        The CapaSDK object.
 
    .EXAMPLE
        PS C:\> Get-CapaExternalTools -CapaSDK $CapaSDK
 
    .NOTES
        For more information, see https://capasystems.atlassian.net/wiki/spaces/CI64DOC/pages/19306247096/Get+external+tools
#>

function Get-CapaExternalTools {
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory = $true)]
        $CapaSDK
    )

    $oaUnits = @()

    $aUnits = $CapaSDK.GetExternalTools()

    foreach ($sItem in $aUnits) {
        $aItem = $sItem.Split(';')
        $oaUnits += [pscustomobject]@{
            ID        = $aItem[0];
            Name      = $aItem[1];
            Path      = $aItem[2];
            Arguments = $aItem[3]
        }
    }

    Return $oaUnits
}


# TODO: #192 Update and add tests

<#
    .SYNOPSIS
        Get management points or a specific management point.
 
    .DESCRIPTION
        If CmpId is not specified, all management points are returned.
 
    .PARAMETER CapaSDK
        The CapaSDK object.
 
    .PARAMETER CmpId
        The ID of the management point to return. If omitted, all management points are returned.
 
    .EXAMPLE
                PS C:\> Get-CapaManagementPoint -CapaSDK $value1 -CmpId $value2
 
    .NOTES
        For more information, see https://capasystems.atlassian.net/wiki/spaces/CI64DOC/pages/19306247106/Get+management+point
        And https://capasystems.atlassian.net/wiki/spaces/CI64DOC/pages/19306247116/Get+management+points
#>

function Get-CapaManagementPoint {
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory = $true)]
        $CapaSDK,
        [int]$CmpId = ''
    )

    $oaUnits = @()

    if ($CmpId -eq '') {
        $aUnits = $CapaSDK.GetManagementPoints()
    } else {
        $aUnits = $CapaSDK.GetManagementPoint($OSPointID)
    }

    foreach ($sItem in $aUnits) {
        $aItem = $sItem.Split(';')
        $oaUnits += [pscustomobject]@{
            Id          = $aItem[0];
            Name        = $aItem[1];
            Description = $aItem[2];
            Drive       = $aItem[3];
            GUID        = $aItem[4];
            LocalFolder = $aItem[5];
            Server      = $aItem[6];
            Share       = $aItem[7];
            ParentGUID  = $aItem[8]
        }
    }

    Return $oaUnits
}


# TODO: #193 Update and add tests

<#
    .SYNOPSIS
        Get a list of all management servers.
 
    .DESCRIPTION
        Get a list of all management servers.
 
    .PARAMETER CapaSDK
        The CapaSDK object.
 
    .EXAMPLE
        PS C:\> Get-CapaManagementServers -CapaSDK $CapaSDK
 
    .NOTES
        For more information, see https://capasystems.atlassian.net/wiki/spaces/CI64DOC/pages/19306247126/Get+management+servers
#>

function Get-CapaManagementServers {
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory = $true)]
        $CapaSDK
    )

    $oaUnits = @()

    $aUnits = $CapaSDK.GetManagementServers()

    foreach ($sItem in $aUnits) {
        $aItem = $sItem.Split(';')
        $oaUnits += [pscustomobject]@{
            Name          = $aItem[0];
            Path          = $aItem[1];
            Version       = $aItem[2];
            Drive         = $aItem[3];
            Server        = $aItem[4];
            Share         = $aItem[5];
            IsParentShare = $aItem[7];
            GUID          = $aItem[8];
            ID            = $aItem[9]
        }
    }

    Return $oaUnits
}


# TODO: #194 Update and add tests

<#
    .SYNOPSIS
        Rebuilds CapaInstaller.kit file on Management Server.
 
    .DESCRIPTION
        Rebuilds CapaInstaller.kit file on Management Server. The function sets an action for the assigned Replicator to perform.
 
    .PARAMETER CapaSDK
        The CapaSDK object.
 
    .PARAMETER PackageName
        The name of the package.
 
    .PARAMETER PackageVersion
        The version of the package.
 
    .PARAMETER PackageType
        The type of the package.
 
    .PARAMETER ServerName
        The management server to which the package is to be added to.
 
    .EXAMPLE
        PS C:\> Rebuild-CapaKitFileOnManagementServer -CapaSDK $CapaSDK -PackageName 'WinRaR' -PackageVersion '5.50' -PackageType 'Computer' -ServerName 'MS1'
 
    .NOTES
        For more information, see https://capasystems.atlassian.net/wiki/spaces/CI64DOC/pages/19306247144/Rebuild+kit+on+Management+Server
#>

function Rebuild-CapaKitFileOnManagementServer {
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory = $true)]
        $CapaSDK,
        [Parameter(Mandatory = $true)]
        [String]$PackageName,
        [Parameter(Mandatory = $true)]
        [String]$PackageVersion,
        [Parameter(Mandatory = $true)]
        [ValidateSet('1', '2', 'Computer', 'User')]
        [String]$PackageType,
        [Parameter(Mandatory = $true)]
        [String]$ServerName
    )

    if ($PackageType -eq 'Computer') {
        $PackageType = '1'
    }
    if ($PackageType -eq 'User') {
        $PackageType = '2'
    }

    $value = $CapaSDK.RebuildKitFileOnServer($PackageName, $PackageVersion, $PackageType, $ServerName)
    return $value
}


# TODO: #195 Update and add tests

<#
    .SYNOPSIS
        Rebuilds CapaInstaller.kit file on all Management Servers in the given Management Point.
 
    .DESCRIPTION
        Rebuilds CapaInstaller.kit file on all Management Servers in the given Management Point.
 
    .PARAMETER CapaSDK
        The CapaSDK object.
 
    .PARAMETER PackageName
        The name of the package.
 
    .PARAMETER PackageVersion
        The version of the package.
 
    .PARAMETER PackageType
        The type of the package.
 
    .PARAMETER PointID
        The ID of the management point.
 
    .EXAMPLE
        PS C:\> Rebuild-CapaKitFileOnPoint -CapaSDK $CapaSDK -PackageName 'WinRaR' -PackageVersion '5.50' -PackageType 'Computer' -PointID 1
 
    .NOTES
        For more information, see https://capasystems.atlassian.net/wiki/spaces/CI64DOC/pages/19306247136/Rebuild+kit+on+Management+Point
#>

function Rebuild-CapaKitFileOnPoint {
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory = $true)]
        $CapaSDK,
        [Parameter(Mandatory = $true)]
        [String]$PackageName,
        [Parameter(Mandatory = $true)]
        [String]$PackageVersion,
        [Parameter(Mandatory = $true)]
        [ValidateSet('1', '2', 'Computer', 'User')]
        [String]$PackageType,
        [Parameter(Mandatory = $true)]
        [int]$PointID
    )

    if ($PackageType -eq 'Computer') {
        $PackageType = '1'
    }
    if ($PackageType -eq 'User') {
        $PackageType = '2'
    }

    $value = $CapaSDK.RebuildKitFileOnPoint($PackageName, $PackageVersion, $PackageType, $PointID)
    return $value
}


# TODO: #196 Update and add tests

<#
    .SYNOPSIS
        Resets the last run date on a global task.
 
    .DESCRIPTION
        Returns the last run date on a global task.
 
    .PARAMETER CapaSDK
        The CapaSDK object.
 
    .PARAMETER TaskDisplayName
        The display name of the task. Can be one of the following:
            Auto Archive Changelog
            Cleanup Performance Index Data
            Clear Changeset
            Clear Deleted Units
            Group Health Check
            Inventory Cleanup
            Process Metering History
            Process SQL groups
            System Health
            Update Active Directory Groups
            Update Application Groups
            Update OS Version
            Update Unit Commands
            Update Unlicensed Software Queries
 
    .EXAMPLE
        PS C:\> Reset-CapaLastRunDateOnGlobalTask -CapaSDK $CapaSDK -TaskDisplayName 'Auto Archive Changelog'
 
    .NOTES
        For more information, see https://capasystems.atlassian.net/wiki/spaces/CI64DOC/pages/19306247152/Reset+LastRun+Date+On+Global+Task
#>

function Reset-CapaLastRunDateOnGlobalTask {
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory = $true)]
        $CapaSDK,
        [Parameter(Mandatory = $true)]
        [ValidateSet('Auto Archive Changelog', 'Cleanup Performance Index Data', 'Clear Changeset', 'Clear Deleted Units', 'Group Health Check', 'Inventory Cleanup', 'Process Metering History', 'Process SQL groups', 'System Health', 'Update Active Directory Groups', 'Update Application Groups', 'Update OS Version', 'Update Unit Commands', 'Update Unlicensed Software Queries')]
        [string]$TaskDisplayName
    )

    $value = $CapaSDK.ResetLastRunOnGlobalTask($TaskDisplayName)
    return $value
}