Ağ değişikliklerini sürekli izlemek ve yanıtlamak için PowerShell betiği


0

Şu anda, varsayılan bağlantıyı kontrol eden ve varsayılan komut dosyasında belirtilen değilse, VPN'e bağlanan gerçekten çok temel bir PS komut dosyası oluşturdum:

$DefaultNetworkIndex = Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Sort-Object {$_.RouteMetric+(Get-NetIPInterface -AssociatedRoute $_).InterfaceMetric} | Select-Object -First 1 -ExpandProperty InterfaceIndex
$DefaultNetwork = (Get-NetConnectionProfile -InterfaceIndex $DefaultNetworkIndex).Name

if ($DefaultNetwork -ne 'Some Connection Name') {
    Invoke-Expression 'rasdial VPN username password /phonebook:rasphone.pbk'
}

Etini çıkarmak istiyorum:

  1. sürekli ağ değişikliklerini izler ve yanıt verirken
  2. VPN çalışana kadar belirtilmemiş bir ağdaysa herhangi bir ağ erişimini engelleyin

Ancak Google-fu'm yukarıdaki noktaları yapmamı sağlayacak bir yol bulamadı. Onları başarmama izin verecek herhangi bir işaretçi (PS için bazı ağ kütüphanesi, belki de?) Çok hoş olurdu.

Yanıtlar:


0

Bunu yapmanın 2 yolunu görüyorum.

Biri sürekli olarak bir PowerShell betiği çalıştırıyor, bu yüzden her N saniyede bir döngüdeki değiştirilmiş ağ koşullarını kontrol ediyorsunuz (boşta kalma komutunu kullanarak).

Bir diğeri ve muhtemelen daha iyi bir komut dosyası başlangıç ​​Windows Görev Zamanlayıcı olaylarından olması. Örneğin, kullanıcı oturum açtığında veya makine başladığında kontrolleri tetikleyebilirsiniz. Ayrıca, kullanabileceğiniz ağla ilgili olayları içerebilen sistem olay günlüğündeki olayları kullanarak belirli tetikleyiciler de tanımlayabilirsiniz (bunu ağla ilgili şeyler için kullanmadım, bu yüzden kendimi kontrol etmek zorunda kaldım). Doğru tetikleyicileri kullanarak, komut dosyanızın yalnızca ağ koşulları değiştiğinde çalışmasını sağlayabilirsiniz.

Bu yardımcı olur umarım.


Peki, zaten ağ durumu değiştiğinde yukarıdakileri çalıştırmak için Görev Zamanlayıcı'yı kullanıyorum ...
Oxwivi

Oh, bence PS ile yapabileceğin tek şey bu. Ağ özelliklerini gerçek zamanlı olarak izleyen yerel bir hizmet olarak yeniden yazmanın dışında.
jurgenb 27:15

...
PS'yi

1
Beni yanlış anlama. PS çok güçlü bir betik dilidir. Ancak bu, bir Windows hizmetini (hatta olabilir) veya bir masaüstü uygulamasında yazmak isteyeceğiniz bir şey değildir. Herhangi bir .NET nesnesine PS'den de erişebilirsiniz, böylece bir .NET uygulamasında da hemen hemen her şeyi yapabilirsiniz. Hepsini bir komut dosyasında yazmak oldukça sıkıcı. İş için doğru aracı bulmakla ilgili ve bazen PS doğru araç değil.
jurgenb 27:15
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.