Gelecek için yararlı olacak bir şey istiyorsanız, büyük olasılıkla kayıt defterini aramaya çalışırken yönlendirirsiniz. SQL Server için kurdeşen yıllar içinde biraz değişti ve yetişmek zahmetli olabilir.
SqlDataSourceEnumerator
İle yöntem zaman zaman lapa lapa ve ben kullanacak olsam da, örneklerin ağ üzerinde olduğuna dair somut bir kanıt değil. Ben de çoğu zaman devre dışı buluyorum SQL Tarayıcı Hizmeti, bağlı olduğuna inanıyorum.
WMI sınıfını kullanacağım win32_Service
. Bunu kullanıyorum çünkü Get-Service
cmdlet'ten daha fazla hizmet sunuyor .
Her şeyi genellikle fonksiyon olarak yazıyorum, çünkü bunu sadece sorun giderme için günlük kontrol veya doğrulama yapmak için kullanabilirsiniz.
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
}
}
}
Bu genellikle kullandığımdan biraz daha fazladır, ancak başka birinin karşılaşması ve kullanmak istemesi durumunda. Test-Connection
İçin eşittir ping myserver
DOS istemi ve -Quiet
bayrak sadece sadece o vardır dönmek true
veya false
. Bu varsayılan olarak 4 ping olacaktır, böylece ayar -Count 2
sadece iki kez yapar.
Değişken [string[]]$server
, bir $server
sunucu adı dizisini kabul edecek bir yöntemdir . Yani bu işlevin örnek çağrısı şöyle görünebilir:
Get-ServiceStatus -server (Get-Content C:\temp\MyServerList.txt)
veya
$servers = 'MyServer1','MyServer2','MyServer3'
Get-ServiceStatus -server $servers
DÜZENLE
Belirtilen bir yorum, yukarıda sunulan sunucuların listesine bağlıdır. Bu listenin sağlanmadığı durumlarda birkaç seçeneğiniz daha vardır.
Active Directory ortamındaysanız , cmdlet ile etki alanındaki tüm sunucuların listesini almak için PowerShell'deki ActiveDirectory modülünü kullanabilirim Get-ADComputer
. Bir uyarı sözcüğü olsa da -Filter
, büyük alanlarda iyi kullandığınızdan emin olun .
Ayrıca sadece bana 1433 numaralı bağlantı noktasının açık olduğu IP adreslerini veren bir ağın IP taramasını (onaylı) yaptım. Bu IP listesini alıp Get-ADComputer
etki alanı bilgisayar adlarını bulmak için kullanacağım , sonra yukarıdaki işleve geçireceğim
Misal:
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
DÜZENLE
Kullanmak Write-Verbose
ve denemek / yakalamak blok eklemek için önerilen düzenleme , bu yararlı olabilir ve çoğu durumda bir kod uygulama, ben bu ek kod veya işlevsellik eklemek için bu işlevi kullanmak isteyen kişiye bırakacaktır. Sadece devam etmek için temel bir örnek sunmaya çalışıyoruz. Ben SystemName
gerçek sunucu adı dönen bilgileri eklemek için çıkış özelliği ekledim, diğer işlevler üzerinde bunu yapmak sadece genel olarak bu bir kerede birden fazla sunucu için kullanmayın bu yüzden aklımı kaydırdı.