web-dev-qa-db-ja.com

WLANクライアントの自動WindowsUpdateを無効にする

インターネットにワイヤレスで接続しているときにWindows7で自動WindowsUpdateを無効にする方法を探しています。

クライアントはすべて2008R2ドメインコントローラーに接続されています。

簡単なグーグル検索をして、私は何も見つけることができませんでした。

私が推測するこれを達成する方法がなければなりません。

レジストリキー、またはこれを行うのに役立つグループポリシーハックを知っている人はいますか?

ありがとう

1
Master Azazel

たぶん、この高速にハッキングされたが本当に簡単なC#コードを使用できます。これを、ターゲットマシンに展開される(GPOを介して)独自の「サービス」に配置することをお勧めします。

コードは何をしますか:「NetworkInformation.NetworkAddressChanged」にイベントハンドラーを作成します。これは、ネットワークインターフェイス上の何かが変更された場合(たとえば、WIFIが非アクティブ化された、IPアドレスが変更された、ラップトップがイーサネットに配置された場合)に常にトリガーされます。次に、少なくとも1つのイーサネットネットワークインターフェイスが稼働しているかどうかを確認します。稼働している場合は、「Windows Update」サービスを開始します。稼働していない場合は、「WindowsUpdate」サービスを停止します。

namespace WindowsUpdateLANOnly
{
    class Program
    {
        static void Main(string[] args)
        {
            //NetworkInformation from reference: System.Net.NetworkInformation
            NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(AddressChangedCallback);
            Console.WriteLine("Listening for address changes. Press any key to exit.");
            Console.ReadLine();
        }

        private static void AddressChangedCallback(object sender, EventArgs e)
        {
            //handle only events from the ethernet network interface
            var adapters = NetworkInterface.GetAllNetworkInterfaces().Where(p => p.NetworkInterfaceType == NetworkInterfaceType.Ethernet);
            //check if we have at least one ethernet network interface online
            bool isOnLAN = false;
            foreach (NetworkInterface ethernetNetwork in adapters)
            {
                Console.WriteLine("   {0} is {1}", ethernetNetwork.Name, ethernetNetwork.OperationalStatus);
                if (ethernetNetwork.OperationalStatus == OperationalStatus.Up)
                {
                    isOnLAN = true;
                }
            }
            //deactivate or activate the windows update service
            WindowsUpdateService(isOnLAN);
        }

        private static void WindowsUpdateService(bool start)
        {   //ServiceController from reference: System.ServiceProcess
            ServiceController sc = new ServiceController("Windows Update");

            Console.WriteLine("Try to {0} the windows update service", start?"Activate":"Deactivate");
            if (start) //should start
            {
                if(sc.Status.Equals(ServiceControllerStatus.Stopped) ||
                    sc.Status.Equals(ServiceControllerStatus.StopPending))
                {
                    sc.Start();
                    //var timeout = new TimeSpan(0, 0, 5); // 5 seconds
                    //sc.WaitForStatus(ServiceControllerStatus.Running, timeout);
                    Console.WriteLine("Windows update service started");
                }
            }
            else //should stop
            {
                if (sc.Status.Equals(ServiceControllerStatus.Running) ||
                    sc.Status.Equals(ServiceControllerStatus.StartPending))
                {
                    sc.Stop();
                    //var timeout = new TimeSpan(0, 0, 5); // 5 seconds
                    //sc.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
                    Console.WriteLine("Windows update service stopped");
                }
            }
        }
    }
}

どう思いますか?

0
dataCore

どれだけ効率的かはわかりませんが、WLANアダプターを介してネットワーク接続(カードが有効になっている、IPアドレスを取得している)を実行およびチェックするスクリプトを修正して、WindowsUpdateサービスを停止することができます。ちょっとした考え

0
jdycus002