none
Günlük Ve Saat Başı Çalışan Program RRS feed

  • Soru

  • Herkese iyi günler.

    Yapmak istediğim işlem bir txt dosyasındaki ip numaralarını sıra ile dolaşmak her ip için bazı console komutları çalıştırmak. 

    İşlem sırası

    İşlemler Hergün ve her saat tekrar edecek.

    Txt dosyasında bulunan her satır için sırayla işlem yapılacak. 

    Txt dosyasındaki 1. ip deki işlemler yapılınca 2. ip 3.ip vs devam edilecek.

    tüm ipler kontrol edilince alınan tüm her sonuç başka bir txt dosyasına aktarılacak. 

    İhtiyacım olan gün ve saat döngüsünün oluşturabilmek. 

    Yardımlarınız için teşekkür ederim 

    11 Nisan 2019 Perşembe 08:57

Yanıtlar

  • Kabaca şöyle bişey yapabilirsiniz;

    public enum KomutYöneticisiDurumları
    {
        Beklemede, Başladı
    }
    static class IPKomutYöneticisi
    {
            private static List<IPAddress> IPAdresleri = new List<IPAddress>() ;
    	public static KomutYöneticisiDurumları Durum { get; private set; } = KomutYöneticisiDurumları.Beklemede;
    	
    	public static void Oku(){
    		IPAdresleri = File.ReadAllLines("dosya/yolu/adresler.txt").Select(p=> IPAddress.Parse(p)).ToList();
    	}
    	
    	public static void Başla(){
    		Durum = KomutYöneticisiDurumları.Başladı;
    		KomutlarıGönder();
    	}
    	
    	public static void Durdur(){
    		Durum = KomutYöneticisiDurumları.Beklemede;
    	}
    	
    	private async static void KomutlarıGönder()
    	{
    		await Task.Delay(TimeSpan.FromHours(1)).ContinueWith(_=>{
    		IPAdresleri.ForEach(p=>{
    		Task.Run(()=>{
    			//p ip adresine komut gönderen kodlar buraya
    			});
    		});
    		if(Durum == KomutYöneticisiDurumları.Başladı)
    		    KomutlarıGönder();
    		});
    	}
    }


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com



    11 Nisan 2019 Perşembe 10:00
    Moderatör
  • Fatih;

    Yukarıda verdiğim örnek saat başı, listedeki tüm IP adreslerine kodları aynı anda gönderiyor. Eğer sıra ile tek tek göndermesini istersen;

    IPAdresleri.ForEach(p=>{
    	Task.Run(()=>{
    		//p ip adresine komut gönderen kodlar buraya
    	});
    });
    
    olan bu kısmı;
    
    IPAdresleri.ForEach(p=>{
      //p ip adresine komut gönderen kodlar buraya
    });

    olarak değiştirmen yeterli.
    Yalnız!: Lisedeki son IP ye komut gönderilip işlemin bitiminden itibaren bir saat sonra baştan başlar.
    Tam bir saat sonra olmasını istersen if bloğunu ForEach'ın üzerine alabilirsin.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com



    11 Nisan 2019 Perşembe 11:29
    Moderatör

Tüm Yanıtlar

  • Kabaca şöyle bişey yapabilirsiniz;

    public enum KomutYöneticisiDurumları
    {
        Beklemede, Başladı
    }
    static class IPKomutYöneticisi
    {
            private static List<IPAddress> IPAdresleri = new List<IPAddress>() ;
    	public static KomutYöneticisiDurumları Durum { get; private set; } = KomutYöneticisiDurumları.Beklemede;
    	
    	public static void Oku(){
    		IPAdresleri = File.ReadAllLines("dosya/yolu/adresler.txt").Select(p=> IPAddress.Parse(p)).ToList();
    	}
    	
    	public static void Başla(){
    		Durum = KomutYöneticisiDurumları.Başladı;
    		KomutlarıGönder();
    	}
    	
    	public static void Durdur(){
    		Durum = KomutYöneticisiDurumları.Beklemede;
    	}
    	
    	private async static void KomutlarıGönder()
    	{
    		await Task.Delay(TimeSpan.FromHours(1)).ContinueWith(_=>{
    		IPAdresleri.ForEach(p=>{
    		Task.Run(()=>{
    			//p ip adresine komut gönderen kodlar buraya
    			});
    		});
    		if(Durum == KomutYöneticisiDurumları.Başladı)
    		    KomutlarıGönder();
    		});
    	}
    }


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com



    11 Nisan 2019 Perşembe 10:00
    Moderatör
  • Kabaca şöyle bişey yapabilirsiniz;

    public enum KomutYöneticisiDurumları
    {
        Beklemede, Başladı
    }
    static class IPKomutYöneticisi
    {
            private static List<IPAddress> IPAdresleri = new List<IPAddress>() ;
    	public static KomutYöneticisiDurumları Durum { get; private set; } = KomutYöneticisiDurumları.Beklemede;
    	
    	public static void Oku(){
    		IPAdresleri = File.ReadAllLines("dosya/yolu/adresler.txt").Select(p=> IPAddress.Parse(p)).ToList();
    	}
    	
    	public static void Başla(){
    		Durum = KomutYöneticisiDurumları.Başladı;
    		KomutlarıGönder();
    	}
    	
    	public static void Durdur(){
    		Durum = KomutYöneticisiDurumları.Beklemede;
    	}
    	
    	private async static void KomutlarıGönder()
    	{
    		await Task.Delay(TimeSpan.FromHours(1)).ContinueWith(_=>{
    		IPAdresleri.ForEach(p=>{
    		Task.Run(()=>{
    			//p ip adresine komut gönderen kodlar buraya
    			});
    		});
    		if(Durum == KomutYöneticisiDurumları.Başladı)
    		    KomutlarıGönder();
    		});
    	}
    }



    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    Önay Hocam Teşekkür ederim

    Yapmaya çalıştığım şey cisco switchlere bir script. Bu script ile text dosyasından aldığım ip adresine ilişkin console komutlarını çalıştırmak. switcden aldığım cevapları bir txt dosyasında saklamak. Ve tüm bunları hergün her saat başı tekrar etmek. 

    Bir de kaynak dosyamdaki her satırdaki işlemi tek tek yapmak. Örnek olarak 

    20 satırım var.

    Mesela saat 13:00 de Bu kod. kaynak.txt teki 1. satırdaki ipyi alacak ilgili console kodlarını çalıştıracak

    2. satıra geçecek. console kodlarını çalıştıracak

    3. satıra geçecek. vs.

    20 satırdaki ipler bitince saat 14:00 de yeniden

    1. satırdaki ipden başlayacak

    çalışacak

    Yardımlarınız için teşekkür ederim. 


    11 Nisan 2019 Perşembe 10:38
  • Fatih;

    Yukarıda verdiğim örnek saat başı, listedeki tüm IP adreslerine kodları aynı anda gönderiyor. Eğer sıra ile tek tek göndermesini istersen;

    IPAdresleri.ForEach(p=>{
    	Task.Run(()=>{
    		//p ip adresine komut gönderen kodlar buraya
    	});
    });
    
    olan bu kısmı;
    
    IPAdresleri.ForEach(p=>{
      //p ip adresine komut gönderen kodlar buraya
    });

    olarak değiştirmen yeterli.
    Yalnız!: Lisedeki son IP ye komut gönderilip işlemin bitiminden itibaren bir saat sonra baştan başlar.
    Tam bir saat sonra olmasını istersen if bloğunu ForEach'ın üzerine alabilirsin.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com



    11 Nisan 2019 Perşembe 11:29
    Moderatör
  • Fatih;

    Yukarıda verdiğim örnek saat başı, listedeki tüm IP adreslerine kodları aynı anda gönderiyor. Eğer sıra ile tek tek göndermesini istersen;

    IPAdresleri.ForEach(p=>{
    	Task.Run(()=>{
    		//p ip adresine komut gönderen kodlar buraya
    	});
    });
    
    olan bu kısmı;
    
    IPAdresleri.ForEach(p=>{
      //p ip adresine komut gönderen kodlar buraya
    });

    olarak değiştirmen yeterli.
    Yalnız!: Lisedeki son IP ye komut gönderilip işlemin bitiminden itibaren bir saat sonra baştan başlar.
    Tam bir saat sonra olmasını istersen if bloğunu ForEach'ın üzerine alabilirsin.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com



    Hocam teşekkür ederim. 
    11 Nisan 2019 Perşembe 12:04