PowerShell pour obtenir les compteurs de mémoire du serveur SQL et afficher la valeur

9

J'écris un script PowerShell pour capturer les compteurs SQL Server suivants:

SQL Server: Gestionnaire de mémoire: mémoire totale du serveur (Ko)

SQL Server: Gestionnaire de mémoire: mémoire du serveur cible (Ko)

Ma machine dispose de 3 instances de serveurs SQL, je souhaite donc que ce script capture dynamiquement tous les compteurs et rapporte la valeur pour 1 échantillon uniquement. j'ai essayé d'écrire ce qui suit:

Get-counter -List *SQL*Memory* | Select paths, counter | format-list # doesn't display full list

Get-counter -List *SQL*Memory* | Select paths, counter | where {_.counter -like "*server memory*"} |format-list # displays nothing

finalement, je veux exécuter cela sur plusieurs serveurs avec -computernameparamètre et donc je veux qu'il capture dynamiquement.

Quelqu'un peut-il m'aider à trouver ce qui manque? Voici le script exact que j'exécute:

Function checkTransactionsPerSecond([string] $Hostname )
{ 
    (Get-Counter -ListSet "*Databases").Counter | Where {$_ -like "*\Transactions/sec"} #this returns nothing
#   $listofmetrics = (Get-Counter -ListSet "*Databases").Counter | Where {$_ -like "*\Transactions/sec"}
#   $listofmetrics | Get-Counter
}

clear


foreach ($Hostname in Get-Content "D:\TEMP\machines.txt")
{
    Write-Host $Hostname
    checkTransactionsPerSecond($Hostname) 
}

Merci d'avance

Manjot
la source

Réponses:

7

Aaron Bertrand a écrit un bon article à ce sujet qui est assez détaillé ... Comment j'utilise PowerShell pour collecter les données du compteur de performances .

Ensuite, Laerte Junior a une excellente explication de la façon dont il trouve les compteurs qu'il veut dans un article de Simple-Talk: Gathering Perfmon Data with Powershell . C'est peut-être là que vous voulez commencer. Il a quelques applets de commande qu'il utilise pour capturer les compteurs pour une instance particulière, je crois.

EDIT: Voyez si c'est ce dont vous avez besoin:


$listofmetrics = (Get-Counter -ListSet "*Databases" -ComputerName $hostname).Counter | Where {$_ -like "*\Transactions/sec"}
$listofmetrics | Get-Counter

Edit2 Ajouté -ComputerName


la source
merci pour cela ... Mais le principal problème que j'ai est d'ajouter des filtres supplémentaires aux compteurs, par exemple si je lance ce qui suit: $ listOfMetrices = (Get-Counter -ListSet "* Databases" -ComputerName $ Hostname | where {$ _. chemins-like "* \ transactions / sec"}) $ listOfMetrices | get-counter Il me montre tous les compteurs sous la catégorie de base de données ... mais ce que je veux vraiment voir, c'est les transactions / sec pour chaque base de données. S'il vous plaît aider
Manjot
réponse ajustée.
Merci Shawn, j'ai essayé d'utiliser le code que vous avez mis à jour. mais, il n'est pas en mesure de trouver de compteurs maintenant. (Get-Counter -ListSet "* Bases de données"). Counter | Où {$ _ -like "* \ Transactions / sec"} ne trouve aucun compteur. merci pour votre temps
Manjot
vraiment? Avec quelle version de SQL Server travaillez-vous? J'ai seulement essayé ceci sur un Windows Server 2008 R2, SQL Server 2008 R2.
1
Je viens également d'essayer mon Windows Server 2003, SQL 2005 et il renvoie un seul compteur de: \ SQLServer: Bases de données (*) \ Transactions / sec
0

Regarde ça:

$listofmetrics = Get-Counter -ListSet "*Databases" | Get-Counter -MaxSamples 1 | Select -ExpandProperty CounterSamples | Where {$_.path -like "\Transactions/sec"} | Select Path, CookedValue

Cela produira une liste de bases de données et leurs \ Transactions / sec associés. Je reçois des erreurs de mon côté au début de la recherche, mais je suppose que c'est un problème d'autorisations. Sinon, cela fonctionne comme une beauté. Vous pouvez utiliser Regex pour le nettoyer si vous le souhaitez :)

Ken J
la source