AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 77872
Accepted
SQL Hammer
SQL Hammer
Asked: 2014-09-28 18:17:17 +0800 CST2014-09-28 18:17:17 +0800 CST 2014-09-28 18:17:17 +0800 CST

Como o provedor PowerShell SQLPS SQLSERVER detecta servidores de gerenciamento central em SQLRegistration\Central Management Server Group

  • 772

Estou tendo um comportamento estranho com o provedor PowerShell SQLSERVER e o diretório SQLRegistration\Central Management Server Group. Abaixo estão os comportamentos. Gostaria de saber como o provedor SQLSERVER sabe quais CMS's estão registrados para que eu possa entender por que parece não perceber o registro quando feito no SSMS 2014 (veja abaixo o comportamento detalhado). Além disso, por que minha conexão falha quando sei que a instância está online.

Máquina de configuração

  • host local

Instâncias

  • localhost\SQL2012
  • localhost\SQL2014
  • localhost\SQL2014_1

Comportamento 1
Usando o SSMS 2014, registrei localhost\SQL2012 como um CMS. A execução desse código não retorna nenhum item.

PS SQLSERVER:\SQLRegistration\Central Management Server Group> dir

Abrir e fechar o console do PowerShell e o SSMS não altera os resultados. Se eu abrir o SSMS 2012 e registrar localhost\SQL2012 como um CMS e executar novamente o comando acima, vejo localhost\SQL2012 registrado como esperado.

Comportamento 2
Depois de fazer o servidor listar com sucesso...

Diretório: Microsoft.SqlServer.Management.PSProvider\SqlServer::SQLSERVER:\SQLRegistration\Central Management Server Group

Nome do Modo


  • localhost\SQL2012

E a execução do comando abaixo para tentar navegar para meus grupos de servidores registrados falha com o erro abaixo, mesmo que a instância esteja online e disponível.

PS SQLSERVER:\SQLRegistration\Central Management Server Group> Set-Location "localhost\SQL2012\"  

Set-Location: Não é possível localizar o caminho 'SQLSERVER:\SQLRegistration\Central Management Server Group\localhost\SQL2012\' porque ele não existe. Na linha:1 char:1 + Set-Location "localhost\SQL2012\" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~ + CategoryInfo : ObjectNotFound: (SQLSERVER:\SQLR...alhost\SQL2012:String) [Set-Location], ItemNotFoundE xception + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

A atualização 1
SMO parece funcionar bem. O código abaixo retorna com sucesso meus grupos de servidores.

#Load SMO assemblies
$CentralManagementServer = "localhost\sql2012"
$MS='Microsoft.SQLServer'
@('.SMO', '.Management.RegisteredServers', '.ConnectionInfo') |
     foreach-object {if ([System.Reflection.Assembly]::LoadWithPartialName("$MS$_") -eq $null) {"missing SMO component $MS$_"}}

$connectionString = "Data Source=$CentralManagementServer;Initial Catalog=master;Integrated Security=SSPI;"
$sqlConnection = new-object System.Data.SqlClient.SqlConnection($connectionString)
$conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection($sqlConnection)
$CentralManagementServerStore = new-object Microsoft.SqlServer.Management.RegisteredServers.RegisteredServersStore($conn)

$CentralManagementServerStore.ServerGroups[ "DatabaseEngineServerGroup" ].ServerGroups
sql-server powershell
  • 2 2 respostas
  • 5848 Views

2 respostas

  • Voted
  1. SQL Hammer
    2014-09-30T16:33:55+08:002014-09-30T16:33:55+08:00

    A explicação de Shawn sobre discrepâncias entre a versão do SQL Server parece correta. Por esse motivo, acredito que o SMO seja um método mais estável. Eu estou indo para a frente usando o código abaixo.

    Import-Module SQLPS -DisableNameChecking
    
    Function Parse-ServerGroup($serverGroup)
    {
        $results = $serverGroup.RegisteredServers;
        foreach($group in $serverGroup.ServerGroups)
        {
            $results += Parse-ServerGroup -serverGroup $group;
        }
        return $results;
    }
    
    Function Get-ServerList ([string]$cmsName, [string]$serverGroup, [switch]$recurse)
    {
    
        $connectionString = "data source=$cmsName;initial catalog=master;integrated security=sspi;"
    $sqlConnection = New-Object ("System.Data.SqlClient.SqlConnection") $connectionstring
        $conn = New-Object ("Microsoft.SQLServer.Management.common.serverconnection") $sqlconnection
        $cmsStore = New-Object Microsoft.SqlServer.Management.RegisteredServers.RegisteredServersStore($conn)
        $cmsRootGroup = $cmsStore.ServerGroups["DatabaseEngineServerGroup"].ServerGroups[$serverGroup]
    
        if($recurse)
        {
            return Parse-ServerGroup -serverGroup $cmsRootGroup | select ServerName
        }
        else
        {
            return $cmsRootGroup.RegisteredServers | select ServerName
        }
    }
    
    Get-ServerList -cmsName "localhost\SQL2012" -serverGroup "Production" -recurse | Format-Table
    
    • 2
  2. Best Answer
    user507
    2014-09-29T11:56:11+08:002014-09-29T11:56:11+08:00

    Comportamento 1 que posso esperar porque há alguns recursos que podem ou não funcionar conforme o esperado ao usar uma versão superior do SSMS na versão inferior da instância. Pode haver coisas em segundo plano que mudaram ligeiramente de 2014 para 2012 sobre as quais você provavelmente nunca encontrará nenhuma documentação. Na verdade, eu criaria um item de conexão nisso se você pudesse recriar esse cenário em outra máquina todas as vezes.

    Agora, o Comportamento 2 falhou na primeira vez que tentei, mas foi bem-sucedido todas as vezes depois disso, mesmo depois de abrir/fechar janelas. No entanto, se você está tentando isso usando apenas PowerShell.exe, é de se esperar que algumas coisas não funcionem exatamente da mesma maneira quando você está lidando com o SQLPSprovedor. Se você tentou fazer o mesmo comando, SQLPS.exeeu esperaria que funcionasse todas as vezes, pelo menos para mim. Agora não estou usando o SQL Server 2014, apenas o 2012 está carregado na minha máquina agora.

    Você pode ver o quão diferentes PowerShell.exee SQLPS.exesão comparando os assemblies carregados em cada um:

    insira a descrição da imagem aqui

    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve