Question Installation SQL Server 2008R2

Plus d'informations
il y a 11 ans 11 mois #11495 par SiSMik
Bonjour,

J'ai développé ce script pour le boulot. Pour l'utiliser chez vous il devrait fonctionner tel quel, il faudra juste ajouter sc.exe, ntrights.exe et un fichier de réponse SQL Server (config.ini)

Chez nous le script est lancé via Bladelogic, et tout s'installe correctement.

[code:1]
param([string]$AdminPassword,[string]$UserAccount,[string]$UserPassword,[string]$DBName)

#############################
# #
# Main variables definition #
# #
#############################

$logfile = \"C:\log\install.log\" # Log file
$hostname = hostname
if ($hostname.length -gt 15)
{
$computer = $hostname
} else {
$computer = $env:computername
}

# Directories

$sourcesdir = \"C:\Temp\SQL\STD\sources\\" # This is the directory where SQL Server install binaries are stored
$scriptdir = \"C:\Temp\SQL\STD\scripts\\" # This is the directory where the script Powsershell, sc.exe & ntrights.exe are located.
$data_disk = \"D:\\"

# SQL Instance

$instanceName = \"MSSQLSERVER\" # The name you want the instance have

# The password for services account

$SVC_Pwd = \"<set_your_password_here>\"

# HKLM path where TCP/IP port is stored

$HKML_IPall = \"HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp\IPAll\"

# SQL Requests

$QueryMaxMemory = \"EXEC sp_configure 'show advanced options', '1'
RECONFIGURE WITH OVERRIDE

EXEC sp_configure 'min server memory', '0'
EXEC sp_configure 'max server memory', ' + CAST(@Memory AS nvarchar) + '
RECONFIGURE WITH OVERRIDE

EXEC sp_configure 'show advanced options', '0'
RECONFIGURE WITH OVERRIDE\"
$QueryMaxMeroySetted = \"select value FROM sys.configurations where Name = 'max server memory (MB«»)'\"
$TempDBadd = \"USE [master]
GO
DECLARE @cpu_count int,
@file_count int,
@logical_name sysname,
@file_name nvarchar(520),
@physical_name nvarchar(520),
@size int,
@max_size int,
@growth int,
@alter_command nvarchar(max)

SELECT @physical_name = physical_name,
@size = size / 128,
@max_size = max_size / 128,
@growth = growth / 128
FROM tempdb.sys.database_files
WHERE name = 'tempdev'

SELECT @file_count = COUNT(*)
FROM tempdb.sys.database_files
WHERE type_desc = 'ROWS'

SELECT @cpu_count = cpu_count
FROM sys.dm_os_sys_info

WHILE @file_count < @cpu_count -- Add * 0.25 here to add 1 file for every 4 cpus, * .5 for every 2 etc.
BEGIN
SELECT @logical_name = 'tempdev' + CAST(@file_count AS nvarchar)
SELECT @file_name = REPLACE(@physical_name, 'tempdb.mdf', @logical_name + '.ndf')
SELECT @alter_command = 'ALTER DATABASE [tempdb] ADD FILE ( NAME =N''' + @logical_name + ''', FILENAME =N''' + @file_name + ''', SIZE = ' + CAST(@size AS nvarchar) + 'MB, MAXSIZE = ' + CAST(@max_size AS nvarchar) + 'MB, FILEGROWTH = ' + CAST(@growth AS nvarchar) + 'MB )'
PRINT @alter_command
EXEC sp_executesql @alter_command
SELECT @file_count = @file_count + 1
END\"

$TempDBmodify = \"ALTER DATABASE tempdb MODIFY FILE ( NAME = N'tempdev', SIZE = 256MB, MAXSIZE = 512MB, FILEGROWTH = 64MB )\"
$TempLogDBmodify = \"ALTER DATABASE tempdb MODIFY FILE ( NAME = N'templog', SIZE = 256MB, MAXSIZE = 512MB, FILEGROWTH = 64MB )\"
$SelectTempDB = \"SELECT max_size FROM tempdb.sys.database_files WHERE name = 'tempdev'\"
$SelectTempLogDB = \"SELECT max_size FROM tempdb.sys.database_files WHERE name = 'templog'\"
$CountTempDBFiles = \"SELECT COUNT(*) as numcpu FROM tempdb.sys.database_files where type_desc = 'ROWS'\"
$CpuCount = \"SELECT cpu_count FROM sys.dm_os_sys_info\"

#############################
# #
# Main functions definition #
# #
#############################

# This function write on the ouput is $silent is not activated
# Three level of log are recorded, INFO, ERROR, WARNING.

Function Write-Log {
param([int] $level=0,
[string] $message=$null)

$timestamp = Get-Date -format \"yyyyMMdd_HH:mm:«»ss\"

switch($level) {
0 {Write-Output \"$timestamp : INFO : $message\" }
1 {Write-Output \"$timestamp : WARNING : $message\" }
2 {Write-Output \"$timestamp : ERROR : $message\" }
}
}


# This function Write an error on Host.

function GetError {
param ([string]$text = $null,
[int]$ExitNb = $null)

Write-Host \"$text FAILED: ERROR $ExitNb\"
Exit $ExitNb

}

# This function inform on the ouput

Function Create-LogInfo {

param([string] $Libelle =$null,
[string] $Status =$null)

$currentDate = date -Format \"dd/MM/yyyy - HH:mm:«»ss - \"

if ($libelle.length -lt \"7\"«»)
{
\"$currentDate $Libelle\" + \"`t`t: $Status\" >> $logfile
}
else
{
\"$currentDate $Libelle\" + \"`t: $Status\" >> $logfile
}
if ($error) {
$error >> $logfile
$error.clear()
}
}

# This function create an array for paths

function Add-Path {
param([string]$Path,[string]$label)
$d = New-Object PSObject
$d | Add-Member -Name Path -MemberType NoteProperty -Value $Path
$d | Add-Member -Name Label -MemberType NoteProperty -Value $label
return $d
}

# This function create an array for Rights

function Add-Rights {
param([string]$wmi,[string]$name)
$d = New-Object PSObject
$d | Add-Member -Name wmi -MemberType NoteProperty -Value $wmi
$d | Add-Member -Name name -MemberType NoteProperty -Value $name
return $d
}

# This function create an array for account

function Add-Account {
param([string]$account,[string]$label,[string]$desc)
$d = New-Object PSObject
$d | Add-Member -Name account -MemberType NoteProperty -Value $account
$d | Add-Member -Name desc -MemberType NoteProperty -Value $desc
return $d
}

# function create an array for Services

function Add-Service {
param([string]$name,[string]$shortname,[string]$desc,[string]$startup)
$d = New-Object PSObject
$d | Add-Member -Name name -MemberType NoteProperty -Value $name
$d | Add-Member -Name shortname -MemberType NoteProperty -Value $shortname
$d | Add-Member -Name desc -MemberType NoteProperty -Value $desc
$d | Add-Member -Name startup -MemberType NoteProperty -Value $startup
return $d
}

# Create User function

Function Create-LocalUser {
param([string]$user,[string]$password,[string]$desc)
$objOu = [ADSI]\"WinNT://localhost\"
$objUser = $objOU.Create(\"User\", $user)
$objUser.setpassword($password)
$objUser.SetInfo()
$objUser.description = \"$desc\"
$objUser.SetInfo()
}

# Account array

$listofaccounts = @()
$listofaccounts += Add-Account -account \"svc_sqls_fcp\" -label \"\" -desc \"Service account for SQL Server\"
$listofaccounts += Add-Account -account \"svc_sqla_fcp\" -label \"\" -desc \"Service account for SQL Server Agent\"
$listofaccounts += Add-Account -account \"svc_sqlb_fcp\" -label \"\" -desc \"Service account for SQL Server Browser\"
$listofaccounts += Add-Account -account \"svc_sqli_fcp\" -label \"\" -desc \"Service account for SQL Server Integration service\"
$listofaccounts += Add-Account -account \"svc_sqlas_fcp\" -label \"\" -desc \"Service account for SQL Server Analysis service\"
$listofaccounts += Add-Account -account \"svc_sqlrs_fcp\" -label \"\" -desc \"Service account for SQL Server Reporting Service\"
$listofaccounts += Add-Account -account \"svc_sqlft_fcp\" -label \"\" -desc \"Service account for SQL Server Full Text Search\"

# SQL Paths // Warning if you change Path here do not forget to change them in $CreateDB var.... !!!!!

$ListOfPaths = @()
$ListOfPaths += Add-Path -path \"D:\system_db\" -label \"System Files\"
$ListOfPaths += Add-Path -path \"D:\system_db_x86\" -label \"Shared System Files\"
$ListOfPaths += Add-Path -path \"D:\AS_data\" -label \"Data for Analysis Services\"
$ListOfPaths += Add-Path -path \"D:\AS_log_db\" -label \"Log for Analysis Services\"
$ListOfPaths += Add-Path -path \"D:\backup_db\" -label \"Backup directory\"
$ListOfPaths += Add-Path -path \"D:\AS_temp\" -label \"Temp files for Analysis Services\"
$ListOfPaths += Add-Path -path \"D:\config_db\" -label \"Config Directory\"
$ListOfPaths += Add-Path -path \"D:\user_db\" -label \"Data for SQL Server instance\"
$ListOfPaths += Add-Path -path \"D:\log_db\" -label \"Log for SQL Server instance\"
$ListOfPaths += Add-Path -path \"D:\temp_db\" -label \"Temp database for SQL Server instance\"
$ListOfPaths += Add-Path -path \"D:\temp_log_db\" -label \"Log of TempDB for SQL Server instance\"

# Local policies

$localrights = @()
$localrights += Add-Rights -wmi \"SeTcbPrivilege\" -name \"Act as part of the operating system\"
$localrights += Add-Rights -wmi \"SeIncreaseQuotaPrivilege\" -name \"Adjust memory quotas for a process\"
$localrights += Add-Rights -wmi \"SeCreateTokenPrivilege\" -name \"Create a token object\"
$localrights += Add-Rights -wmi \"SeImpersonatePrivilege\" -name \"Impersonate a client after authentication\"
$localrights += Add-Rights -wmi \"SeBatchLogonRight\" -name \"Log on as a batch job\"
$localrights += Add-Rights -wmi \"SeServiceLogonRight\" -name \"Log on as a service\"
$localrights += Add-Rights -wmi \"SeAssignPrimaryTokenPrivilege\" -name \"Replace a process level token\"
$localrights += Add-Rights -wmi \"SeManageVolumeNamePrivilege\" -name \"Perform volume maintenance tasks\"
$localrights += Add-Rights -wmi \"SeLockMemoryPrivilege\" -name \"Lock pages in memory\"
$localrights += Add-Rights -wmi \"SeChangeNotifyPrivilege\" -name \"Bypass traverse checking\"

# This function set privileges for account services

function Set-SePrivilege {
param ([string]$path=$null)

$setup = ($scriptdir+\"ntrights.exe\"«»)

foreach ($acc in $listofaccounts)
{
[string]$account = $acc.account
[string]$desc = $acc.desc
Create-LogInfo \"Set Privileges for $desc\" \"START\"

foreach ($right in $localrights) {

[string]$wmi = $right.wmi
[string]$desc = $right.name
$i = $setup + \" +r $wmi -u $account\"
Invoke-Expression $i

Create-LogInfo \"Give $desc right for $account\" \"SUCCESS\"

}
if ( $account -match \"svc_sqls_\" ) {

net localgroup Administrators $account /ADD

Create-LogInfo \"Modify ACLs\" \"START\"

$set_Right = cscript ($scriptdir+\"xcacls.vbs\"«») $data_disk /E /G $env:computername\`\"$account`\":F /SPEC B

if ($set_right) {
Create-LogInfo \"Give Full control on $data_disk for $account\" \"SUCCESS\"
$errorcode++
} else {
Create-LogInfo \"Give Full control on $data_disk for $account\"; GetError \"Error Giving Full control on $data_disk for $account\" $errorcode
}
}
}
}

$ServicesList = @()
$ServicesList += Add-Service -name \"SQL Server (MSSQLSERVER)\" -shortname \"MSSQLSERVER\" -desc \"Provides storage, processing and controlled access of data, and rapid transaction processing.\" -startup \"Automatic\"
$ServicesList += Add-Service -name \"SQL Server Agent (MSSQLSERVER)\" -shortname \"SQLSERVERAGENT\" -desc \"Executes jobs, monitors SQL Server, fires alerts, and allows automation of some administrative tasks.\" -startup \"Automatic\"
$ServicesList += Add-Service -name \"SQL Server Browser\" -shortname \"SQLBrowser\" -desc \"Provides SQL Server connection information to client computers.\" -startup \"Automatic\"
$ServicesList += Add-Service -name \"SQL Server Integration Services 10.0\" -shortname \"MsDtsServer100\" -desc \"Provides management support for SSIS package storage and execution.\" -startup \"Automatic\"
$ServicesList += Add-Service -name \"SQL Server Analysis Services (MSSQLSERVER)\" -shortname \"MSSQLServerOLAPService\" -desc \"Supplies online analytical processing (OLAP) and data mining functionality for business intelligence applications.\" -startup \"Automatic\"
$ServicesList += Add-Service -name \"SQL Server Reporting Services (MSSQLSERVER)\" -shortname \"ReportServer\" -desc \"Manages, executes, renders, schedules and delivers reports.\" -startup \"Automatic\"
$ServicesList += Add-Service -name \"SQL Full-text Filter Daemon Launcher (MSSQLSERVER)\" -shortname \"MSSQLFDLauncher\" -desc \"Service to launch full-text filter daemon process which will perform document filtering and word breaking for SQL Server full-text search. Disabling this service will make full-text search features of SQL Server unavailable.\" -startup \"Automatic\"

#########################################
# #
# Do not edit anything after this point #
# #
#########################################

# clean previous Errors

if ($error) { $error.clear() }

$errorcode = 300

# Create log dir
if (!(Test-Path \"C:\log\\"«»)) {
New-Item -path \"C:\log\" -itemType \"Directory\"
}

# Create Directories

Create-LogInfo \"Create Folders\" \"START\"

Foreach ($dir in $ListOfPaths) {
[string]$name = $dir.label
if (New-Item -path $dir.path -itemType \"Directory\" -force) {
Create-LogInfo \"Create Folder for $name\" \"SUCCESS\"
$errorcode++
} else {
Create-LogInfo \"Create Folder for $name\" \"ERROR\"; GetError \"Can't create folder for $name\" $errorcode
}
}


# Add Firewall features and ports

Create-LogInfo \"Configure Firewall\" \"START\"

if ((netsh firewall set opmode enable) -and (netsh firewall add portopening TCP 1433 \"SQLServer($instanceName)\" enable subnet) -and (netsh firewall add portopening UDP 1434 \"SQLBrowser($instanceName)\" enable subnet) -and (netsh firewall set service fileandprint enable)) {
Create-LogInfo \"Configure Firewall\" \"SUCCESS\"
$errorcode++
} else {
Create-LogInfo \"Configure Firewall\" \"ERROR\"; GetError \"Error Configuring Firewall\" $errorcode
}

# Add users

create-LogInfo \"Create accounts\" \"START\"

foreach ($account in $listofaccounts) {
[string]$a = $account.account
[string]$b = $account.desc
if (Create-LocalUser -user $account.account -password $SVC_Pwd -desc $account.desc) {
$errorcode++
Create-LogInfo \"Create $b\" \"SUCCESS\"
$acc = Get-WmiObject Win32_UserAccount -computername \".\" -filter \"LocalAccount=True AND` Name='$a'\"
$acc.PasswordChangeable=$false
$acc.PasswordExpires=$false
if ($acc.put()) {
$errorcode++
Create-LogInfo \"Modify $b\" \"SUCCESS\"
} else {
Create-LogInfo \"Modify $b\" \"ERROR\"; GetError \"Error modify the $b\" $errorcode
}
} else {
Create-LogInfo \"Create $b\" \"ERROR\"; GetError \"The account $b is not created\" $errorcode
}
}


$GetSVC = gwmi Win32_UserAccount -computername \".\" -filter \"LocalAccount=True\" | ?{ $_.name -match \"svc_\" }

if ($GetSVC.length -eq $listofaccounts.count) {
Create-LogInfo \"Create accounts\" \"SUCCESS\"
$errorcode++
} else {
Create-LogInfo \"Create accounts\" \"ERROR\"; GetError \"All accounts not created\" $errorcode
}

# Give correct privileges

Create-LogInfo \"Set Privileges\" \"START\"
if (Set-SePrivilege $scriptdir) {
Create-LogInfo \"Set Privileges\" \"SUCCESS\"
$errorcode++
} else {
Create-LogInfo \"Set Privileges\" \"ERROR\"; GetError \"Error Seting Privileges\" $errorcode
}


###########################
# #
# SQL Server installation #
# #
###########################

Create-LogInfo \"SQL Installation\" \"START\"

$inv = $sourcesdir + \"setup.exe /SAPWD=\" + $AdminPassword + \" /CONFIGURATIONFILE=\" + $scriptdir + \"config.ini\"
invoke-expression $inv

if (ps | ?{$_.name -eq \"sqlservr\"})
{
Create-LogInfo \"Install SQL\" \"SUCCESS\"
$errorcode++
}
else
{
Create-LogInfo \"Install SQL\" \"ERROR\"; GetError \"Install SQL\" $errorcode
}

############################
# #
# SQL Server Configuration #
# #
############################

# Network configuration

Create-LogInfo \"TCP/IP Configuration\" \"START\"

$HKML_IPall = \"HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp\IPAll\"
Set-ItemProperty $HKML_IPall -name \"TcpPort\" -value \"1433\"
Set-ItemProperty $HKML_IPall -name \"TcpDynamicPorts\" -value \"\"

$Get_TcpPort = (Get-ItemProperty $HKML_IPall).TcpPort
$Get_TcpDynamicPorts = (Get-ItemProperty $HKML_IPall).TcpDynamicPorts

if (($Get_TcpPort -eq 1433) -and ($Get_TcpDynamicPorts -eq \"\"«»)) {
Create-LogInfo \"Configuring TCP Port\" \"SUCCESS\"
$errorcode++
} else {
Create-LogInfo \"Configuring TCP Port\" \"ERROR\"; GetError \"Error Configuring TCP Port\" $errorcode
}

# Load SQL CMDLETS

add-pssnapin sqlserverprovidersnapin100
add-pssnapin sqlservercmdletsnapin100

# Configuration of TempDB

Create-LogInfo \"Configure TempDB File\" \"START\"

Invoke-Sqlcmd -Query $TempDBmodify -Serverinstance .

$tempdbmaxsize = Invoke-Sqlcmd -Query $SelectTempDB -Serverinstance .

if ($tempdbmaxsize.max_size -eq 65536)
{
Create-LogInfo \"Configure TempDB File\" \"SUCCESS\"
$errorcode++
} else {
Create-LogInfo \"Configure TempDB File\" \"ERROR\"; GetError \"Error Configure TempDB File\" $errorcode
}

Create-LogInfo \"Configure TempDB Log File\" \"START\"

Invoke-Sqlcmd -Query $TempLogDBmodify -Serverinstance .

$templogdbmaxsize = Invoke-Sqlcmd -Query $SelectTempLogDB -Serverinstance .

if ($templogdbmaxsize.max_size -eq 65536)
{
Create-LogInfo \"Configure TempDB Log File\" \"SUCCESS\"
$errorcode++
} else {
Create-LogInfo \"Configure TempDB Log File\" \"ERROR\"; GetError \"Error Configure TempDB Log File\" $errorcode
}

Create-LogInfo \"Auto-Configure TempDB\" \"START\"

Invoke-Sqlcmd -Query $TempDBadd -Serverinstance .

$NumberTempDBFiles = Invoke-Sqlcmd -Query $CountTempDBFiles -Serverinstance .
$NumberCPU = Invoke-Sqlcmd -Query $CpuCount -Serverinstance .

if ($NumberTempDBFiles.numcpu -eq $NumberCPU.cpu_count)
{
Create-LogInfo \"Auto-Configure TempDB\" \"SUCCESS\"
$errorcode++
} else {
Create-LogInfo \"Auto-Configure TempDB\" \"ERROR\"; GetError \"Error Auto-Configure TempDB\" $errorcode
}

Create-LogInfo \"Post-Configuration\" \"END\"

# Configure accounts for SQL Server Services

Create-LogInfo \"Configure SQL Services\" \"START\"

$i = 0
Foreach ($service in $ServicesList) {
$account = $listofaccounts[$i].account
[string]$servname = $service.shortname
$exec = C:\Temp\SQL\STD\scripts\sc.exe config $servname obj= .\$account password= $SVC_Pwd
$i++
if ($exec -match \"SUCCESS\"«») {
Create-LogInfo \"Configure SQL Service ($servname) \" \"SUCCESS\"
$errorcode++
Stop-Service -name $servname -force
Start-Service -name $servname
$FullService = Get-Service -Name $servname
if ($FullService.Status -eq \"Running\"«»){
Create-LogInfo \"Restart SQL Service ($servname) \" \"SUCCESS\"
$errorcode++
} else {
Create-LogInfo \"Restart SQL Service ($servname)\" \"ERROR\"; GetError \"Error Restart SQL Service ($servname)\" $errorcode
}
} else {
Create-LogInfo \"Configure SQL Service ($servname)\" \"ERROR\"; GetError \"Error Configure SQL Service ($servname)\" $errorcode
}

}

Create-LogInfo \"Configure SQL Services\" \"END\"

exit 0[/code:1]


En espérant qu'il ivous serve.
Je suis évidement preneur de toutes idées d'amélioration.

@+

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 11 mois #11517 par Laurent Dardenne
Salut,
intéressant comme script, j'ai un peu de mal à voir le découpage des traitements, mais je pense que je m'y pencherais peut-être prochainement.
Il manque la version ciblée, à priori sql Server 2008 et la version de PS, à priori la v2.

Pour ceci :
[code:1]
# This function create an array for account
function Add-Account {
param([string]$account,[string]$label,[string]$desc)
$d = New-Object PSObject
$d | Add-Member -Name account -MemberType NoteProperty -Value $account
$d | Add-Member -Name desc -MemberType NoteProperty -Value $desc
return $d
}
[/code:1]
Le commentaire est faux, cette fonction crée un objet personnalisé.
Et le nom de la fonction également, l'ajout c'est toi qui l'opére dans ton code :
[code:1]
function New-SqlServerAccount {
param([string]$account,[string]$label,[string]$desc)
$d = New-Object PSObject
$d.PsObject.TypeNames[0] = \"PSSqlServerAccount\"
$d |
Add-Member -Name account -MemberType NoteProperty -Value $account -pass|
Add-Member -Name desc -MemberType NoteProperty -Value $desc -pass
}
[/code:1]
De \"typer\" l'objet personnalisé est, je pense, une bonne habitude à prendre. Et de les préfixer avec PS permet de les retrouver + facilement.
Enfin, d'utiliser, sur Add-Member, le paramètre Passthru est un gain sur la saisie.

Quant à la création du tableau :
[code:1]
$listofaccounts = @()
$listofaccounts += Add-Account -account \"svc_sqls_fcp\" -label \"\" -desc \"Service account for SQL Server\"
...
[/code:1]
On peut simplifier :
[code:1]
$Accounts = @(
New-SqlServerAccount -account \"svc_sqls_fcp\" -desc \"Service account for SQL Server\";
New-SqlServerAccount -account \"svc_sqla_fcp\" -desc \"Service account for SQL Server Agent\";
New-SqlServerAccount -account \"svc_sqlb_fcp\" -desc \"Service account for SQL Server Browser\";
New-SqlServerAccount -account \"svc_sqli_fcp\" -desc \"Service account for SQL Server Integration service\";
New-SqlServerAccount -account \"svc_sqlas_fcp\" -desc \"Service account for SQL Server Analysis service\";
New-SqlServerAccount -account \"svc_sqlrs_fcp\" -desc \"Service account for SQL Server Reporting Service\";
New-SqlServerAccount -account \"svc_sqlft_fcp\" -desc \"Service account for SQL Server Full Text Search\"
)
[/code:1]
D'utiliser comme convention le pluriel, évite de préciser list,tab,col, etc.
Par défaut les paramètres de type String sont initialisés avec une chaîne vide, donc -label \"\" est pour moi redondant, sous réserve de connaître ce comportement.
Et au lieu de \"\", utilisez [String]::Empty, cela fait plus de saisie, mais moins de risque de placer un espace entre deux guillemets.
A 9h du matin on peut retrouver facilement ce type d'erreur, à 17h déjà moins.

Une dernière, une partie de la description peut être portée par le type et/ou construite dans la fonction :
[code:1]
function New-SqlServerServiceAccount {
param([string]$account,[string]$label,[string]$desc)
$d = New-Object PSObject
$d.PsObject.TypeNames[0] = \"PSSqlServerServiceAccount\"
$d |
Add-Member -Name account -MemberType NoteProperty -Value $account -pass|
Add-Member -Name desc -MemberType NoteProperty -Value \"Service account $desc\" -pass
}

$Accounts = @(
New-SqlServerServiceAccount -account \"svc_sqls_fcp\" -desc \"SQL Server\";
New-SqlServerServiceAccount -account \"svc_sqla_fcp\" -desc \"SQL Server Agent\";
New-SqlServerServiceAccount -account \"svc_sqlb_fcp\" -desc \"SQL Server Browser\";
New-SqlServerServiceAccount -account \"svc_sqli_fcp\" -desc \"SQL Server Integration service\";
New-SqlServerServiceAccount -account \"svc_sqlas_fcp\" -desc \"SQL Server Analysis service\";
New-SqlServerServiceAccount -account \"svc_sqlrs_fcp\" -desc \"SQL Server Reporting Service\";
New-SqlServerServiceAccount -account \"svc_sqlft_fcp\" -desc \"SQL Server Full Text Search\"
)
[/code:1]
Comme ton code fait plus de 500 lignes, je vais m'arrêter là.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 11 mois #11519 par SiSMik
Réponse de SiSMik sur le sujet Re:Installation SQL Server 2008R2
Merci,

Effectivement, ce script fonctionne uniquement sur Windows 2008 (SP2/R2) avec PS2.

Etant novice, je vais me servir de tes commentaires c'est très pertinent. L'utilisation d'objets personnalisés a été \"forcé\" de par le fait que je devais pouvoir rajouter des \"modules\" de SQL Server de manière simple c'est à dire en rajoutant une entrée dans des tableaux.

Petite précision: ce script qui effectue du tunning de SQL de manière automatique au niveau des tempdb et de la maxmemory.

Les fonctions qui permettent la création des logs ne sont pas du tout optimisées non plus. Mais tes commentaires m'ont donné l'envie de faire une V2 prochainement.

Merci
PS: je me suis permis de vous tutoyer :)<br><br>Message édité par: benduru, à: 13/04/12 20:47

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 11 mois #11521 par Laurent Dardenne
benduru écrit:

je me suis permis de vous tutoyer :)

Tu peux, sur les forums je tutoie tout le monde.

Pour les logs tu peux utilser Log4Net qui offre beaucoup plus de possibilités, j'étudie ETW, natif au dernières version de windows 7 et &gt;, mais pour le moment je rame pour créer un journal dédié.

Une autre remarque, le script actuel est liè à ton infra au niveau des chemins, il serait bien de les paramètrer. Si tu pars sur une v2 utilise un module, ce qui te permettrait de construire des scénarios de setup de machine plus facilement.
Enfin si tu veux un coup de main sur la V2 n'hésite pas.

En passant, le blog de Chad miller est incontournable si on s'intéresse à PS et SqlServer, surtout son projet SqlPSx .

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 11 mois #11526 par SiSMik
Réponse de SiSMik sur le sujet Re:Installation SQL Server 2008R2
Salut,

Dans la v2 je pense que je vais surtout m'attarder sur l'installation même de SQL Server, car actuellement la seule erreur que je remonte est si l'installation s'est déroulée correctement (ou pas) et pour le L1/L2 c'est pas suffisant pour investiguer rapidement.

Je vais revoir mes création de tableau avec les objets personnalisés grâce à toi.

Je reviendrais poster ici les avancées

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 11 mois #11527 par Laurent Dardenne
benduru écrit:

Je reviendrais poster ici les avancées

Merci.
De mon côté, et dans un premier temps, je recherche une installation automatique du produit que j'aimerais couplé à une génération de base réalisé sour PowerAMC.
A ton avis ce script peut-il être utilisé avec une version 2008 R2 express ?<br><br>Message édité par: Laurent Dardenne, à: 1/09/12 15:02

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.140 secondes
Propulsé par Kunena