DataGen/Initialize-DemoData.ps1

[CmdletBinding()]
param ( 
    [Parameter()]
    [ValidateSet("tiny","100","500","1k","10k","20k")]
    $size = "tiny",
    [Parameter()]
    [Switch]$whatif,
    # a parameter to just create one of each
    [Parameter()]
    [int]$count
    
    )

#
# This file contains various profile information for
# setting up the artifacts for the script based demo data generation
#
#

$COMPUTERPROFILES = @{
    PHYSICALDISKS    = 1..2
    OPERATINGSYSTEM  = 1
    PROCESSOR        = 2..4
    DISKPARTITION    = 2..4
    LOGICALDISK      = 2..10
    NETWORKADAPTER   = 3..10
    }

# here are the ratios - based on a single computer
$RATIOS = @{
    COMPUTER        = 1
    USER            = 1     # 1 user for every computer
    INCIDENT        = 10    # 10 incidents for every computer
    CHANGEREQUEST   = .012  # 1 change requests for every 80 computers
    PROBLEM         = .005  # 1 for every 500 computers
    SERVICE         = .005  # 1 service for every 500 computerc
    SOFTWAREUPDATE  = 50    # 50 software updates per computer
    SOFTWAREITEM    = 20    # 20 software packages per computer
    RELEASERECORD   = .001  # 1 for every 1000 computers
    KNOWLEDGE       = .1    # 1 for every 10 computers
    GROUP           = .025  # 1 for every 40 computers
    QUEUE           = .001  # 1 for every 1000 computers
    PRINTER         = .01   # 1 for every 100 computers
    SERVICEREQUEST  = .01   # 1 for every 100 computers
    }

# be sure to always create at least this many
# in case the profile is one of the small ones
$MINIMUM = @{
    COMPUTER        = 10
    USER            = 10
    INCIDENT        = 10
    CHANGEREQUEST   = 5
    PROBLEM         = 5
    SERVICE         = 3
    SOFTWAREUPDATE  = 5
    SOFTWAREITEM    = 2
    RELEASERECORD   = 5
    KNOWLEDGE       = 20
    GROUP           = 4
    QUEUE           = 4
    PRINTER         = 2
    SERVICEREQUEST  = 10
    }

$MAXIMUM = @{
    SOFTWAREUPDATE = 75
    SOFTWAREITEM   = 50
    }

$SCRIPTMAP = @{
    COMPUTER        = "Initialize-ComputerProjection.ps1"
    USER            = "Initialize-User.ps1"
    INCIDENT        = "Initialize-Incident.ps1"
    CHANGEREQUEST   = "Initialize-ChangeRequest.ps1"
    PROBLEM         = "Initialize-Problem.ps1"
    SERVICE         = "Initialize-Service.ps1"
    SOFTWAREUPDATE  = "Initialize-SoftwareUpdate.ps1"
    SOFTWAREITEM    = "Initialize-SoftwareItem.ps1"
    RELEASERECORD   = "Initialize-ReleaseRecord.ps1"
    KNOWLEDGE       = "Initialize-KnowledgeArticle.ps1"
    GROUP           = "Initialize-Group.ps1"
    QUEUE           = "Initialize-Queue.ps1"
    PRINTER         = "Initialize-Printer.ps1"
    OFFERING        = "Initialize-Offering.ps1"
    SERVICEREQUEST  = "Initialize-ServiceRequest.ps1"
    SERVICEOFFERING = "Initialize-ServiceOffering.ps1"
    REQUESTOFFERING = "Initialize-RequestOffering.ps1"
    }

$MULTIPLIERS = @{
    "tiny" = 1
    100  = 100
    500  = 500
    "1k"   = 1000
    "10k"  = 10000
    "20K"  = 20000
    "50K"  = 50000
    }

#$ORDER = "USER", "SOFTWAREUPDATE", "SOFTWAREITEM", "COMPUTER",
# "KNOWLEDGE", "PRINTER", "GROUP", "QUEUE", "INCIDENT",
# "CHANGEREQUEST", "PROBLEM", "SERVICE", "RELEASERECORD"
#
$ORDER = "USER", "SOFTWAREUPDATE", "SOFTWAREITEM", "COMPUTER", 
    "KNOWLEDGE", "PRINTER", "GROUP", "QUEUE",
    "PROBLEM", 
    "SERVICE", 
    "INCIDENT",
    "CHANGEREQUEST"

# HANDLE NEW V2 FEATURES
if ( (Get-ScsmManagementPack System.Library).Version -ge "7.5.8500.0" )
{
    $ORDER += "RELEASERECORD","SERVICEREQUEST" # no service offering/request offering yet,"SERVICEOFFERING","REQUESTOFFERING"
}

$x = $MULTIPLIERS[$size]
foreach($k in $ORDER)
{
    $v = $x * $RATIOS[$k]
    if ( $v -lt $MINIMUM[$k] ) { $v = $MINIMUM[$k] }
    if ( $MAXIMUM.ContainsKey($k) -and ($v -gt $MAXIMUM[$k]) ) { $v = $MAXIMUM[$k] }
    #"{0,4} {1}" -f $v,$k
    $script = $SCRIPTMAP[$k]
    if ( $count ) { $v = $count }
    Write-Host "Creating $v Instances for $K"
    & ./$script -count $v -whatif:$whatif
    # "{0} -count {1}" -f $SCRIPTMAP[$k],$v

}