[KEERO-96] Implemented skeleton of MSSQL server setup command line parser
This commit is contained in:
parent
80fce6f232
commit
465c20cf63
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue