用于启用服务器级别和数据库触发器的Power Shell脚本

问题描述 投票:0回答:1

为多台服务器启用所有服务器级别和数据库级别触发器的最佳方法是什么?谢谢

sql sql-server powershell triggers database-trigger
1个回答
1
投票

使用Powershell SQLSERVER模块:

-运行以下命令以安装sqlserver电源外壳模块

# install-module sqlserver
Import-Module sqlserver

# getting the servers list
$servers = Get-Content C:\sql\servers.txt

Foreach($server in $servers)
{

 cd sqlserver:/sql/$server

 # checking if a server has more than one instance
 IF ((dir).count -gt 1)
  {

 cd sqlserver:\sql\$server

 dir | %{ $instname = $_.displayname

            "***************************************$server $instname*************************************************"
            "Enabling Server Level Triggers on: $server\$instname"

            cd sqlserver:\sql\$server\$instname\triggers

            dir | %{$_.refresh()}

            # enabling server level triggers
            dir | ?{$_.isenabled -eq $false} | %{$_.isenabled = $true ; $_.alter() ; $_.refresh()}


            cd sqlserver:\sql\$server\$instname\databases

            # looping through the databases on each instance and enabling the triggers
            dir | %{ $DB = $_.name
                      cd sqlserver:\sql\$server\$instname\databases\$DB\Triggers

                      "Enabling Triggers on: $DB"
                      dir | %{$_.refresh()}
                      #$server

                      dir | ?{$_.isenabled -eq $false} | %{$_.isenabled = $true ; $_.alter() ; $_.refresh()}
                    }

         }
  }
  else # for servers with default instance 
  {
     cd sqlserver:\sql\$server\default

     cd sqlserver:\sql\$server\default\triggers
            "***************************************$server*************************************************"
            "Enabling Server Level Triggers on: $server\Default"

            dir | %{$_.refresh()}

            # enabling server level triggers
            dir | ?{$_.isenabled -eq $false} | %{$_.isenabled = $true ; $_.alter() ; $_.refresh()}


            cd sqlserver:\sql\$server\default\databases
            # looping through the databases on each instance and enabling the triggers
            dir | %{ $DB = $_.name
                      cd sqlserver:\sql\$server\default\databases\$DB\Triggers

                      "Enabling Triggers on: $DB"
                      dir | %{$_.refresh()}
                      #$server

                      dir | ?{$_.isenabled -eq $false} | %{$_.isenabled = $true ; $_.alter() ; $_.refresh()}
                    }


   }
}

Write-Host "Done....."

cd c:\

Start-Sleep -s 10
© www.soinside.com 2019 - 2024. All rights reserved.