Tip: The specified object was not found on the computer.

Fala galera, passando para deixar mais uma dica rápida para vocês, essa vai para quem já se deparou com o erro abaixo tentado coletar informações de contadores do SQL Server via Powershell.

Get-Counter : The specified object was not found on the computer.

Screen Shot 04-25-17 at 10.24 PM

Quem já precisou ou já fez uma avaliação de migração de um determinado banco de dados para o Azure SQL Database? Pois bem, provavelmente você deve ter utilizado o script abaixo disponibilizado no site da Azure(link nas referencias) para avaliar qual melhor service tier seu banco de dados se enquadra.

<#
.SYNOPSIS
Collect counters required for DTU Calculator and log as CSV.

.DESCRIPTION
Collect counters required for DTU Calculator and log as CSV.
Default log file location is C:\sql-perfmon-log.csv.
Counters are collected at 1 second intervals for 1 hour or 3600 seconds.
No support or warranty is supplied or inferred.
Use at your own risk.

.PARAMETER DatabaseName
The name of the SQL Server database to monitor.

.INPUTS
Parameters above.

.OUTPUTS
None.

.NOTES
Version: 1.0
Creation Date: May 1, 2015
Modified Date: June 17, 2016
Author: Justin Henriksen ( http://justinhenriksen.wordpress.com )
#>

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted -Force

$ErrorActionPreference = “Stop”
$VerbosePreference = “Continue”

cls

Write-Output “Collecting counters…”
Write-Output “Press Ctrl+C to exit.”

$counters = @(“\Processor(_Total)\% Processor Time”,
“\LogicalDisk(_Total)\Disk Reads/sec”,
“\LogicalDisk(_Total)\Disk Writes/sec”,
“\SQLServer:Databases(_Total)\Log Bytes Flushed/sec”)

Get-Counter -Counter $counters -SampleInterval 1 -MaxSamples 3600 |
Export-Counter -FileFormat csv -Path “C:\sql-perfmon-log.csv” -Force

Script aparentemente simples para coleta de apenas 4 contadores, sendo 3 deles do sistema operacional e apenas 1 do SQL Server, coleta feita via PowerShell salvando num arquivo(.CSV), existe também um script em Command Line.

Já utilizei esse script diversas vezes em outros ambientes, porém, esses dias me deparei com esse erro acima ao tentar realizar uma coleta de dados dos contadores utilizando esse mesmo script.

Após muito sofrimento, diversas tentativas realizadas, onde o mesmo script que não funcionava em um ambiente, porém, funcionava perfeitamente em outro, tive que me render a internet e após diversas pesquisas sem sucesso me deparo com uma bela resposta no Technet(Link abaixo):

It works every time.  It also is ne more proof of my rule of “The Single Quote Harmony”.  Always use single quotes until you learn what a double quote really means in PowerShell.  Until you are certified in quotes you are not allowed to use double, quotes.  No first grade until you graduate from the Kinder’s Garden.

https://social.technet.microsoft.com/Forums/lync/en-US/7865c4a1-dab4-424f-8489-bcd86860f970/need-help-with-powershell-to-get-sqlserver-metrics?forum=winserverpowershell

 

Um teste tão simples que não me passou pela cabeça: Trocar aspas(“) por apóstrofos (‘), foi tiro e queda.

<#
.SYNOPSIS
Collect counters required for DTU Calculator and log as CSV.

.DESCRIPTION
Collect counters required for DTU Calculator and log as CSV.
Default log file location is C:\sql-perfmon-log.csv.
Counters are collected at 1 second intervals for 1 hour or 3600 seconds.
No support or warranty is supplied or inferred.
Use at your own risk.

.PARAMETER DatabaseName
The name of the SQL Server database to monitor.

.INPUTS
Parameters above.

.OUTPUTS
None.

.NOTES
Version: 1.0
Creation Date: May 1, 2015
Modified Date: June 17, 2016
Author: Justin Henriksen ( http://justinhenriksen.wordpress.com )
#>

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted -Force

$ErrorActionPreference = “Stop”
$VerbosePreference = “Continue”

cls

Write-Output “Collecting counters…”
Write-Output “Press Ctrl+C to exit.”

$counters = @(‘\Processor(_Total)\% Processor Time’,
‘\LogicalDisk(_Total)\Disk Reads/sec’,
‘\LogicalDisk(_Total)\Disk Writes/sec’,
‘\SQLServer:Databases(_Total)\Log Bytes Flushed/sec’)

Get-Counter -Counter $counters -SampleInterval 1 -MaxSamples 3600 |
Export-Counter -FileFormat csv -Path “C:\sql-perfmon-log.csv” -Force

Após trocado de aspas(“) para apóstrofos(‘) foi executado com sucesso, mesmo assim fiquei encucado de funcionar em um ambiente e outro não, fiz umas comparações de configurações regionais, corrigi algumas coisas diferentes, mesmo assim sem sucesso, então o motivo real ainda não sei dizer, mas fica a dica se um dia você vier a sofrer desse mesmo erro.

Observação: Trocando as aspas apenas no contador do SQL Server (‘\SQLServer:Databases(_Total)\Log Bytes Flushed/sec’) já funciona, o que fica mais estranho ainda rs.

Observação 2: Para utilização do script, onde está (_Total) no contador do SQL Server trocar pelo nome da base de dados a ser avaliada.

Bom caso tenha alguma informação que possa complementar deixe ai no comentário, espero que essa dica te ajude a não sofrer muito rs.

Referencias:

Scripts para download

http://dtucalculator.azurewebsites.net/

Solução encontrada

https://social.technet.microsoft.com/Forums/lync/en-US/7865c4a1-dab4-424f-8489-bcd86860f970/need-help-with-powershell-to-get-sqlserver-metrics?forum=winserverpowershell

Reginaldo Silva

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s