미래에 유용한 것을 원한다면 레지스트리를 검색하려고 시도하지 않을 것입니다. SQL Server의 두드러기는 수년에 걸쳐 약간 변경되어 따라 가기가 어려울 수 있습니다.
를 사용하는 방법 SqlDataSourceEnumerator
은 때때로 색다른 방법이며 사용하지만 인스턴스가 네트워크에 있다는 구체적인 증거는 아닙니다. 나는 그것이 SQL 브라우저 서비스에도 의존한다고 믿습니다.
나는 WMI 수업을 활용할 것이다 win32_Service
. Get-Service
cmdlet 보다 서비스에 대한 더 많은 정보를 제공하기 때문에 이것을 사용합니다 .
나는 이것을 사용하여 실제로 매일 문제를 해결하기 위해 서비스를 매일 점검하거나 확인하는 데 사용할 수 있기 때문에 모든 것을 함수로 작성합니다.
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
도스 프롬프트를에 -Quiet
플래그가 단순히 그것을 가지고 반환 true
또는 false
. 기본적으로 4 개의 핑이 설정되므로 설정 -Count 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
cmdlet 을 사용하여 도메인의 모든 서버 목록을 가져올 수 있습니다 . 경고는 한마디로 -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
실제 서버 이름 반환 정보를 포함하기 위해 출력에 속성을 추가했습니다 . 다른 기능 에서이 작업을 수행하면 일반적으로 한 번에 두 대 이상의 서버 에서이 기능을 사용하지 않으므로 마음이 미끄러졌습니다.