Public/New-SPSMondayConfiguration.ps1
Function New-SPSMondayConfiguration { <# .SYNOPSIS Create a new configuration for the SPSMonday module .DESCRIPTION This function creates a new configuration profile for connecting to the Monday.com API. It will prompt for the necessary API token and save it securely for future use. .PARAMETER Name The name for this configuration profile (e.g., "production", "staging") .EXAMPLE New-SPSMondayConfiguration -Name "production" Creates a new configuration named "production" and prompts for API token .EXAMPLE New-SPSMondayConfiguration Prompts for configuration name and API token .INPUTS System.String .OUTPUTS None .NOTES The API token is stored securely using PowerShell's Export-Clixml functionality. You can obtain your API token from the Monday.com Developer Center. .LINK https://developer.monday.com/api-reference/docs/authentication #> [CmdletBinding()] Param( [Parameter(Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0)] [String]$Name ) Begin { Write-Verbose -Message "Starting $($MyInvocation.InvocationName)..." Write-Verbose -Message "Parameters: Name = '$Name'" } Process { try { # Prompt for configuration name if not provided if (!$Name) { $Name = Read-Host "Configuration Name (e.g., production, staging)" } # Validate configuration name if ([string]::IsNullOrWhiteSpace($Name)) { throw "Configuration name cannot be empty." } Write-Verbose -Message "Creating configuration: $Name" # Create configuration directory if it doesn't exist $configPath = "$Script:SPSMondayConfigRoot\$Name" if (!(Test-Path -Path $configPath)) { Write-Verbose -Message "Creating directory: $configPath" New-Item -ItemType Directory -Path $configPath -Force | Out-Null $Script:SPSMondayConfigDir = $configPath Write-Output "" Write-Output "=== Monday.com API Configuration Setup ===" Write-Output "" Write-Output "To get your API token:" Write-Output "1. Log into your Monday.com account" Write-Output "2. Click on your profile picture (top right)" Write-Output "3. Select 'Developers'" Write-Output "4. Click 'My Access Tokens' > 'Show'" Write-Output "5. Copy your personal token" Write-Output "" # Prompt for API token securely $apiTokenCredential = Get-Credential -UserName "ApiToken" -Message "Enter your Monday.com API Token as the password" if (!$apiTokenCredential) { throw "API token is required to create configuration." } # Save the API token securely $tokenPath = "$configPath\token.xml" $apiTokenCredential | Export-Clixml -Path $tokenPath Write-Verbose -Message "API token saved to: $tokenPath" # Create configuration metadata $configData = @{ Name = $Name Created = Get-Date BaseURL = "https://api.monday.com/v2" } $configPath = "$configPath\config.json" $configData | ConvertTo-Json | Out-File -FilePath $configPath -Encoding UTF8 Write-Verbose -Message "Configuration metadata saved to: $configPath" Write-Output "" Write-Output "Configuration '$Name' created successfully!" Write-Output "To activate this configuration, run: Set-SPSMondayConfiguration -Name '$Name'" Write-Output "" } else { Write-Warning -Message "Configuration '$Name' already exists." Write-Output "To update an existing configuration, delete the folder and recreate it, or use Set-SPSMondayConfiguration to switch to it." } } catch { Write-Error -Message "Error creating configuration: $($_.Exception.Message)" throw $_ } } End { Write-Verbose -Message "Ending $($MyInvocation.InvocationName)..." } } |