Public/New-Instance.ps1
|
class SqlServerVersion : System.Management.Automation.IValidateSetValuesGenerator { [String[]] GetValidValues() { return ( @() + ( Get-Version | Select-Object -ExpandProperty Version | ForEach-Object { $_ | Write-Output New-Object System.Version $_.Major, $_.Minor | Write-Output New-Object System.Version $_.Major, $_.Minor, $_.Build | Write-Output }) + ( $null | Write-Output ) ) } } function New-Instance { <# .SYNOPSIS Creates and starts a SQL Server LocalDB instance. .DESCRIPTION Creates a LocalDB instance, starts it, and returns its instance details. If no name is specified, a random name is generated. Use Get-LocalDbVersion to see the installed versions that can be used with the Version parameter. Supports ShouldProcess, so use -WhatIf to preview the operation or -Confirm to be prompted before it runs. .EXAMPLE PS> New-LocalDbInstance -Name 'foobar' Creates and starts an instance named 'foobar', then returns its details. .EXAMPLE PS> New-LocalDbInstance -Name 'foobar' -WhatIf Shows the create operation without creating or starting the instance. #> [CmdletBinding(SupportsShouldProcess)] param ( # Name for the new instance; defaults to a random eight-character name. [Parameter()] [ValidateNotNullOrEmpty()] [string] $Name = ( [string](New-Guid) ).Substring(0, 8), # Installed SQL Server LocalDB version to use; defaults to SqlLocalDB's version. [Parameter()] [ValidateSet([SqlServerVersion])] [string] $Version ) process { Write-Verbose "Create sqllocaldb instance $Name." $arguments = @('create', $Name) if ($Version) { $arguments += $Version } $arguments += '-s' if (-not $PSCmdlet.ShouldProcess($Name, 'Create LocalDB instance')) { return } $result = Invoke-SqlLocalDb -ArgumentList $arguments $result.Output | Where-Object { "$_".Trim() } | Write-Verbose if (-not $result.Succeeded) { Write-SqlLocalDbError -Message "Failed to create LocalDB instance '$Name'." -Details $result.Error return } $instance = Get-Instance -Name $Name if ($null -eq $instance) { Write-SqlLocalDbError -Message "Created LocalDB instance '$Name', but could not retrieve its details." return } $instance } } |