DBContexts/MSSqlInformationSchemasDbContext.ps1

Param(
    $Server,
    $Database,
    $IntegratedSecurity,
    [PScredential]$Credential,
    [ValidateSet('Interactive', 'Network', 'Batch', 'Service', 'Unlock', 'NetworkCleartext', 'NewCredentials')]
    [string]$LogonType = 'NewCredentials'
)

if($null -eq ( Get-Module EFPosh )){
    Import-Module EFPosh -ErrorAction Stop
}

Class MSSQLInformationSchemaTables {
    [string]$TABLE_CATALOG
    [string]$TABLE_SCHEMA
    [string]$TABLE_NAME
    [string]$TABLE_TYPE
}

Class MSSQLInformationSchemaColumns {
    [string]$TABLE_CATALOG
    [string]$TABLE_SCHEMA
    [string]$TABLE_NAME
    [string]$COLUMN_NAME
    [int]$ORDINAL_POSITION
    [string]$IS_NULLABLE
    [string]$DATA_TYPE
}

Class MSSQLInformationSchemaPrimaryKeys {
    [string]$TABLENAME
    [string]$PRIMARYKEYCOLUMN
    [string]$TABLESCHEMA
    [int]$POSITION
}

$Tables = @(
    ( New-EFPoshEntityDefinition -Type 'MSSQLInformationSchemaTables' -TableName 'TABLES' -Schema 'INFORMATION_SCHEMA' -Keyless ),
    ( New-EFPoshEntityDefinition -Type 'MSSQLInformationSchemaColumns' -TableName 'COLUMNS' -Schema 'INFORMATION_SCHEMA' -Keyless ),
    ( New-EFPoshEntityDefinition -Type 'MSSQLInformationSchemaPrimaryKeys' -Keyless )
)

$optionalParams = @{}
if($Credential){
    $optionalParams['Credential'] = $Credential
    $optionalParams['LogonType'] = $LogonType
}

return New-EFPoshContext -MSSQLServer $Server -MSSQLDatabase $Database -MSSQLIntegratedSecurity $IntegratedSecurity -Entities $Tables @optionalParams