-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathSet_Extended_Events_Sessions_to_AutoStart.ps1
97 lines (84 loc) · 3 KB
/
Set_Extended_Events_Sessions_to_AutoStart.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<#
.Synopsis
Connects to the servers in the DBA Database and for Servers above 2012 sets alwayson_health Extended Events Sessions to Auto-Start and starts it if it is not running
.DESCRIPTION
Sets Extended Events Sessions to Auto-Start and starts it if it is not running
.EXAMPLE
Alter the XEvent name and DBADatabase name or add own server list and run
.NOTES
Author: Rob Sewell
Original Link: https://sqldbawithabeard.com/2016/03/28/using-powershell-to-set-extended-events-sessions-to-autostart/#comments
Created Date: 2016-03-20
#>
$DBADatabaseServer
$XEName = 'AlwaysOn_health'
## Query to gather the servers required
$Query = @"
SELECT
IL.ServerName
FROM [dbo].[InstanceList] IL
WHERE NotContactable = 0
AND Inactive = 0
"@
Try
{
$Results = (Invoke-Sqlcmd -ServerInstance $DBADatabaseServer -Database DBADatabase -Query $query -ErrorAction Stop).ServerName
}
catch
{
Write-Error "Unable to Connect to the DBADatabase - Please Check"
}
foreach($Server in $Results)
{
try
{
$srv = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $Server
}
catch
{
Write-Output " Failed to connect to $Server"
continue
}
# To ensure we have a connection to the server
if (!( $srv.version)){
Write-Output " Failed to Connect to $Server"
continue
}
if($srv.versionmajor -ge '11')
{
## NOTE this checks if there are Availability Groups - you may need to change this
if ($srv.AvailabilityGroups.Name)
{
$AGNames = $srv.AvailabilityGroups.Name
## Can we connect to the XEStore?
if(Test-Path SQLSERVER:\XEvent\$Server)
{
$XEStore = get-childitem -path SQLSERVER:\XEvent\$Server -ErrorAction SilentlyContinue | where {$_.DisplayName -ieq 'default'}
$AutoStart = $XEStore.Sessions[$XEName].AutoStart
$Running = $XEStore.Sessions[$XEName].IsRunning
Write-Output "$server for $AGNames --- $XEName -- $AutoStart -- $Running"
if($AutoStart -eq $false)
{
$XEStore.Sessions[$XEName].AutoStart = $true
$XEStore.Sessions[$XEName].Alter()
}
if($Running -eq $false)
{
$XEStore.Sessions[$XEName].Start()
}
}
else
{
Write-Output "Failed to connect to XEvent on $Server"
}
}
else
{
## Write-Output "No AGs on $Server"
}
}
else
{
## Write-Output "$server not 2012 or above"
}
}