将来に役立つものが必要な場合は、おそらくレジストリを検索しようとすることを避けます。SQL Serverのハイブは長年にわたって少し変わっており、それに追いつくのは面倒です。
メソッドSqlDataSourceEnumerator
は時々不安定であり、私はそれを使用しますが、インスタンスがネットワーク上にあるという具体的な証拠ではありません。SQL Browserサービスにも依存していると思いますが、ほとんどの場合は無効になっています。
WMIクラスを利用しwin32_Service
ます。これは、Get-Service
コマンドレットよりも多くのサービスに関する情報を提供するために使用します。
これを使用して、トラブルシューティングのためにサービスの毎日のチェックまたは検証を実際に行うことができるため、一般的にすべてを関数として記述します。
function Get-ServiceStatus ([string[]]$server)
{
foreach ($s in $server)
{
if(Test-Connection $s -Count 2 -Quiet)
{
Get-WmiObject win32_Service -Computer $s |
where {$_.DisplayName -match "SQL Server"} |
select SystemName, DisplayName, Name, State, Status, StartMode, StartName
}
}
}
これは私が普段使用しているものよりも少し大きいですが、他の人が出会って使用したい場合に使用します。Test-Connection
相当ping myserver
DOSプロンプトとに-Quiet
フラグは単純にそれを持っては返しますtrue
かfalse
。これはデフォルトで4つのpingであるため、設定を-Count 2
行うと、代わりに2回実行されます。
変数[string[]]$server
は、$server
サーバー名の配列を受け入れることを示すために使用されるメソッドです。したがって、この関数の呼び出し例は次のようになります。
Get-ServiceStatus -server (Get-Content C:\temp\MyServerList.txt)
または
$servers = 'MyServer1','MyServer2','MyServer3'
Get-ServiceStatus -server $servers
編集
上記のコメントは、提供されているサーバーのリストに依存するということです。そのリストが提供されていない場合、他のいくつかのオプションがあります。
Active Directory環境にいる場合、PowerShell のActiveDirectoryモジュールを使用して、Get-ADComputer
コマンドレットでドメイン上のすべてのサーバーのリストを取得できます。ただし-Filter
、大規模なドメインでは適切なものを使用するようにしてください。
また、ポート1433が開いていることが判明したIPアドレスを提供するネットワークのIPスキャン(承認付き)を実行しました。そのIPリストを取得しGet-ADComputer
、ドメインコンピューター名を見つけるために利用し、それを上記の関数に渡します
例:
Import-Module ActiveDirectory
$sList = $ipList | Select -ExpandProperty IP
$results = foreach ($i in $sList) {
Get-ADComputer -Filter 'IPv4Address -eq $i' -Properties * | Select Name}
Get-ServiceStatus -server $results
編集
Write-Verbose
try / catchブロックを利用して追加することをお勧めしますが、これは便利な場合がありますが、ほとんどの場合、コードの練習では、この関数を使用して追加のコードまたは機能を追加したい人に任せます。先に進むための基本的な例を提供しようとしています。SystemName
情報を返す実際のサーバー名を含めるためにプロパティを出力に追加しましたが、他の関数でこれを行うと、一般的に一度に複数のサーバーでこれを使用しないので気が狂いました。