<# .SYNOPSIS A short one-line action-based description, e.g. 'Tests if a function is valid' .DESCRIPTION A longer description of the function, its purpose, common use cases, etc. .NOTES Information or caveats about the function e.g. 'This function is not supported in Linux' .LINK Specify a URI to a help page, this will show when Get-Help -Online is used. .EXAMPLE $NewITDVMSNowRitmParams = @{ RequestType = "New"; ComputerName = "itdzmtest100.nd.gov"; SysadminEmail = "zmeier@nd.gov"; CustomerRitm = "RITM0145886"; Environment = "Test"; AppName = "Infra-VMware"; Comments = "New VM for VMware sandbox, see RITM0145886 for details"; OperatingSystem = "Windows"; TargetOSVersion = "Windows Server 2022 Datacenter"; TargetPlatform = "VMware"; NumCpu = 1; MemoryGB = 4; Disk1GB = 50; Disk2GB = 5; CIDR = '10.11.12.0/23'; Datacenter = 'Bismarck'; LicensingRestrictions = 'No Licensing Restrictions'; AgencyPrefix = 'ITD'; SupportHours = 'All Day Every Day'; DRProtection = 'No DR'; StartupPriority = 5; } New-ITDVMSNowRitm @NewITDVMSNowRitmParams .EXAMPLE New-ITDVMSNowRitm -ImportCsv "C:\temp\NewITDVMSnowRitm.csv" #> function New-ITDVMSNowRitm { [CmdletBinding()] param ( [Parameter(ParameterSetName = 'Csv')] [string] $ImportCsv, [Parameter(ParameterSetName = 'Single', Mandatory = $true)] [ValidateSet('New', 'Upgrade/Code Deployment', 'Removal', 'Other')] [string] $RequestType, [Parameter(ParameterSetName = 'Single', Mandatory = $true)] [string] $ComputerName, [Parameter(ParameterSetName = 'Single', Mandatory = $true)] [string] $SysadminEmail, [Parameter(ParameterSetName = 'Single', Mandatory = $true)] [string] $Comments, [Parameter(ParameterSetName = 'Single', Mandatory = $true)] [ValidateSet('Production', 'Test')] [string] $Environment, [Parameter(ParameterSetName = 'Single', Mandatory = $true)] [string] $AppName, [Parameter(ParameterSetName = 'Single')] [ValidateSet('Linux', 'Windows')] [string] $OperatingSystem, [Parameter(ParameterSetName = 'Single')] [ValidateSet( 'Windows Server 2019 Datacenter', 'Windows Server 2022 Datacenter' )] [string] $TargetOSVersion, [Parameter(ParameterSetName = 'Single')] [ValidateSet('VMware', 'Azure')] $TargetPlatform, [Parameter(ParameterSetName = 'Single')] [int] $NumCpu, [Parameter(ParameterSetName = 'Single')] [int] $MemoryGB, [Parameter(ParameterSetName = 'Single')] [int] $Disk1GB, [Parameter(ParameterSetName = 'Single')] [int] $Disk2GB, [Parameter(ParameterSetName = 'Single')] [string] $CIDR, [Parameter(ParameterSetName = 'Single')] [ValidateSet('Bismarck', 'Mandan')] [string] $Datacenter, [Parameter(ParameterSetName = 'Single')] [ValidateSet( 'No Licensing Restrictions', 'Microsoft SharePoint Server', 'Microsoft SharePoint Server (Academic)', 'Microsoft SQL Developer', 'Microsoft SQL MSDN', 'Microsoft SQL Standard', 'Microsoft SQL Standard (Academic)', 'Microsoft SQL Standard (Vendor Provided)', 'Microsoft SQL Enterprise', 'Microsoft SQL Enterprise (Academic)', 'IBM Websphere', 'IBM ODM', 'Oracle Standard Edition', 'Oracle Standard Edition One', 'Powerschool' )] [string] $LicensingRestrictions, [Parameter(ParameterSetName = 'Single')] [ValidateSet('ITD', 'DHS', 'DOT')] [string] $AgencyPrefix, [Parameter(ParameterSetName = 'Single')] [ValidateSet('All Day Every Day', 'All Week 500 to 2300', 'Weekdays 700 1800')] [string] $SupportHours, [Parameter(ParameterSetName = 'Single')] [ValidateSet( 'No DR', 'VMWare: ABR', 'VMWARE: RPO 0:15', 'VMWARE: RPO 0:30', 'VMWARE: RPO 1:00', 'VMWARE: RPO 2:00', 'VMWARE: RPO 4:00', 'VMWARE: RPO 8:00')] [string] $DRProtection, [Parameter(ParameterSetName = 'Single')] [ValidateRange(1, 5)] [int] $StartupPriority ) begin { } process { switch ($PSCmdlet.ParameterSetName) { 'Csv' { $Csv = Import-Csv $ImportCsv ForEach ($item in $csv) { $NewITDVMSNowRitmParams = @{ RequestType = $item.RequestType ComputerName = $item.ComputerName SysadminEmail = $item.SysadminEmail Environment = $item.Environment AppName = $item.AppName Comments = $item.Comments OperatingSystem = $item.OperatingSystem TargetOSVersion = $item.TargetOSVersion TargetPlatform = $item.TargetPlatform NumCpu = $item.NumCpu MemoryGB = $item.MemoryGB Disk1GB = $item.Disk1GB Disk2GB = $item.Disk2GB CIDR = $item.CIDR Datacenter = $item.Datacenter LicensingRestrictions = $item.LicensingRestrictions AgencyPrefix = $item.AgencyPrefix SupportHours = $item.SupportHours DRProtection = $item.DRProtection StartupPriority = $item.StartupPriority } New-ITDVMSNowRitm @NewITDVMSNowRitmParams } } 'Single' { Write-Verbose -Message ("Start " + $ComputerName) # determine lookup fields switch ($PSBoundParameters.Keys) { CIDR { $cidr_block = Get-ITDServiceNowRecord -Table 'cmdb_ci_ip_network' -Filter "name=$CIDR" If ($null -eq $cidr_block) { Write-Error -Message "CIDR is invalid" -ErrorAction Stop } } AgencyPrefix { switch ($AgencyPrefix) { 'DHS' { $AgencyNum = '325.0' } 'DOT' { $AgencyNum = '801.0' } 'ITD' { $AgencyNum = '112.0' } } $Agency = Get-ITDServiceNowRecord -Table 'cmn_department' -Filter "id=$AgencyNum" } AppName { $application_info = Get-ITDServiceNowRecord -Table cmdb_ci_service -Filter ("name=$AppName") } # send ints as strings NumCpu { [string]$NumCpuStr = $NumCpu.ToString() } MemoryGB { [string]$MemoryGBStr = $MemoryGB.ToString() } Disk1GB { [string]$Disk1GBStr = $Disk1GB.ToString() } Disk2GB{ [string]$Disk2GBStr = $Disk2GB.ToString() } } $team_lead_sysid = (Get-ITDServiceNowUser -Email $RequestedForEmail).manager.value $NewITDServiceNowServiceCatalogRequestParams = @{ # review and update all of these too CategoryItemName = "Application Server"; RequestedForEmail = $SysadminEmail; Values = @{ request_type = $RequestType; application_name = $AppName; environment = $Environment; require_hosting_quote = 'No'; server_name = $ComputerName; add_change_disaster_recovery = 'No'; additional_comments = $Comments; #### vm_work_needed = 'Yes'; host_name = $ComputerName; server_type = 'Virtual'; operating_system = $OperatingSystem; target_os_version_windows = $TargetOSVersion; target_platform = $TargetPlatform; processors = $NumCpuStr; memory_gb = $MemoryGBStr; disk_1_os = $Disk1GBStr; disk_2_swap_disk = $Disk2GBStr; data_center = $Datacenter; licensing_restrictions = $LicensingRestrictions; support_hours = $SupportHours; dr_protection = $DRProtection; startup_priority = $StartupPriority; # lookups cidr_block = $cidr_block.sys_id; agency_name = $agency.sys_id; team_lead = $team_lead.sys_id; application_info = $application_info.sys_id; }; } New-ITDServiceNowServiceCatalogRequest @NewITDServiceNowServiceCatalogRequestParams #$NewITDServiceNowServiceCatalogRequestParams Write-Verbose -Message ("End " + $ComputerName) } } } end { } }