Usar el cmdlet Invoke-PolicyEvaluation
Invoke-PolicyEvaluation es un cmdlet del shell de comandos de SQL Server para Windows PowerShell que notifica si un conjunto de destino de objetos de SQL Server cumple las condiciones especificadas en una o más directivas de la administración basada en directivas.
Usar Invoke-PolicyEvaluation
Invoke-PolicyEvaluation evalúa una o mas directivas en un conjunto de objetos de SQL Server denominado el conjunto de destino. Los objetos del conjunto de destino provienen de un servidor de destino. Cada directiva define condiciones, que son los estados permitidos de los objetos de destino. Por ejemplo, la directiva Base de datos de confianza afirma que la propiedad de base de datos TRUSTWORTHY se debe establecer en OFF.
El parámetro -AdHocPolicyEvaluationMode especifica las acciones emprendidas:
Check
Informa del estado de cumplimiento de los objetos de destino mediante las credenciales del inicio de sesión actual. No configure ningún objeto. Ésta es la configuración predeterminada.CheckSqlScriptAsProxy
Informa del estado de cumplimiento de los objetos de destino mediante las credenciales de inicio de sesión del proxy ##MS_PolicyTSQLExecutionLogin##. No configure ningún objeto.Configure
Informa del estado de cumplimiento de los objetos de destino mediante las credenciales del inicio de sesión actual. Vuelva a configurar cualquier opción que se pueda establecer y que sea determinista que no cumpla las directivas.
Especificar directivas
La forma en la que se especifica una directiva depende de su ubicación de almacenamiento. Las directivas se pueden almacenar en dos formatos:
Pueden ser objetos almacenados en un almacén de directivas, como una instancia del motor de base de datos. Puede usar la carpeta SQLSERVER:\SQLPolicy para especificar la ubicación de las directivas en un almacén de directivas. Puede usar los cmdlets de Windows PowerShell para filtrar las directivas de entrada basándose en sus propiedades, como el uso de Where-Object para filtrar por categoría de directiva o Get-Item para hacerlo por nombre de directiva.
Se pueden exportar como archivos XML. Puede utilizar una unidad de disco del sistema de archivos, como D:, para especificar la ubicación de los archivos XML. Puede usar los cmdlets de Windows PowerShell como Where-Object para filtrar las directivas por sus propiedades de archivo, como nombre de archivo.
Si las directivas se almacenan en un almacén de directivas, debe pasar un conjunto de PSObjects que señalen a las directivas que se van a evaluar. Esta acción se suele realizar mediante la canalización de la salida de un cmdlet como Get-Item a Invoke-PolicyEvaluation y no requiere que se especifique el parámetro -Policy. Por ejemplo, si ha importado las directivas de las prácticas recomendadas de Microsoft en la instancia del motor de base de datos, este comando evalúa la directiva Estado de la base de datos:
sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"
Get-Item "Database Status" | Invoke-PolicyEvaluation -TargetServerName "MYCOMPUTER"
En este ejemplo se muestra el uso de Where-Object para filtrar varias directivas a partir de un almacén de directivas basándose en su propiedad PolicyCategory. Los objetos de la salida canalizada de Where-Object los usa Invoke-PolicyEvaluation.
sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"
cgi | Where-Object {$_.PolicyCategory -eq "Microsoft Best Practices: Maintenance"} | Invoke-PolicyEvaluation -TargetServer "MYCOMPUTER"
Si las directivas se almacenan como archivos XML, debe usar el parámetro -Policy para proporcionar tanto la ruta de acceso como el nombre de cada directiva. Si no especifica ninguna ruta de acceso en el parámetro -Policy, Invoke-PolicyEvaulation usa la configuración actual de la ruta de acceso de sqlps. Por ejemplo, este comando evalúa una de las directivas de las prácticas recomendadas de Microsoft instalada con SQL Server en la base de datos predeterminada para su inicio de sesión:
Invoke-PolicyEvaluation -Policy "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033\Database Status.xml" -TargetServerName "MYCOMPUTER"
Este comando realiza la misma acción, pero usa la ruta de acceso de sqlps actual para establecer la ubicación del archivo XML de directivas:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033"
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName "MYCOMPUTER"
En este ejemplo se muestra el cmdlet de Get-ChildItem para recuperar varios archivos XML de directivas y canalizar los objetos de 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"
Especificar el conjunto de destino
Use tres parámetros para especificar el conjunto de los objetos de destino:
- TargetServerName especifica la instancia de SQL Server que contiene los objetos de destino. Puede especificar la información en una cadena con el formato definido para la propiedad ConnectionString de la clase SQLConnection. Puede utilizar la clase SqlConnectionStringBuilder para generar una cadena de conexión con el formato correcto. Asimismo puede crear un objeto SqlStoreConnection y pasarlo a -TargetServer. Si proporciona una cadena que solo contiene el nombre del servidor, Invoke-PolicyEvaluation usa la autenticación de Windows para conectar con el servidor.
- TargetObjects toma un objeto o matriz de objetos que representen los objetos de SQL Server del conjunto de destino. Por ejemplo, podría crear una matriz de los objetos de la clase Database para pasarlos a -TargetObjects.
- TargetExpressions toma una cadena que contiene una expresión de consulta que especifica los objetos del conjunto de destino. La expresión de consulta tiene el formato de los nodos separados por el carácter '/'. Cada nodo tiene el formato ObjectType[Filter]. El tipo de objeto es uno de los objetos de una jerarquía de objetos de los Objetos de administración de SQL Server (SMO). Filter es una expresión que filtra los objetos de ese nodo. Para obtener más información, vea Expresiones de consulta y nombres de recurso únicos.
Especifique -TargetObjects o -TargetExpression, pero no ambos.
En este ejemplo se utiliza un objeto Sfc.SqlStoreConnection para especificar el 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
En este ejemplo se usa - TargetExpression para identificar la base de datos concreta que se va a evaluar:
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']"
Evaluar las directivas de Analysis Services
Para evaluar las directivas en una instancia de Analysis Services, debe cargar y registrar un ensamblado en sqlps, crear una variable con un objeto de conexión de Analysis Services y pasarla al parámetro -TargetObject. En este ejemplo se muestra cómo evaluar la directiva de configuración de superficie de las prácticas recomendadas de 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
Evaluar las directivas de Reporting Services
Para evaluar las directivas de Reporting Services, debe cargar y registrar un ensamblado en sqlps, crear una variable con un objeto de conexión de Reporting Services y pasarla al parámetro -TargetObject. En este ejemplo se muestra cómo evaluar la directiva de configuración de superficie de las prácticas recomendadas de 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
Dar formato los resultados
De forma predeterminada, los resultados de Invoke-PolicyEvaluation se muestran en la ventana del símbolo del sistema como informe conciso en formato legible. Puede usar el parámetro -OutputXML para especificar que el cmdlet genere un informe detallado como archivo XML. Invoke-PolicyEvaluation usa el esquema de Systems Modeling Language Interchange Format (SML-IF) para que el archivo lo puedan leer los rectores SML-IF.
sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"
Invoke-PolicyEvaluation -Policy "Datbase Status" -TargetServer "MYCOMPUTER" -OutputXML > C:\MyReports\DatabaseStatusReport.xml