Pendahuluan
PowerShell menyediakan shell command-line dan scripting language (dibangun pada NET Framework) didesain khusus untuk administration task automation dan configuration management. PowerShell termasuk perintah (disebut cmdlets) untuk mengelola SQL Server bersamaan dengan memiliki cmdlets untuk mengelola produk server Microsoft lainnya. Hal ini memberikan administrator bahasa scripting umum pada platform server.
PowerShell menyediakan lebih banyak kemampuan dari sekedar pemberian SQL Server, tidak mungkin untuk menjelaskan semuanya dalam satu artikel. Artikel ini akan berbicara tentang bagaimana caranya, dengan bantuan PowerShell, Anda dapat mengelola Windows service yang berhubungan dengan SQL Server baik pada mesin lokal atau mesin remote.
Mengidentifikasi SQL Server Service
Get-Service PowerShell cmdlet yang mengambil daftar layanan Windows baik dari mesin lokal atau dari mesin remote.
Pastikan PowerShell command prompt atau tools PowerShell ISE dijalankan dengan izin Administrator untuk melaksanakan cmdlet ini untuk mengakses Windows service dan mengelolanya. Juga Anda harus menjadi administrator pada mesin target untuk mengelola layanan Windows.
1 2 3 4 5 6 |
# Returns all windows services on local machine Get-service # Returns all windows services on "MySQLBox" remote machine Get-service -computername MySQLBox # Returns all windows services on local machine which are in running state Get-service | where-object {$_.Status -eq "Running"} |
Anda dapat menerapkan filter dengan Get-Service cmdlets untuk mengambil hanya layanan yang mengandung beberapa kata-kata tertentu dalam namanya. Misalnya, script di bawah ini menghasilkan daftar layanan Windows dari mesin lokal, yang mengandung “SQL” dalam namanya (semua layanan yang terkait dengan SQL Server).
1 2 3 4 |
# Returns all windows services on local machine which contains SQL word in its display name Get-service *SQL* # Returns all windows services on local machine which contains SQL word in its display name and which are in running state Get-service *SQL* | Where-Object {$_.status -eq "Running"} |
Memulai dan Menghentikan SQL Server Service
Anda dapat menggunakan Start-Service PowerShell cmdlets untuk memulai Windows service pada komputer lokal atau remote. Dengan script ini Anda dapat mulai layanan SQL Server terkait.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# Start SQL Server Database engine service (default instance) Start-Service -Name 'MSSQLSERVER' # Start SQL Server Database engine service (named instance CONTOSO) Start-Service -Name 'MSSQL$CONTOSO' # Start SQL Server Integration Services on SQL Server 2012 box Start-Service -Name 'MsDtsServer110' # Start SQL Server Integration Services on SQL Server 2008 and 2008 R2 box Start-Service -Name 'MsDtsServer100' # Start SQL Server Analysis services engine service (default instance) Start-Service -Name 'MSSQLServerOLAPService' # Start SQL Server Analysis services engine service (named instance CONTOSO) Start-Service -Name 'MSOLAP$CONTOSO' # Start SQL Server Reporting Server service (default instance) Start-Service -Name 'ReportServer' # Start SQL Server Reporting Server service (named instance CONTOSO) Start-Service -Name 'ReportServer$CONTOSO' # Start SQL Server SQL Server Agent service (default instance) Start-Service -Name 'SQLSERVERAGENT' # Start SQL Server SQL Server Agent service (named instance CONTOSO) Start-Service -Name 'SQLAgent$CONTOSO' |
Demikian juga, Anda dapat menggunakan Stop-service PowerShell cmdlets untuk menghentikan layanan Windows yang berjalan pada komputer lokal atau remote.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# Stop SQL Server Database engine service (default instance) Stop-Service -Name 'MSSQLSERVER' # Stop SQL Server Database engine service (named instance CONTOSO) Stop-Service -Name 'MSSQL$CONTOSO' # Stop SQL Server Integration Services on SQL Server 2012 box Stop-Service -Name 'MsDtsServer110' # Stop SQL Server Integration Services on SQL Server 2008 and 2008 R2 box Stop-Service -Name 'MsDtsServer100' # Stop SQL Server Analysis services engine service (default instance) Stop-Service -Name 'MSSQLServerOLAPService' # Stop SQL Server Analysis services engine service (named instance CONTOSO) Stop-Service -Name 'MSOLAP$CONTOSO' # Stop SQL Server Reporting Server service (default instance) Stop-Service -Name 'ReportServer' # Stop SQL Server Reporting Server service (named instance CONTOSO) Stop-Service -Name 'ReportServer$CONTOSO' # Stop SQL Server SQL Server Agent service (default instance) Stop-Service -Name 'SQLSERVERAGENT' # Stop SQL Server SQL Server Agent service (named instance CONTOSO) Stop-Service -Name 'SQLAgent$CONTOSO’ |
Stop-Service cmdlets mungkin gagal jika Anda mencoba untuk menghentikan layanan yang bergantung pada layanan lain. Sebagai contoh, layananSQL Server agent tergantung pada layanan SQL Server mesin database dan karenanya jika Anda mencoba menghentikan layanan SQL Server database engine tanpa terlebih dahulu berhenti perintah layanan SQL Server Agent akan gagal. Dalam hal ini, baik Anda harus terlebih dahulu menghentikan layanan SQL Server agen kemudian menghentikan layanan SQL Server mesin database atau yang lain menggunakan parameter force tegas untuk menghentikan semua layanan yang saling bergantung.
1 2 3 4 |
# Stop SQL Server Database engine service (default instance) along with dependent service Stop-Service -Name 'MSSQLSERVER' -Force # Stop SQL Server Database engine service (named instance CONTOSO) along with dependent service Stop-Service -Name 'MSSQL$CONTOSO' -Force |
Harap dicatat, berdasarkan jenis instalasi SQL Server (default atau bernama) nama layanan mungkin berbeda dan karenanya Anda perlu memberikan nama layanan yang tepat ketika memulai atau menghentikan nama layanan. Misalnya, dengan instalasi default nama layanan untuk mesin database SQL Server adalah MSSQLSERVER tetapi misalkan Anda memiliki contoh bernama disebut Contoso nama layanan akan menjadi MSSQL Contoso..
Mengelola SQL Server Services Remote Machine
Sebagai administrator Anda mungkin bertanggung jawab untuk menjaga beberapa mesin SQL Server. Sekarang perhatikan sebuah skenario di mana Anda diminta untuk mengubah account pengguna domain untuk SQL Server layanan terkait pada semua mesin ini atau jika Anda ingin memperbarui domain akun atau password untuk semua layanan ini (pada lokal atau pada remote ). Apakah Anda benar-benar perlu log on ke setiap mesin dan melakukan perubahan? Tidak persis, dengan bantuan PowerShell scripting Anda tidak hanya dapat memulai dan menghentikan layanan tetapi juga dapat mengubah properti lain seperti pengguna akun log-on atau password, ketik startup, dll
Dengan script di bawah ini saya terlebih dahulu menciptakan sebuah sesi remote dengan mesin MySQLBox dan kemudian mengeksekusi perintah untuk mengubah log-on nama account pengguna dan password.
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 |
#Create a new remote PowerShell session and pass in the scrip block to be executed $session = New-PSSession -ComputerName MySQLBox -Credential Domain01\User01 $UserName = "" # specify user Name here $Password = "" # specify Password here Invoke-Command -Session $session -ArgumentList $UserName, $Password -Scriptblock { param($UserName, $Password) # Start SQL Server Database engine service (default instance) $Svc = Get-WmiObject win32_service -filter "name='MSSQLSERVER'" $Svc.Change($Null, $Null, $Null, $Null, $Null, $Null, $UserName, $Password) Stop-Service -Name 'MSSQLSERVER' -Force Start-Service 'MSSQLSERVER' # Start SQL Server Integration Services on SQL Server 2012 box $Svc = Get-WmiObject win32_service -filter "name='MsDtsServer110'" $Svc.Change($Null, $Null, $Null, $Null, $Null, $Null, $UserName, $Password) Stop-Service -Name 'MsDtsServer110' -Force Start-Service 'MsDtsServer110' # Start SQL Server Analysis services engine service (default instance) $Svc = Get-WmiObject win32_service -filter "name='MSSQLServerOLAPService'" $Svc.Change($Null, $Null, $Null, $Null, $Null, $Null, $UserName, $Password) Stop-Service -Name 'MSSQLServerOLAPService' -Force Start-Service 'MSSQLServerOLAPService' # Start SQL Server Reporting Server service (default instance) $Svc = Get-WmiObject win32_service -filter "name='ReportServer'" $Svc.Change($Null, $Null, $Null, $Null, $Null, $Null, $UserName, $Password) Stop-Service -Name 'ReportServer' -Force Start-Service 'ReportServer' # Start SQL Server SQL Server Agent service (default instance) $Svc = Get-WmiObject win32_service -filter "name='SQLSERVERAGENT'" $Svc.Change($Null, $Null, $Null, $Null, $Null, $Null, $UserName, $Password) Stop-Service -Name 'SQLSERVERAGENT' -Force Start-Service 'SQLSERVERAGENT' } |
Setelah mengubah nama account pengguna log-on dan password Anda harus berhenti dan memulai atau restart layanan agar untuk dapat melihat perubahannya
Kesimpulan
PowerShell menyediakan shell baris perintah dan scripting language (dibangun pada NET Framework) didesain khusus untuk otomatisasi tugas administrasi dan manajemen konfigurasi. Pada artikel ini, saya menunjukkan bagaimana, dengan bantuan PowerShell, Anda dapat mengelola layanan Windows yang berhubungan dengan SQL Server baik pada mesin lokal atau mesin remote.