O que tem de novo no SQL Server PowerShell no SQL Server 2014 CTP1


Pessoal,

esses dias ando brincando com o SQL Server 2014 CTP1 e uma das primeiras coisas (claro) que fui verificar é se tinha alguma diferença em relação ao SQL Server 2012.

Foi então que lembrei de um script que um grande amigo e PowerShell Jedi, Shay Levy, fez para comparar, na época de release do PowerShell v3.0, as diferenças entre o PowerShell v2 e v3. Fiz algumas simples alterações no Script e voce pode ver a versão original aqui :

How to find out what’s new in PowerShell vNext

 

1 Teste : A versão do host no SQL Server :

SQL Server 2012 : 2.0

PowerShell2012HostVersion

SQL Server 2014 CTP1 : 2.0

PowerShell2014HostVersion

Bom pelo que podemos ver, a versão continua a mesma, ou a 2.0

 

2 Test : Comparaçao para verificar cmdlets/parametros  novos/removidos/alterados   (usando a versão alterado do script do Shay) :

   1: # run in SQL2012 box, export all core cmdlets, name and parameters

   2: Get-Command -Module SQLPS | Select-Object -Property Name,@{Name='Parameters';Expression={(Get-Command $_).Parameters.Keys}} | Export-Clixml c:\temp\2012SQLPS.xml

   3: Get-Command -Module SQLASCMDLETS | Select-Object -Property Name,@{Name='Parameters';Expression={(Get-Command $_).Parameters.Keys}} | Export-Clixml c:\temp\2012AS.xml

   4:  

   5:  

   6: # run in SQL2014 box, export all core cmdlets, name and parameters

   7: Get-Command -Module SQLPS | Select-Object -Property Name,@{Name='Parameter';Expression={(Get-Command $_).Parameters.Keys}} | Export-Clixml c:\temp\2014SQLPS.xml

   8: Get-Command -Module SQLASCMDLETS | Select-Object -Property Name,@{Name='Parameters';Expression={(Get-Command $_).Parameters.Keys}} | Export-Clixml c:\temp\2014AS.xml

   9:  

  10: #Comparing SQLPS

  11: # run either in V2012 or V2014 console

  12: $V2012 = Import-CliXml C:\TempShare\CompareSQLPS\2012SQLPS.xml | Sort-Object -Property Name

  13: $V2014 = Import-CliXml C:\TempShare\CompareSQLPS\2014SQLPS.xml | Sort-Object -Property Name

  14:  

  15: Compare-Object $V2012 $V2014 -Property Name -IncludeEqual -PassThru | ForEach-Object {

  16:  

  17:     $Command = $_

  18:  

  19:     if($_.SideIndicator -eq ‘==’)

  20:     {

  21:         $Command = $_

  22:  

  23:         $cV2012 = $V2012 | Where-Object {$_.Name -eq $Command.Name} | Select-Object -ExpandProperty Parameters

  24:         $cV2014 = $V2014 | Where-Object {$_.Name -eq $Command.Name} | Select-Object -ExpandProperty Parameters

  25:  

  26:         $compare = Compare-Object $cV2012 $cV2014

  27:  

  28:         if($compare)

  29:         {

  30:             try

  31:             {

  32:                 $NewParameters = $compare | Where-Object {$_.SideIndicator -eq ‘=>’} | ForEach-Object {$_.InputObject + ‘ (+)’}

  33:                 $RemovedParameters = $compare | Where-Object {$_.SideIndicator -eq ‘<=’} | ForEach-Object {$_.InputObject + ‘ (-)’}

  34:  

  35:                 “$($command.Name) (!)”

  36:                 $NewParameters + $RemovedParameters | Sort-Object | ForEach-Object { “`t$_”}

  37:                 “`n”

  38:             }

  39:             catch{}

  40:         }

  41:     }

  42:     elseif($_.SideIndicator -eq ‘=>’)

  43:     {

  44:         “$($Command.name) (+)`n”

  45:     }

  46:     else

  47:     {

  48:         “$($Command.name) (-)`n”

  49:     }

  50: }

  51:  

  52: #Comparing SQLASCMDLETS

  53: # run either in V2012 or V2014 console

  54: $V2012 = Import-CliXml C:\TempShare\CompareSQLPS\2012AS.xml | Sort-Object -Property Name

  55: $V2014 = Import-CliXml C:\TempShare\CompareSQLPS\2014AS.xml | Sort-Object -Property Name

  56:  

  57: Compare-Object $V2012 $V2014 -Property Name -IncludeEqual -PassThru | ForEach-Object {

  58:  

  59:     $Command = $_

  60:  

  61:     if($_.SideIndicator -eq ‘==’)

  62:     {

  63:         $Command = $_

  64:  

  65:         $cV2012 = $V2012 | Where-Object {$_.Name -eq $Command.Name} | Select-Object -ExpandProperty Parameters

  66:         $cV2014 = $V2014 | Where-Object {$_.Name -eq $Command.Name} | Select-Object -ExpandProperty Parameters

  67:  

  68:         $compare = Compare-Object $cV2012 $cV2014

  69:  

  70:         if($compare)

  71:         {

  72:             try

  73:             {

  74:                 $NewParameters = $compare | Where-Object {$_.SideIndicator -eq ‘=>’} | ForEach-Object {$_.InputObject + ‘ (+)’}

  75:                 $RemovedParameters = $compare | Where-Object {$_.SideIndicator -eq ‘<=’} | ForEach-Object {$_.InputObject + ‘ (-)’}

  76:  

  77:                 “$($command.Name) (!)”

  78:                 $NewParameters + $RemovedParameters | Sort-Object | ForEach-Object { “`t$_”}

  79:                 “`n”

  80:             }

  81:             catch{}

  82:         }

  83:     }

  84:     elseif($_.SideIndicator -eq ‘=>’)

  85:     {

  86:         “$($Command.name) (+)`n”

  87:     }

  88:     else

  89:     {

  90:         “$($Command.name) (-)`n”

  91:     }

  92: }

SQLPS module :

Backup-SqlDatabase (!)
    BackupContainer (+)
    SqlCredential (+)

Invoke-Sqlcmd (!)
    IncludeSqlUserErrors (+)

Restore-SqlDatabase (!)
    SqlCredential (+)

Get-SqlCredential (+)

New-SqlCredential (+)

Remove-SqlCredential (+)

Set-SqlCredential (+)

 

Como podemos ver :

Backup-Sqldatabase foi alterado, adicionado 2 novos parametros : BackupContainer and Sqlcredential

Invoke-Sqlcmd foi alterado, adicionado 1 novo parametros: IncludeSqlUserErrors

Restore-Sqldatabase foi alterado, adicionado 1 novo parametro SqlCredential

Adicoinado 4 novos cmdlets (para dar suporte ao novo parametro SsqlCredential) : Get-SqlCredential,New-SqlCredential,Remove-SqlCredential and Set-SqlCredential

 

SQLASCmdlets : Nada mudou

 

Os testes forma feitos diretamente no host do PowerShell no SQL Server em minha VM com Windows Server 2012 R2 Preview, na qual a versão do PowerShell é 4.0

Uma coisa bem legal é que você pode tirar benefício de um novo commom parameter adicionado na versão 4.0 , PipelineVariable, se você abrir o host do PowerShell e importar o modulo de SQL Server (SQLPS)

Esse novo ultra fucker parametro me foi mostrado pelo Shay e Keith explica ele bem aqui :

PowerShell V4 – PipelineVariable Common Parameter

 

Se você qiuser usar ele nos seus scripts e depois schedular no SQL Agent, basta usar o Job CMD e fazer a chamada do script com  PowerShell.exe 🙂

About Laerte Junior

Laerte Junior Laerte Junior is a SQL Server specialist and an active member of WW SQL Server and the Windows PowerShell community. He also is a huge Star Wars fan (yes, he has the Darth Vader´s Helmet with the voice changer). He has a passion for DC comics and living the simple life. "May The Force be with all of us"
This entry was posted in Algo que Esqueci de Categorizar. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s