[KEERO-96] Implemented skeleton of MSSQL server setup command line parser

This commit is contained in:
Dmitry Korotkov 2013-03-01 17:05:05 -08:00
parent 80fce6f232
commit 465c20cf63
2 changed files with 335 additions and 0 deletions

View File

@ -0,0 +1,169 @@
function New-Option ([string]$Name, [switch]$Switch, [switch]$Boolean, [switch]$String, [switch]$List, $Constraints=$null) {
<#
.SYNOPSIS
ToDo: Describe
.DESCRIPTION
ToDo: Describe
#>
$Option = New-Object -TypeName PSObject
# Fields
$Option | Add-Member NoteProperty Type -value $null
$Option | Add-Member NoteProperty Name -value $null
$Option | Add-Member NoteProperty AllowedValues -value $null
# Init
$Option | Add-Member ScriptMethod __init__ {
param([string]$Name, $Switch, $Boolean, $String, $List)
$this.Name = $Name
# With respect for our developers we do not check for double type selected
if ($Switch) {
AugmentOptionSwitch($this)
} elseif ($Boolean) {
AugmentOptionBoolean($this)
} elseif ($String) {
AugmentOptionString($this)
} elseif ($List) {
AugmentOptionList($this)
} else {
throw "Switch, Boolean, String or List option type must be provided for option '$Name'"
}
}
$Option | Add-Member ScriptMethod __post_init__ {
param($Constraints=$null)
if ($Constraints -ne $null) {
$this.AllowedValues = @()
$this.AllowedValues = $this.AllowedValues + $Constraints
} else {
$Constraints = $null
}
}
# Methods
$Option | Add-Member -Force ScriptMethod Validate {
if ($this.AllowedValues -ne $null) {
if (-not($this.AllowedValues -contains $this.Value)) {
$Cts = $this.AllowedValues -join ','
throw "Option '$($this.Name)' may have values ($Cts) but not '$($this.Value)'"
}
}
}
$Option | Add-Member -Force ScriptMethod ToString {
return "/$($this.Name)"
}
# invoke constructor
$Option.__init__($Name, $Switch, $Boolean, $String, $List)
$Option.__post_init__($Constraints)
return $Option
}
function AugmentOptionSwitch($Option) {
}
function AugmentOptionBoolean($Option) {
# Fields
$Option | Add-Member NoteProperty Value -value $false
# Methods
$Option | Add-Member -Force ScriptMethod ToString {
if ($this.Value) {
return "/$($this.Name)=1"
} else {
return "/$($this.Name)=0"
}
}
}
function AugmentOptionString($Option) {
# Fields
$Option | Add-Member NoteProperty Value -value ""
# Methods
$Option | Add-Member -Force ScriptMethod ToString {
$v = "$($this.Value)"
if ($v -match '.* .*') {
# TODO: Escape double quote characters if possible
return "/$($this.Name)=`"$v`""
} else {
return "/$($this.Name)=$v"
}
}
}
function AugmentOptionList($Option) {
# Fields
$Option | Add-Member NoteProperty Value -value @()
# Methods
$Option | Add-Member -Force ScriptMethod Validate {
if ($this.AllowedValues -ne $null) {
foreach ($V in $this.Value) {
if (-not($this.AllowedValues -contains $V)) {
$Cts = $this.AllowedValues -join ','
throw "Option '$($this.Name)' may have values ($Cts) but not '$V'"
}
}
}
}
$Option | Add-Member -Force ScriptMethod ToString {
return "/$($this.Name)=$($this.Value -join ',')"
}
}
function New-OptionParser() {
<#
.SYNOPSIS
ToDo: Describe
.DESCRIPTION
ToDo: Describe
#>
$OptionParser = New-Object -TypeName PSObject
# Fields
$OptionParser | Add-Member NoteProperty Options -value @{}
# Methods
$OptionParser | Add-Member ScriptMethod AddOption {
param($Option)
$this.Options.Add($Option.Name, $Option)
}
$OptionParser | Add-Member ScriptMethod Parse {
param([hashtable]$Options)
$CommandLine = @()
foreach($OptionName in $($Options.keys)) {
$Option = $this.Options.Get_Item($OptionName)
if ($Option -eq $null) {
throw "Option '$OptionName' is not allowed"
}
$Option.Value = $Options.Get_Item($OptionName)
$Option.Validate()
$CommandLine = $CommandLine + $Option.ToString()
}
return $CommandLine -join ' '
}
return $OptionParser
}
Export-ModuleMember -Function New-OptionParser
Export-ModuleMember -Function New-Option

View File

@ -0,0 +1,166 @@
Import-Module '.\OptionParser.psm1'
function New-OptionParserInstall {
<#
.SYNOPSIS
Creates an option parser for MS SQL Server 2012 setup "INSTALL" action.
.DESCRIPTION
Use this cmdlet to create an option parser for MS SQL Server 2012 setup "INSTALL" action.
All documented option are supported. See the following link for details:
http://msdn.microsoft.com/en-us/library/ms144259.aspx
#>
$OptionParserInstall = New-OptionParser
$OptionParserInstall.AddOption((New-Option "ACTION" -String -Constraints "INSTALL"))
$OptionParserInstall.AddOption((New-Option "IACCEPTSQLSERVERLICENSETERMS" -Switch))
$OptionParserInstall.AddOption((New-Option "ENU" -Switch))
$OptionParserInstall.AddOption((New-Option "UpdateEnabled" -Switch))
$OptionParserInstall.AddOption((New-Option "UpdateSource" -String))
$OptionParserInstall.AddOption((New-Option "CONFIGURATIONFILE" -String))
$OptionParserInstall.AddOption((New-Option "ERRORREPORTING" -Boolean))
$OptionParserInstall.AddOption((New-Option "FEATURES" -List -Constraints ("SQL","SQLEngine","Replication","FullText","DQ","AS","RS","DQC","IS","MDS","Tools","BC","BOL","BIDS","Conn","SSMS","ADV_SSMS","DREPLAY_CTLR","DREPLAY_CLT","SNAC_SDK","SDK","LocalDB")))
$OptionParserInstall.AddOption((New-Option "ROLE" -String -Constraints ("SPI_AS_ExistingFarm", "SPI_AS_NewFarm", "AllFeatures_WithDefaults")))
$OptionParserInstall.AddOption((New-Option "INDICATEPROGRESS" -Switch))
$OptionParserInstall.AddOption((New-Option "INSTALLSHAREDDIR" -String))
$OptionParserInstall.AddOption((New-Option "INSTALLSHAREDWOWDIR" -String))
$OptionParserInstall.AddOption((New-Option "INSTANCEDIR" -String))
$OptionParserInstall.AddOption((New-Option "INSTANCEID" -String))
$OptionParserInstall.AddOption((New-Option "INSTANCENAME" -String))
$OptionParserInstall.AddOption((New-Option "PID" -String))
$OptionParserInstall.AddOption((New-Option "Q" -Switch))
$OptionParserInstall.AddOption((New-Option "QS" -Switch))
$OptionParserInstall.AddOption((New-Option "UIMODE" -String -Constraints ("Normal", "AutoAdvance")))
$OptionParserInstall.AddOption((New-Option "SQMREPORTING" -Boolean))
$OptionParserInstall.AddOption((New-Option "HIDECONSOLE" -Switch))
$OptionParserInstall.AddOption((New-Option "AGTSVCACCOUNT" -String))
$OptionParserInstall.AddOption((New-Option "AGTSVCPASSWORD" -String))
$OptionParserInstall.AddOption((New-Option "AGTSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParserInstall.AddOption((New-Option "ASBACKUPDIR" -String))
$OptionParserInstall.AddOption((New-Option "ASCOLLATION" -String))
$OptionParserInstall.AddOption((New-Option "ASCONFIGDIR" -String))
$OptionParserInstall.AddOption((New-Option "ASDATADIR" -String))
$OptionParserInstall.AddOption((New-Option "ASLOGDIR" -String))
$OptionParserInstall.AddOption((New-Option "ASSERVERMODE" -String -Constraints ("MULTIDIMENSIONAL", "POWERPIVOT", "TABULAR")))
$OptionParserInstall.AddOption((New-Option "ASSVCACCOUNT" -String))
$OptionParserInstall.AddOption((New-Option "ASSVCPASSWORD" -String))
$OptionParserInstall.AddOption((New-Option "ASSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParserInstall.AddOption((New-Option "ASSYSADMINACCOUNTS" -String))
$OptionParserInstall.AddOption((New-Option "ASTEMPDIR" -String))
$OptionParserInstall.AddOption((New-Option "ASPROVIDERMSOLAP" -Boolean))
$OptionParserInstall.AddOption((New-Option "FARMACCOUNT" -String))
$OptionParserInstall.AddOption((New-Option "FARMPASSWORD" -String))
$OptionParserInstall.AddOption((New-Option "PASSPHRASE" -String))
$OptionParserInstall.AddOption((New-Option "FARMADMINIPORT" -String))
$OptionParserInstall.AddOption((New-Option "BROWSERSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParserInstall.AddOption((New-Option "ENABLERANU" -Switch))
$OptionParserInstall.AddOption((New-Option "INSTALLSQLDATADIR" -String))
$OptionParserInstall.AddOption((New-Option "SAPWD" -String))
$OptionParserInstall.AddOption((New-Option "SECURITYMODE" -String -Constrainrs ("SQL")))
$OptionParserInstall.AddOption((New-Option "SQLBACKUPDIR" -String))
$OptionParserInstall.AddOption((New-Option "SQLCOLLATION" -String))
$OptionParserInstall.AddOption((New-Option "ADDCURRENTUSERASSQLADMIN" -Switch))
$OptionParserInstall.AddOption((New-Option "SQLSVCACCOUNT" -String))
$OptionParserInstall.AddOption((New-Option "SQLSVCPASSWORD" -String))
$OptionParserInstall.AddOption((New-Option "SQLSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParserInstall.AddOption((New-Option "SQLSYSADMINACCOUNTS" -Switch))
$OptionParserInstall.AddOption((New-Option "SQLTEMPDBDIR" -String))
$OptionParserInstall.AddOption((New-Option "SQLTEMPDBLOGDIR" -String))
$OptionParserInstall.AddOption((New-Option "SQLUSERDBDIR" -String))
$OptionParserInstall.AddOption((New-Option "SQLUSERDBLOGDIR" -String))
$OptionParserInstall.AddOption((New-Option "FILESTREAMLEVEL" -String -Constraints ("0", "1", "2", "3")))
$OptionParserInstall.AddOption((New-Option "FILESTREAMSHARENAME" -String))
$OptionParserInstall.AddOption((New-Option "FTSVCACCOUNT" -String))
$OptionParserInstall.AddOption((New-Option "FTSVCPASSWORD" -String))
$OptionParserInstall.AddOption((New-Option "ISSVCACCOUNT" -String))
$OptionParserInstall.AddOption((New-Option "ISSVCPASSWORD" -String))
$OptionParserInstall.AddOption((New-Option "ISSVCStartupType" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParserInstall.AddOption((New-Option "NPENABLED" -Boolean))
$OptionParserInstall.AddOption((New-Option "TCPENABLED" -Boolean))
$OptionParserInstall.AddOption((New-Option "RSINSTALLMODE" -String -Constraints ("SharePointFilesOnlyMode", "DefaultNativeMode", "FilesOnlyMode")))
$OptionParserInstall.AddOption((New-Option "RSSVCACCOUNT" -String))
$OptionParserInstall.AddOption((New-Option "RSSVCPASSWORD" -String))
$OptionParserInstall.AddOption((New-Option "RSSVCStartupType" -String -Constraints ("Manual", "Automatic", "Disabled")))
return $OptionParserInstall
}
function New-OptionParserPrepareImage {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserCompleteImage {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserUpgrade {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserEditionUpgrade {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserRepair {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserRebuilddatabase {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserUninstall {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserInstallFailoverCluster {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserPrepareFailoverCluster {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserCompleteFailoverCluster {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserUpgrade {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserAddNode {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserRemoveNode {
# ToDo: Implement
throw "Not yet implemented"
}
Export-ModuleMember -Function New-OptionParserInstall
Export-ModuleMember -Function New-OptionParserPrepareImage
Export-ModuleMember -Function New-OptionParserCompleteImage
Export-ModuleMember -Function New-OptionParserUpgrade
Export-ModuleMember -Function New-OptionParserEditionUpgrade
Export-ModuleMember -Function New-OptionParserRepair
Export-ModuleMember -Function New-OptionParserRebuilddatabase
Export-ModuleMember -Function New-OptionParserUninstall
Export-ModuleMember -Function New-OptionParserInstallFailoverCluster
Export-ModuleMember -Function New-OptionParserPrepareFailoverCluster
Export-ModuleMember -Function New-OptionParserCompleteFailoverCluster
Export-ModuleMember -Function New-OptionParserUpgrade
Export-ModuleMember -Function New-OptionParserAddNode
Export-ModuleMember -Function New-OptionParserRemoveNode