PowerShell'deki Bilgisayarların Ping Listesi [3 Yol]
PowerShell'de Bilgisayar Listesine Ping Atmanın Farklı Yolları
PowerShell'deki bilgisayar listesine ping atmak için kullanabileceğimiz birden fazla yol vardır. Peki ping ne anlama geliyor? Bir bilgisayara ping atmak, ağa bağlı bilgisayarın kullanılabilir ve yanıt verebilir durumda olup olmadığını belirlemek anlamına gelir. Ağa bağlı bilgisayar (hedef makine de diyebiliriz) mevcutsa ve yanıt veriyorsa, ping isteğini başlatan göndericiye yanıt gönderir. Hedef makineden gelen bu yanıt, makinenin çevrimiçi ve çalışır durumda olduğunu gösterir.
Ayrıca ağ sorunlarını kontrol etmek ve ağ bağlantısını doğrulamak için bilgisayara veya bilgisayar listesine ping atıyoruz. Örneğin bir bilgisayara ping atmak, sorunun hedef bilgisayarla mı ilgili olduğunu yoksa ağ bağlantısıyla mı ilgili olduğunu anlamamıza yardımcı olur. Bir bilgisayara ping atmak için aşağıdaki yolları kullanabiliriz:
Test-ConnectCmdlet'ini kullanmaWMIveGet-WmiObjectCmdlet'ini kullanmaSystem.Net.NetworkInformation.PingSınıfını Kullanma
Bilgisayar listesine nasıl ping atılacağını öğrenmek için tüm bilgisayarların IP'lerini aşağıdaki verileri içeren bir metin dosyasına (computersList.txt) kaydettik.
ComputerList.txt'nin içeriği:
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4Lütfen yukarıdaki IP adreslerini Bilgisayar adlarıyla da değiştirebileceğinizi unutmayın.
Artık pingin ne olduğunu ve neden kullandığımızı biliyoruz. Ayrıca ping atılacak bilgisayarların bir listesi de var, bu yüzden bu bilgisayarlara ping atmak için çeşitli yöntemlere geçelim.
Test-Connect Cmdlet'ini kullanma
PowerShell'de bilgisayarların IP listesine ping atmak için:
computerList.txtdosyasından bilgisayarların listesini almak ve bunu bir değişkene kaydetmek içinGet-Contentcmdlet'ini kullanın.- Önceki adımda oluşturduğumuz bilgisayar listesindeki her bilgisayar üzerinde yineleme yapmak için
foreachdöngüsünü kullanın. foreachdöngüsünün her yinelemesinde:- Bir ping isteği göndermek ve yanıtı bir değişkene kaydetmek için
Test-Connectcmdlet'ini kullanın.
- Bir ping isteği göndermek ve yanıtı bir değişkene kaydetmek için
- Geçerli bilgisayarın belirtilen koşula göre çalışır durumda olup olmadığını yazdırmak için
if-elsekomutunu kullanın.
Test-Connect Cmdlet'ini kullanın:
$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
$pingComputer = Test-Connection $computer -Count 1 -Quiet
if ($pingComputer) {
Write-Host "$computer is up"
} else {
Write-Host "$computer is down"
}
}ÇIKTI:
192.168.1.1 is up
192.168.1.2 is down
192.168.1.3 is down
192.168.1.4 is downÖncelikle computersList.txt dosyasının içeriğini okumak için Get-Content cmdlet'ini kullandık ve bunu $computers değişkenine kaydettik. computersList.txt geçerli dizinde bulunur; Bu dosyayı yerel makinenizde istediğiniz yere koyabilirsiniz. computersList.txt dosyası bilgisayarların IP'lerini içeriyordu ancak bilgisayar adları da burada kullanılabilir.
Daha sonra, $computers dizisi üzerinde yineleme yapmak için bir foreach döngüsü kullandık. Her yinelemede, mevcut bilgisayara ping atmak için -Count ve -Quiet parametreleriyle Test-Connection'ı kullandık ve yanıtı $pingComputer değişkeni. Burada, Test-Connection cmdlet'i İnternet Kontrol Mesajı Protokolü (ICMP) yankı isteği paketini (ping'leri) bir veya daha fazla bilgisayara gönderdi.
Belirli bir bilgisayarın bir IP ağı üzerinde kullanılabilir ve duyarlı olup olmadığını kontrol etmek için Test-Connection cmdlet'ini kullanabiliriz. Gönderen ve alan makinelerden bahsetmek, zaman aşımı ve ping sayısını ayarlamak, komutu arka plan işi olarak çalıştırmak ve belirli bir bağlantının kimliğini doğrulamak veya yapılandırmak için de parametrelerini kullanabiliriz. Bununla ilgili daha fazlasını burada bulabilirsiniz.
Test-Connection cmdlet'i, PowerShell'de kullanabileceğimiz bir nesne olarak TestConnectionCommand+PingStatus değerini döndürür. Ancak yukarıdaki örnekte TestConnectionCommand+PingStatus'u nesne olarak alamıyoruz; Neden? Bunun nedeni, hedef makine çalışıyorsa true gibi bir Boolean değeri döndüren -Quiet parametresini kullanmamızdır; aksi halde yanlış. Ayrıca aynı anda yalnızca bir bilgisayara ping atılacağını belirtmek için -Count parametresi kullanıldı.
Son olarak if-else bloğunu kullandık ve $pingComputer'ın true olup olmadığını kontrol ettik. Eğer öyleyse, if bloğu yürütülecektir; aksi takdirde else bloğu çalışacaktır. Son olarak PowerShell konsolunda bir mesaj görüntülemek için, özelleştirilmiş çıktıyı ana bilgisayara yazmak için kullanılan Write-Host cmdlet'ini kullandık (ana bilgisayar, PowerShell konsolu anlamına gelir).
Benzer şekilde, IP'leri yerine bilgisayar adlarını kullanarak ping atabilirsiniz.
Test-Connect Cmdlet'ini kullanın:
$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
$pingComputer = Test-Connection $computer -Count 1 -Quiet
if ($pingComputer) {
Write-Host "$computer is up"
} else {
Write-Host "$computer is down"
}
}ÇIKTI:
DESKTOP-THATKM is up
CYBERHOST-PC is down
TAHIR-DESKTOP is downWMI ve Get-WmiObject Cmdlet'ini kullanma
PowerShell'de bilgisayarların IP'lerinin listesine ping atmak için:
computerList.txtdosyasından bilgisayarların listesini almak ve bunu bir değişkene kaydetmek içinGet-Contentcmdlet'ini kullanın.- Önceki adımda oluşturduğumuz bilgisayar listesindeki her bilgisayar üzerinde yineleme yapmak için
foreachdöngüsünü kullanın. foreachdöngüsünün her yinelemesinde:- Bir ping isteği göndermek ve çıkarılan Durumu bir değişkende depolamak için
Win32_PingStatuscmdlet'ini kullanın.
- Bir ping isteği göndermek ve çıkarılan Durumu bir değişkende depolamak için
- Mevcut bilgisayarın verilen koşula göre çalışır durumda/aşağı durumda olup olmadığını yazdırmak için
if-elseoperatörünü-eqoperatörüyle birlikte kullanın. - Komut dosyasının bozulmasını önlemek ve bir istisna meydana gelirse onu ele almak için kodu
foreachiçine birtry-catchbloğuyla ekleyin.
WMI ve Get-WmiObject'i kullanın:
$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
try {
$pingComputer = Get-WmiObject -Class Win32_PingStatus -Filter "Address='$computer'" |
Select-Object -ExpandProperty StatusCode
if ($pingComputer -eq 0) {
Write-Host "$computer is up"
} else {
Write-Host "$computer is down"
}
} catch {
Write-Host "$computer is down"
}
}ÇIKTI:
192.168.1.1 is up
192.168.1.2 is down
192.168.1.3 is down
192.168.1.4 is downÖnceki örnekte olduğu gibi, computersList.txt verilerine erişmek için Get-Content cmdlet'ini kullandık ve bunu $computers dizisine kaydettik. Daha sonra $computers dizisi üzerinde döngü yapmak için foreach deyimini kullandık.
Her yinelemede, Win32_PingStatus adlı Windows Yönetim Araçları (WMI) sınıfını sorgulamak için Get-WmiObject cmdlet'ini kullandık ve mevcut hedef bilgisayar için ping isteğinin Durumunu aldık ($computer) ). Öncelikle hedef bilgisayara yazmak için -Filter parametresini kullandık. Daha sonra, alınan WMI nesnesinden StatusCode özelliğini çıkarmak için Select-Object cmdlet'ini kullandık; nihai sonuç $pingComputer değişkeninde saklandı.
Daha sonra $pingComptuer değerinin 0<'a eşit olup olmadığını belirlemek için bloğuyla sardığımızı fark etmiş olabilirsiniz.if ifadesini -eq karşılaştırma operatörüyle birlikte kullandık. /code> veya değil. Öyleyse, mevcut bilgisayarın çalışır durumda olduğunu görüntüleyin; aksi halde düşer. İstisna oluştuğunda bunu ele almak için foreach döngüsünün gövdesini bir try-catch
Şimdi çeşitli bilgisayarlara ana bilgisayar adları da denilen adlarını kullanarak ping atalım.
WMI ve Get-WmiObject'i kullanın:
$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
try {
$pingComputer = Get-WmiObject -Class Win32_PingStatus -Filter "Address='$computer'" |
Select-Object -ExpandProperty StatusCode
if ($pingComputer -eq 0) {
Write-Host "$computer is up"
} else {
Write-Host "$computer is down"
}
} catch {
Write-Host "$computer is down"
}
}ÇIKTI:
DESKTOP-THATKM is up
CYBERHOST-PC is down
TAHIR-DESKTOP is downSystem.Net.NetworkInformation.Ping Sınıfını Kullanma
PowerShell'de farklı bilgisayarların IP'lerinin listesine ping atmak için:
computerList.txtdosyasından bilgisayarların listesine erişmek içinGet-Contentcmdlet'ini kullanın ve bunu bir değişkene kaydedin.- Önceki adımda oluşturduğumuz bilgisayar listesindeki her bilgisayar üzerinde yineleme yapmak için
foreachdöngüsünü kullanın. foreach'un her yinelemesinde:System.Net.NetworkInformation.Pingsınıfının bir nesnesini oluşturmak ve bunu bir değişkene kaydetmek içinNew-Objectcmdlet'ini kullanın.
- Geçerli hedef bilgisayara bir ping isteği göndermek ve yanıtı bir değişkene kaydetmek için
.Send()yöntemini kullanın. - Geçerli bilgisayarın belirtilen koşula göre çalışır durumda olup olmadığını yazdırmak için
if-elsekomutunu kullanın. - Bir istisna oluşması durumunda, kodu
foreachiçinetry-catchile ekleyin.
.Ping Sınıfını kullanın:
$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
try {
$pingComputer = New-Object System.Net.NetworkInformation.Ping
$response = $pingComputer.Send($computer)
if ($response. Status -eq "Success") {
Write-Host "$computer is up"
} else {
Write-Host "$computer is down"
}
} catch {
Write-Host "$computer is down"
}
}ÇIKTI:
192.168.1.1 is up
192.168.1.2 is down
192.168.1.3 is down
192.168.1.4 is downBu kod birkaç değişiklik dışında öncekine benzer. Öncelikle System.Net.NetworkInformation.Ping sınıfına ait bir nesne oluşturmak için New-Object cmdlet'ini kullandık ve onu $pingComputer değişken. Daha sonra, argüman olarak $computer alarak bir ping isteği göndermek üzere .Send() yöntemine erişmek için bu sınıfın bir nesnesini oluşturduk.
.Send() yöntemi, verilen bilgisayara bir ICMP yankı mesajı gönderir ve o bilgisayardan karşılık gelen bir ICMP yankı yanıtı alır; bu yanıtı $response değişkenine kaydettik. Son olarak, $response.Status'un Success'e eşit olup olmadığını belirlemek için if ifadesini -eq operatörüyle birlikte kullandık. kodu >. Eğer öyleyse, hedef makinenin çalışır durumda olduğunu gösterin; aksi halde düşer. Son olarak, betiği bozmamak ve varsa istisnaları ele almak için try-catch bloğunu kullandık.
Adlarını kullanarak bilgisayarların listesine ping atmak için aynı kodu kullanalım.
.Ping Sınıfını kullanın:
$computers = Get-Content ".\computersList.txt"
foreach ($computer in $computers) {
try {
$pingComputer = New-Object System.Net.NetworkInformation.Ping
$response = $pingComputer.Send($computer)
if ($response. Status -eq "Success") {
Write-Host "$computer is up"
} else {
Write-Host "$computer is down"
}
} catch {
Write-Host "$computer is down"
}
}ÇIKTI:
DESKTOP-THATKM is up
CYBERHOST-PC is down
TAHIR-DESKTOP is downHepsi PowerShell'deki Bilgisayar Listesine nasıl ping atılacağıyla ilgili.
