Usando o cmdlet Invoke-PolicyEvaluation
O Invoke-PolicyEvaluation é um cmdlet PowerShell do Shell de Comandos Windows SQL Server que relata se um conjunto de destino de objetos SQL Server é compatível ou não com as condições especificadas em uma ou mais diretivas de Gerenciamento Baseado em Diretivas.
Usando Invoke-PolicyEvaluation
O Invoke-PolicyEvaluation avalia uma ou mais diretivas em relação a um conjunto de objetos SQL Server, chamado conjunto de destino. O conjunto de objetos de destino origina-se de um servidor de destino. Cada diretiva define condições, as quais são os estados permitidos para os objetos de destino. Por exemplo, a diretiva Banco de Dados Confiável declara que a propriedade TRUSTWORTHY do banco de dados deve ser definida como DESATIVADA.
O parâmetro -AdHocPolicyEvaluationMode especifica as ações tomadas:
Verificar
Relate o status de conformidade dos objetos de destino que usam os credenciais do seu logon atual. Não reconfigure nenhum objeto. Essa é a configuração padrão.CheckSqlScriptAsProxy
Relate o status de conformidade dos objetos de destino que usam os credenciais do logon de proxy ##MS_PolicyTSQLExecutionLogin ##. Não reconfigure nenhum objeto.Configurar
Relate o status de conformidade dos objetos de destino que usam os credenciais do seu logon atual. Reconfigure qualquer opção definível e determinística que não estejam em conformidade com as diretivas.
Especificando diretivas
A forma como você especifica uma diretiva depende de onde a diretiva está armazenada. As diretivas podem ser armazenadas em dois formatos:
Elas podem ser objetos armazenados em um armazenamento de diretiva, como, por exemplo, uma instância do Mecanismo do Banco de Dados. Você pode usar a pasta SQLSERVER:\SQLPolicy para especificar o local de diretivas em um armazenamento de diretivas. Você pode usar cmdlets Windows PowerShell para filtrar as diretivas de entrada com base em suas propriedades, como, por exemplo, o uso de Where-Object para filtrar na categoria da diretiva ou Get-Item para filtrar no nome da diretiva.
Eles podem ser exportados como arquivos XML. Você pode usar uma unidade de sistema de arquivos, por exemplo D:, para especificar o local dos arquivos XML. Você pode usar cmdlets Windows PowerShell, por exemplo Where-Object, para filtrar as diretivas nas propriedades de arquivo, como, por exemplo, nome de arquivo.
Se as diretivas estiverem armazenadas em um armazenamento de diretivas, você deve transmitir um conjunto de PSObjects que aponta para as diretivas a serem avaliadas. Em geral, isso é feito indicando a saída de um cmdlet, por exemplo, Get-Item para Invoke-PolicyEvaluation e não exige que você especifique o parâmetro -Policy. Por exemplo, se você importou as diretivas do Microsoft Best Practices para sua instância do mecanismo de banco de dados, esse comando avalia a diretiva Status do Banco de Dados:
sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"
Get-Item "Database Status" | Invoke-PolicyEvaluation -TargetServerName "MYCOMPUTER"
Este exemplo mostra o uso de Where-Object para filtrar várias diretivas de um armazenamento de diretivas com base na propriedade PolicyCategory. Os objetos da saída indicada de Where-Object é consumida por Invoca-PolicyEvaluation.
sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"
cgi | Where-Object {$_.PolicyCategory -eq "Microsoft Best Practices: Maintenance"} | Invoke-PolicyEvaluation -TargetServer "MYCOMPUTER"
Se as diretivas forem armazenadas como arquivos XML, use o parâmetro - Policy para fornecer o caminho e o nome de cada diretiva. Se você não especificar um caminho no parâmetro -Policy, Invoke-PolicyEvaulation usa a configuração atual do caminho sqlps. Por exemplo, esse comando avalia uma das diretivas do Microsoft Best Practice instaladas com SQL Server em relação ao banco de dados padrão para seu logon:
Invoke-PolicyEvaluation -Policy "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033\Database Status.xml" -TargetServerName "MYCOMPUTER"
Esse comando faz a mesma coisa, apenas usa o caminho sqlps atual para estabelecer o local do arquivo XML da diretiva:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033"
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName "MYCOMPUTER"
Esse exemplo mostra o uso do cmdlet Get-ChildItem para recuperar vários arquivos XML de diretivas e indicar os objetos em Invoke-PolicyEvaluation:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033"
cgi "Database Status.xml", "Trustworthy Database.xml" | Invoke-PolicyEvaluation -TargetServer "MYCOMPUTER"
Especificando o conjunto de destino
Use três parâmetros para especificar o conjunto de objetos de destino:
-TargetServerName especifica a instância do SQL Server que contém os objetos de destino. Você pode especificar as informações em uma cadeia de caracteres que use o formato definido para a propriedade ConnectionString da classe SQLConnection. Você pode usar a classe SqlConnectionStringBuilder para criar uma cadeia de conexão formatada corretamente. Você pode criar também um objeto SqlStoreConnection e transmiti-lo para - TargetServer. Se você fornecer uma cadeia de caracteres que tenha apenas o nome do servidor, Invoke-PolicyEvaluation usará a Autenticação do Windows para se conectar ao servidor.
-TargetObjects utiliza um objeto ou uma matriz de objetos que representam os objetos SQL Server no conjunto de destino. Por exemplo, você pode criar uma matriz de objetos da classe Database para transmitir para -TargetObjects.
-TargetExpressions utiliza uma cadeia de caracteres que contém uma expressão de consulta que especifica os objetos no conjunto de destino. A expressão de consulta está na forma de nós separados pelo caractere '/'. Cada nó está na forma ObjectType [Filtro]. O tipo de objeto é um dos objetos de uma hierarquia de objetos SQL SMO (Server Management Object). Filtro é uma expressão que filtra objetos desse nó. Para obter mais informações, consulte Expressões de consultas e nomes de recurso exclusivos.
Especifique -TargetObjects ou -TargetExpression, não ambos.
Este exemplo usa um objeto Sfc.SqlStoreConnection para especificar o servidor de destino:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033"
$conn = New-Object Microsoft.SqlServer.Management.Sdk.Sfc.SqlStoreConnection("server='MYCOMPUTER';Trusted_Connection=True")
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName $conn
Este exemplo usa -TargetExpression para identificar o banco de dados específico a ser avaliado:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033"
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName "MyComputer" -TargetExpression "Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks']"
Avaliando diretivas do Analysis Services
Para avaliar as diretivas em relação a uma instância do Analysis Services, carregue e registre um assembly no sqlps., crie uma variável com um objeto de conexão do Analysis Services e transmita a variável para o parâmetro -TargetObject. Este exemplo mostra como avaliar a diretiva de configuração da área da superfície do Best Practices para Analysis Services:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\AnalysisServices\1033"
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")
$SSASsvr = new-object Microsoft.AnalysisServices.Server
$SSASsvr.Connect("Data Source=Localhost")
Invoke-PolicyEvaluation -Policy "Surface Area Configuration for Analysis Services Features.xml" -TargetObject $SSASsvr
Avaliando diretivas do Reporting Services
Para avaliar as diretivas do Reporting Services, carregue e registre um assembly no sqlps., crie uma variável com um objeto de conexão do Reporting Services e transmita a variável para o parâmetro -TargetObject. Este exemplo mostra como avaliar a diretiva de configuração da área da superfície do Best Practices para Reporting Services:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\ReportingServices\1033"
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Dmf.Adapters")
$SSRSsvr = new-object Microsoft.SqlServer.Management.Adapters.RSContainer('MyComputer')
Invoke-PolicyEvaluation -Policy "Surface Area Configuration for Reporting Services 2008 Features.xml" -TargetObject $SSRSsvr
Formatando a saída
Por padrão, a saída de Invoke-PolicyEvaluation é exibida na janela do prompt de comando como um relatório conciso em formato legível. Você pode usar o parâmetro -OutputXML para especificar que, em vez disso, o cmdlet deve produzir um relatório detalhado como um arquivo XML. Invoke-PolicyEvaluation usa o esquema SML-IF (Systems Modeling Language Interchange Format) para que o arquivo possa ser lido por leitores de SML-IF.
sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"
Invoke-PolicyEvaluation -Policy "Datbase Status" -TargetServer "MYCOMPUTER" -OutputXML > C:\MyReports\DatabaseStatusReport.xml