Windows가 Windows 업데이트가있는 경우 다운로드/설치 준비가되었는지 감지하는 가장 좋은 방법?
-
02-07-2019 - |
문제
특히 Windows 2000/xp에 관심이 있지만 Vista/7도 흥미로울 것입니다 (다른 경우).
나는 배치 파일을 예약하거나 매일 동등한 작업 라인을 따라 생각하고있었습니다.
편집 : 죄송합니다. 더 많은 정보를 제공해야했습니다. 이 질문은 수동으로 업데이트를 적용하는 10 개의 기계와 관련이 있습니다. 프로그래밍 방식으로 업데이트를 설치하고 싶지는 않지만 배치 또는 스크립트를 사용하여 다운로드/설치 준비가 된 업데이트가 있는지 확인하십시오 (예 : 시스템 트레이의 업데이트 방패 아이콘이이를 나타냅니다). 감사.
해결책 6
결국, Windows SU 옵션이 아니므로 배치 파일에서 다음을 사용하고 있습니다. Activestate ActivePerl (권장) :
perl -nle "print $ _ m/업데이트가 감지 된 경우/i"<c : windows windowsupdate.log
이것은 조잡하거나 더러워 질 수 있으며 앞으로는 깨질 수 있지만 현재 필요한 작업을 수행합니다.
모든 아이디어에 감사드립니다.
다른 팁
당신은 사용할 수 있습니다 WUApiLib
:
UpdateSessionClass session = new UpdateSessionClass();
IUpdateSearcher search = session.CreateUpdateSearcher();
ISearchResult result = search.Search("IsInstalled=0 and IsPresent=0 and Type='Software'");
int numberOfUpdates = result.Updates.Count - 1;
Log.Debug("Found " + numberOfUpdates.ToString() + " updates");
UpdateCollection updateCollection = new UpdateCollection();
for (int i = 0; i < numberOfUpdates; i++)
{
IUpdate update = result.Updates[i];
if (update.EulaAccepted == false)
{
update.AcceptEula();
}
updateCollection.Add(update);
}
if (numberOfUpdates > 0)
{
UpdateCollection downloadCollection = new UpdateCollection();
for (int i = 0; i < updateCollection.Count; i++)
{
downloadCollection.Add(updateCollection[i]);
}
UpdateDownloader downloader = session.CreateUpdateDownloader();
downloader.Updates = downloadCollection;
IDownloadResult dlResult = downloader.Download();
if (dlResult.ResultCode == OperationResultCode.orcSucceeded)
{
for (int i = 0; i < downloadCollection.Count; i++)
{
Log.Debug(string.Format("Downloaded {0} with a result of {1}", downloadCollection[i].Title, dlResult.GetUpdateResult(i).ResultCode));
}
UpdateCollection installCollection = new UpdateCollection();
for (int i = 0; i < updateCollection.Count; i++)
{
if (downloadCollection[i].IsDownloaded)
{
installCollection.Add(downloadCollection[i]);
}
}
UpdateInstaller installer = session.CreateUpdateInstaller() as UpdateInstaller;
installer.Updates = installCollection;
IInstallationResult iresult = installer.Install();
if (iresult.ResultCode == OperationResultCode.orcSucceeded)
{
updated = installCollection.Count.ToString() + " updates installed";
for (int i = 0; i < installCollection.Count; i++)
{
Log.Debug(string.Format("Installed {0} with a result of {1}", installCollection[i].Title, iresult.GetUpdateResult(i).ResultCode));
}
if (iresult.RebootRequired == true)
{
ManagementClass mcWin32 = new ManagementClass("Win32_OperatingSystem");
foreach (ManagementObject shutdown in mcWin32.GetInstances())
{
shutdown.Scope.Options.EnablePrivileges = true;
shutdown.InvokeMethod("Reboot", null);
}
}
}
Windows SU 네트워크의 여러 기계에 매우 잘 작동합니다.
"가장 쉬운"방법은 Windows 업데이트를 야간에 발생하도록 설정하고 사용 가능한 경우 업데이트를 다운로드 한 다음 시스템 트레이에 업데이트 방패 아이콘을 넣는 것입니다. 아이콘이 있는지 확인하기 위해 트레이를 한눈에 볼 수 있습니다.
또한 Windows를 설정하여 업데이트를 밤에 확인한 다음 지정된 시간에 다운로드하여 설치할 수도 있습니다.
Mdsindzeleta가 말한 것과 관련하여 - 프로그램적으로 진행하는 것은 아마도 최상의 솔루션이 아닐 것입니다. Windows XP에 내장 된 기능을 사용하여 업데이트를 다운로드하고 설치합니다. Vista에 비슷한 기능이 있다고 가정합니다.
Bits 서비스를 사용하여 Windows 업데이트가 다운로드된다고 생각합니다. Windows 지원 도구에서 찾은 BitsAdmin.exe를 사용할 수 있습니다. 명령 줄에서 bitsadmin.exe /list를 실행할 수 있으며 비트 작업 상태를 볼 수 있습니다. (즉, 다운로드 진행 상황, 직무 이름, 직무 상태)