Microsoftの代わりにwsusやローカルフォルダを検索したい何か案は?ここに私が持っているものがありますが、これはインターネットを使用しているWindows 更新sにのみ接続します。
更新
I FOUND OUT THE ANSWER WITH THE VBS script. The ssdefault server is set by group policy. So if I apply group policy to the WUA then I was able to make automatic 更新s based on WSUS.
For the group policy steps go to: http://technet.microsoft.com/en-us/library/cc512630.aspx
Make sure that specify intranet service location is pointing to your wsus server. In our case it was
http://wsus for both the statistics and 更新 service.You also have to enable automatic 更新s like the article describes.
If you are going to use the C# code below make sure to change 更新SearchResult.Online = false; if ypu want to search WSUS instead of Online.Thanks for anybody that might have tried to answer this question.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WUApiLib;//this is required to use the Interfaces given by microsoft.
//todo check isassigned and guids for the following and include them in the search.
//http://msdn.microsoft.com/en-us/library/ff357803(VS.85).aspx
//determine the size of the 更新 in mb
namespace MSHWindows更新Agent
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Analyzing your needs");
更新sAvailable();
if (Needs更新())
{
Enable更新Services();//enables everything windows need in order to make an 更新
Install更新s(Download更新s());
}
else
{
Console.WriteLine("There are no 更新s for your computer at this time.");
}
Console.WriteLine("Press any key to finalize the process");
Console.Read();
}
//this is my first try.. I can see the need for abstract classes here...
//but at least it gives most people a good starting point.
public static void Installed更新s()
{
更新Session 更新Session = new 更新Session();
I更新Searcher 更新SearchResult = 更新Session.Create更新Searcher();
更新SearchResult.Online = true;//checks for 更新s online
ISearchResult SearchResults = 更新SearchResult.Search("IsInstalled=1 AND IsHidden=0");
//for the above search criteria refer to
//http://msdn.microsoft.com/en-us/library/windows/desktop/aa386526(v=VS.85).aspx
//Check the remakrs section
Console.WriteLine("The following 更新s are available");
foreach (I更新 x in SearchResults.更新s)
{
Console.WriteLine(x.Title);
}
}
public static void 更新sAvailable()
{
更新Session 更新Session = new 更新Session();
I更新Searcher 更新SearchResult = 更新Session.Create更新Searcher();
更新SearchResult.Online = true;//checks for 更新s online
ISearchResult SearchResults = 更新SearchResult.Search(
"IsInstalled=0 AND IsPresent=0 and IsAssigned=1 AND CategoryIDs contains 'E6CF1350-C01B-414D-A61F-263D14D133B4' OR CategoryIDs contains '0FA1201D-4330-4FA8-8AE9-B877473B6441' ");
//for the above search criteria refer to
//http://msdn.microsoft.com/en-us/library/windows/desktop/aa386526(v=VS.85).aspx
//Check the remakrs section
foreach (I更新 x in SearchResults.更新s)
{
Console.WriteLine(x.Title);
}
}
public static bool Needs更新()
{
更新Session 更新Session = new 更新Session();
I更新Searcher 更新SearchResult = 更新Session.Create更新Searcher();
更新SearchResult.Online = true;//checks for 更新s online
ISearchResult SearchResults = 更新SearchResult.Search("IsInstalled=0 AND IsPresent=0 and IsAssigned=1 AND CategoryIDs contains 'E6CF1350-C01B-414D-A61F-263D14D133B4' OR CategoryIDs contains '0FA1201D-4330-4FA8-8AE9-B877473B6441'");
//for the above search criteria refer to
//http://msdn.microsoft.com/en-us/library/windows/desktop/aa386526(v=VS.85).aspx
//Check the remakrs section
if (SearchResults.更新s.Count > 0)
return true;
else return false;
}
public static 更新Collection Download更新s()
{
更新Session 更新Session = new 更新Session();
I更新Searcher Search更新s = 更新Session.Create更新Searcher();
ISearchResult 更新SearchResult = Search更新s.Search("IsInstalled=0 AND IsPresent=0 and IsAssigned=1 AND CategoryIDs contains 'E6CF1350-C01B-414D-A61F-263D14D133B4' OR CategoryIDs contains '0FA1201D-4330-4FA8-8AE9-B877473B6441'");
更新Collection 更新Collection = new 更新Collection();
//Accept Eula code for each 更新
for (int i = 0; i < 更新SearchResult.更新s.Count; i++)
{
I更新 更新s = 更新SearchResult.更新s[i];
if (更新s.EulaAccepted == false)
{
更新s.AcceptEula();
}
更新Collection.Add(更新s);
}
//Accept Eula ends here
//if it is zero i am not sure if it will trow an exception -- I havent tested it.
if (更新SearchResult.更新s.Count > 0)
{
更新Collection DownloadCollection = new 更新Collection();
更新Downloader Downloader = 更新Session.Create更新Downloader();
for (int i = 0; i < 更新Collection.Count; i++)
{
DownloadCollection.Add(更新Collection[i]);
}
Downloader.更新s = DownloadCollection;
Console.WriteLine("Downloading 更新s... This may take several minutes.");
IDownloadResult DownloadResult = Downloader.Download();
更新Collection InstallCollection = new 更新Collection();
for (int i = 0; i < 更新Collection.Count; i++)
{
if (DownloadCollection[i].IsDownloaded)
{
InstallCollection.Add(DownloadCollection[i]);
}
}
Console.WriteLine("Download Finished");
return InstallCollection;
}
else
return 更新Collection;
}
public static void Install更新s(更新Collection Downloaded更新s)
{
Console.WriteLine("Installing 更新s now...");
更新Session 更新Session = new 更新Session();
更新Installer InstallAgent = 更新Session.Create更新Installer() as 更新Installer;
InstallAgent.更新s = Downloaded更新s;
//Starts a synchronous installation of the 更新s.
//http://msdn.microsoft.com/en-us/library/windows/desktop/aa386491(v=VS.85).aspx#methods
if (Downloaded更新s.Count > 0)
{
IInstallationResult InstallResult = InstallAgent.Install();
if (InstallResult.ResultCode == OperationResultCode.orcSucceeded)
{
Console.WriteLine("更新s installed succesfully");
if (InstallResult.RebootRequired == true)
{
Console.WriteLine("Reboot is required for one of more 更新s.");
}
}
else
{
Console.WriteLine("更新s failed to install do it manually");
}
}
else
{
Console.WriteLine("The computer that this script was executed is up to date");
}
}
public static void Enable更新Services()
{
IAutomatic更新s 更新s = new Automatic更新s();
if (!更新s.ServiceEnabled)
{
Console.WriteLine("Not all 更新s services where enabled. Enabling Now" + 更新s.ServiceEnabled);
更新s.EnableService();
Console.WriteLine("Service enable success");
}
}
}
}
次のスクリプトを実行すると、WUAの構成を決定するのに役立ちます
'---------------------START-----------------------
' Einstellungen für die automatischen 更新s
' http://www.wsus.de/
' Version 1.05.04.1
' Translated quick and dirty into English Marco Biagini
' [email protected]
'--------------------------------------------
On Error Resume Next
Set objWshNet = CreateObject("Wscript.Network")
const HKCU = &H80000001
const HKLM = &H80000002
strDefComputer = lcase(objWshNet.ComputerName)
Set oArgs = WScript.Arguments
If oArgs.Count = 0 Then
strComputer = InputBox("Please enter the name or IP address of the Computer that you want to check WSUS settings", "Automatic 更新s", strDefComputer)
Else
strComputer = oArgs(0)
End If
If strComputer = "" Then
WScript.Quit
End if
strComputer = lcase(strComputer)
if left(strComputer,2)="\\" then
strComputer=right(strComputer,(len(strComputer)-2))
end if
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
If Err.Number <> 0 Then
msgbox "Unable to connect to:" & VBCRLF & VBCRLF & " " & strComputer & VBCRLF, vbCritical, "Communication Error"
WScript.Quit
End If
Resultmsg = "**** Results of WUA Settings ****" & VBCRLF & VBCRLF
strMsg = "No Auto 更新: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "NoAuto更新"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg & GetNoAuto更新(dwValue) & VBCRLF & VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Automatic 更新s are not configured" & VBCRLF & VBCRLF
End If
strMsg = "Use WU Server: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "UseWUServer"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg & GetUseWUServer(dwValue) & VBCRLF
If dwValue = "1" Then
strMsg = " - WSUS Server: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新"
strValueName = "WUServer"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetStringValue HKLM,strKeyPath,strValueName,strValue
Resultmsg = Resultmsg & strMsg & strValue & VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Automatic 更新s are not configured" & VBCRLF
End If
strMsg = " - WU Status Server: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新"
strValueName = "WUStatusServer"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetStringValue HKLM,strKeyPath,strValueName,strValue
Resultmsg = Resultmsg & strMsg & strValue & VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Automatic 更新s are not configured" & VBCRLF
End If
Else
Resultmsg = Resultmsg & VBCRLF
End If
Else
Resultmsg = Resultmsg & strMsg & "Automatic 更新s are not configured" & VBCRLF
Resultmsg = Resultmsg & " - Client configured to receive 更新s from windows更新.microsoft.com" & VBCRLF
End If
strMsg = " - TargetGroup: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新"
strValueName = "TargetGroup"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetStringValue HKLM,strKeyPath,strValueName,strValue
Resultmsg = Resultmsg & strMsg & strValue & VBCRLF & VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Value not configured" & VBCRLF & VBCRLF
End If
strMsg = "AU Options: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "AUOptions"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg & GetAUOptions(dwValue) & VBCRLF
If dwValue = "4" Then
strMsg = " - Scheduled Install Day: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "ScheduledInstallDay"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg & getday(dwValue) & VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Value not configured" & VBCRLF
End If
strMsg = " - Planned Installation Time: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "ScheduledInstallTime"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg & dwValue &":00 - 24 hours 4:00 is 4 AM, 16:00 is 4 PM" & VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Value not configured" & VBCRLF
End If
Else
Resultmsg = Resultmsg & VBCRLF
End If
Else
Resultmsg = Resultmsg & strMsg & "Value is not configured" & VBCRLF
strMsg = " - Benutzerdefinierte Einstellung: "
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Windows更新\Auto 更新"
strValueName = "AUOptions"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg & GetAUOptions(dwValue) & VBCRLF
If dwValue = "4" Then
strMsg = " - ScheduledInstallDay: "
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Windows更新\Auto 更新"
strValueName = "ScheduledInstallDay"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg & getday(dwValue) & VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Automatic 更新s are not configured" & VBCRLF
End If
strMsg = " - ScheduledInstallTime: "
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Windows更新\Auto 更新"
strValueName = "ScheduledInstallTime"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg & dwValue &":00" & VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Automatic 更新s are not configured" & VBCRLF
End If
Else
Resultmsg = Resultmsg & VBCRLF
End If
Else
Resultmsg = Resultmsg & strMsg & "Not configured" & VBCRLF
End If
End If
strMsg = " - NoAUShutdownOption: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "NoAUShutdownOption"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg & GetNoAUShutdownOption(dwValue) & VBCRLF & VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Value not configured" & VBCRLF & VBCRLF
End If
strMsg = "AutoInstallMinor更新s: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "AutoInstallMinor更新s"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg & GetAutoInstallMinor更新s(dwValue) & VBCRLF & VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Value is not configured" & VBCRLF & VBCRLF
End If
strMsg = "DetectionFrequency: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "DetectionFrequency"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg &"Every " & dwValue &" Hours to search for 更新s"& VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Value is not configured"& VBCRLF
End If
strMsg = "RebootRelaunchTimeout: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "RebootRelaunchTimeout"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg & dwValue &" Minutes to wait until system restart"& VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Value is not configured" & VBCRLF
End If
strMsg = "RebootWarningTimeout: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "RebootWarningTimeout"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg & dwValue &" Minutes wait until system restart"& VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Value not configured" & VBCRLF
End If
strMsg = "NoAutoRebootWithLoggedOnUsers: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "NoAutoRebootWithLoggedOnUsers"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
Resultmsg = Resultmsg & strMsg & GetNoAutoReboot(dwValue) & VBCRLF
Else
Resultmsg = Resultmsg & strMsg & "Value not configured" & VBCRLF
Resultmsg = Resultmsg & " - Default: User will be presented with a 5 minutes countdown" & VBCRLF
End If
strMsg = "RescheduleWaitTime: "
strKeyPath = "Software\Policies\Microsoft\Windows\Windows更新\AU"
strValueName = "RescheduleWaitTime"
If RegValueExists(strKeyPath, strValueName) Then
oReg.GetDWORDValue HKLM,strKeyPath,strValueName,dwValue
If dwValue = "0" Then Resultmsg = Resultmsg & strMsg & "Value not configured: " & dwValue & VBCRLF & VBCRLF End If
If dwValue = "1" Then Resultmsg = Resultmsg & strMsg & dwValue &" Minute" & VBCRLF & VBCRLF End If
If dwValue > "1" and dwValue < "61" Then Resultmsg = Resultmsg & strMsg & dwValue &" Minutes" & VBCRLF & VBCRLF End If
If dwValue > "60" Then Resultmsg = Resultmsg & strMsg & "Invalid Value" & dwValue & VBCRLF & VBCRLF End If
Else
Resultmsg = Resultmsg & strMsg & "Not Configured" & VBCRLF & VBCRLF
End If
Resultmsg = Resultmsg & "http://www.wsus.de" & VBCRLF & "Die Infoseite zu Windows Server 更新s Services"
MsgBox Resultmsg,,strComputer
set oReg = nothing
Function GetNoAuto更新(Index)
Select Case Index
Case 0 GetNoAuto更新 = "0 - Auto 更新 applied by GPO"
Case 1 GetNoAuto更新 = "1 - No Auto 更新 is applied by GPO"
Case Else GetNoAuto更新 = "Invalid Entry"
End select
End Function
Function GetUseWUServer(Index)
Select Case Index
Case 0 GetUseWUServer = "0 - Client is configured to receive 更新s from windows更新.microsoft.com"
Case 1 GetUseWUServer = "1 - Client is configured to receive 更新s from your WSUS Server"
Case Else GetUseWUServer = "Invalid Entry"
End select
End Function
Function GetDay(Index)
Select Case Index
Case "0" GetDay = "Every Day"
Case "1" GetDay = "Every Sunday"
Case "2" GetDay = "Every Monday"
Case "3" GetDay = "Every Tuesday"
Case "4" GetDay = "Every Wednesday"
Case "5" GetDay = "Every Thursday"
Case "6" GetDay = "Every Friday"
Case "7" GetDay = "Every Saturday"
Case Else GetDay = "Invalid Entry"
End select
End Function
Function GetAUOptions(Index)
Select Case Index
Case "0" GetAUOptions = "0"
Case "1" GetAUOptions = "1 - Deaktiviert in den Benutzereinstellungen"
Case "2" GetAUOptions = "2 - Notify before download and Install."
Case "3" GetAUOptions = "3 - Autom. Download, notify before installation."
Case "4" GetAUOptions = "4 - Autom. Download, install according to GPO settings."
Case "5" GetAUOptions = "5 - Allow Local Administator installation and manual configuration."
case Else GetAUOptions = "Invalid Entry"
End select
End Function
Function GetNoAUShutdownOption(Index)
Select Case Index
Case 0 GetNoAUShutdownOption = "0 - '更新s are being installed and system will be restarted' user ill be notified"
Case 1 GetNoAUShutdownOption = "1 - '更新s are being installed and system will be restarted' user will NOT be notified"
Case Else GetNoAUShutdownOption = "Invalid Entry"
End select
End Function
Function GetAutoInstallMinor更新s(Index)
Select Case Index
Case 0 GetAutoInstallMinor更新s = "0 - Automatic 更新s are not immediately installed"
Case 1 GetAutoInstallMinor更新s = "1 - Automatic 更新s are immediately installed"
Case Else GetAutoInstallMinor更新s = "Invalid Entry"
End select
End Function
Function GetNoAutoReboot(Index)
Select Case Index
Case "0" GetNoAutoReboot = "0 - User Countdown of 5 Minutes"
Case "1" GetNoAutoReboot = "1 - User will be notified before a system restart"
case Else GetNoAutoReboot = "Invalid Entry"
End select
End Function
Function RegValueExists(sRegKey, sRegValue)
sRegKey = Trim(sRegKey)
sRegValue = LCase(Trim(sRegValue))
' init value
RegValueExists = False
If oReg.EnumValues(HKLM, sRegKey, aValueNames, aValueTypes) = 0 Then
If Not IsNull(aValueNames) Then
For i = 0 To UBound(aValueNames)
If LCase(aValueNames(i)) = sRegValue Then
RegValueExists = True
End If
Next
End If
End If
End Function
Function RegKeyExists(sRegKey)
sRegKey = Trim(sRegKey)
If oReg.EnumValues(HKLM, sRegKey, aValueNames, aValueTypes) = 0 Then
RegKeyExists = True
Else
RegKeyExists = False
End If
End Function
'---------------------END-----------------------