Ik ben bezig met een update scriptje voor een paar computers. Om bepaalde redenen wil ik de computers alleen maar laten updaten op momenten dat het mij uitkomt.
Ik heb van MSDN een sample scriptje opgehaald die voor mij de updates kan ophalen, aangepast naar mijn eisen, daarna trigger ik dit scriptje via psexec op de diverse computers. (scriptje staat hieronder)
Het script start ik als volgt:
psexec \\computer1.domein.local "c:\upd.bat" -u \\domein.local\administrator -p PassWord
Upd.bat start alleen maar update.vbs op. (cscript.exe c:\update.vbs)
Het gekke is dat het vbs script wel goed gaat als ik het met de hand opstart terwijl ik achter de computer zit, maar niet als ik het met PSexec vanaf een andere computer opstart,
Het start dan wel met het uitzoeken van de updates, maar stopt dan na "Downloading updates..." (Regel 56, hieronder)
Ik heb al het admin account toegevoegd aan PSexec, vermoedend dat dat het probleem is, maar dat hielp ook niet.
Het update script update.vbs
Ik heb van MSDN een sample scriptje opgehaald die voor mij de updates kan ophalen, aangepast naar mijn eisen, daarna trigger ik dit scriptje via psexec op de diverse computers. (scriptje staat hieronder)
Het script start ik als volgt:
psexec \\computer1.domein.local "c:\upd.bat" -u \\domein.local\administrator -p PassWord
Upd.bat start alleen maar update.vbs op. (cscript.exe c:\update.vbs)
Het gekke is dat het vbs script wel goed gaat als ik het met de hand opstart terwijl ik achter de computer zit, maar niet als ik het met PSexec vanaf een andere computer opstart,
Het start dan wel met het uitzoeken van de updates, maar stopt dan na "Downloading updates..." (Regel 56, hieronder)
Ik heb al het admin account toegevoegd aan PSexec, vermoedend dat dat het probleem is, maar dat hielp ook niet.
Het update script update.vbs
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
| Set updateSession = CreateObject("Microsoft.Update.Session")
updateSession.ClientApplicationID = "MSDN Sample Script"
Set updateSearcher = updateSession.CreateUpdateSearcher()
WScript.Echo "Searching for updates..." & vbCRLF
Set searchResult = _
updateSearcher.Search("IsInstalled=0 and Type='Software' and IsHidden=0")
WScript.Echo "List of applicable items on the machine:"
For I = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
WScript.Echo I + 1 & "> " & update.Title
Next
If searchResult.Updates.Count = 0 Then
WScript.Echo "There are no applicable updates."
WScript.Quit
End If
WScript.Echo vbCRLF & "Creating collection of updates to download:"
Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")
For I = 0 to searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
addThisUpdate = false
If update.InstallationBehavior.CanRequestUserInput = true Then
WScript.Echo I + 1 & "> skipping: " & update.Title & _
" because it requires user input"
Else
If update.EulaAccepted = false Then
WScript.Echo I + 1 & "> note: " & update.Title & _
" has a license agreement that must be accepted:"
WScript.Echo update.EulaText
WScript.Echo "Do you accept this license agreement? (Y/N)"
update.AcceptEula()
addThisUpdate = true
Else
addThisUpdate = true
End If
End If
If addThisUpdate = true Then
WScript.Echo I + 1 & "> adding: " & update.Title
updatesToDownload.Add(update)
End If
Next
If updatesToDownload.Count = 0 Then
WScript.Echo "All applicable updates were skipped."
WScript.Quit
End If
WScript.Echo vbCRLF & "Downloading updates..."
Set downloader = updateSession.CreateUpdateDownloader()
downloader.Updates = updatesToDownload
downloader.Download()
Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")
rebootMayBeRequired = false
WScript.Echo vbCRLF & "Successfully downloaded updates:"
For I = 0 To searchResult.Updates.Count-1
set update = searchResult.Updates.Item(I)
If update.IsDownloaded = true Then
WScript.Echo I + 1 & "> " & update.Title
updatesToInstall.Add(update)
If update.InstallationBehavior.RebootBehavior > 0 Then
rebootMayBeRequired = true
End If
End If
Next
If updatesToInstall.Count = 0 Then
WScript.Echo "No updates were successfully downloaded."
WScript.Quit
End If
If rebootMayBeRequired = true Then
WScript.Echo vbCRLF & "These updates may require a reboot."
End If
WScript.Echo vbCRLF & "Would you like to install updates now? (Y/N)"
strInput ="Y"
WScript.Echo
If (strInput = "Y" or strInput = "y") Then
WScript.Echo "Installing updates..."
Set installer = updateSession.CreateUpdateInstaller()
installer.Updates = updatesToInstall
Set installationResult = installer.Install()
'Output results of install
WScript.Echo "Installation Result: " & _
installationResult.ResultCode
WScript.Echo "Reboot Required: " & _
installationResult.RebootRequired & vbCRLF
WScript.Echo "Listing of updates installed " & _
"and individual installation results:"
For I = 0 to updatesToInstall.Count - 1
WScript.Echo I + 1 & "> " & _
updatesToInstall.Item(i).Title & _
": " & installationResult.GetUpdateResult(i).ResultCode
Next
End If |
Ik maak geen fouten, ik creëer leer momenten.