Internal/functions/New-DssSchemaConfig.ps1
function New-DssSchemaConfig { <# .SYNOPSIS Creates a new schema config section for scanning Output passed to STDOUT as PSCustomObject .PARAMETER SqlInstance SQL Server instance holding the databse to be used as the base for the configuration .PARAMETER SqlCredential A PSCredential object to connect to SqlInstance .PARAMETER Database Database to use as basis for config #> [CmdletBinding()] param ( [string]$SqlInstance, [PSCredential]$SqlCredential, [String]$Database, [switch]$IncludeSystemObjects ) begin {} process {} end { $sqlSchema = " select ss.name as 'schemaName', sdp.name as 'owner' from sys.schemas ss inner join sys.database_principals sdp on ss.principal_id=sdp.principal_id " $dbSchema = Invoke-DbaQuery -SqlInstance $SqlInstance -sqlcredential $sqlcredential -database $database -Query $sqlSchema $sqlObject = " select ss.name as 'schemaname', sdp.name as 'owner', sa.name as 'object', sa.type_desc, sa.is_ms_shipped from sys.schemas ss inner join sys.all_objects sa on ss.schema_id = sa.schema_id inner join sys.database_principals sdp on ss.principal_id=sdp.principal_id" if ($IncludeSystemObjects -ne $true){ write-Verbose "Not including System Objects" $sqlObject += " WHERE sa.is_ms_shipped=0" } $dbObject = Invoke-DbaQuery -SqlInstance $SqlInstance -sqlcredential $sqlcredential -database $database -Query $sqlObject $sqlPermissions = " select sdperm.permission_name as 'permission', ss.name as 'schemaname', sdp.name as 'grantee' from sys.database_permissions sdperm inner join sys.schemas ss on sdperm.major_id=ss.schema_id inner join sys.database_principals sdp on sdperm.grantee_principal_id = sdp.principal_id where class_desc='SCHEMA' " $dbPermissions = Invoke-DbaQuery -SqlInstance $SqlInstance -sqlcredential $sqlcredential -database $database -Query $sqlPermissions $output = @() ForEach ($schema in $dbSchema){ $objects = $dbObject | Where-Object {$_.schemaName -eq $schema.schemaName} | Select-Object -Property owner, object, type_desc, is_ms_shipped $permissions = $dbPermissions | Where-Object {$_.schemaName -eq $schema.schemaName} | Select-Object permission, grantee $output +=[PsCustomObject]@{ schemaName = $schema.schemaName owner = $schema.owner objects = $objects permissions = $permissions } } $output } } |