SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
B A S I C PAT C H M A N A G E M E N T F O R B A S I C
S O F T W A R E
NOW FEATURING THE
LATEST VERSION
Francis Beaumier
IT Specialist
Brown County Library
515 Pine Street
Green Bay, WI 54301
Phone: 920-448-5863
beaumier_fj@co.brown.wi.us
ORGANIZATIONAL BACKGROUND
• Part of Brown County
• Use of county’s Technology Services department
• Getting new software is a process
• Public computers
• Windows machines on a physically separate and all wireless
network
• No central management
• Freezing software
• …. No updates besides Microsoft ones
STARTING POINTS
• Computers already left on weekly for Windows updates
• Windows Task Scheduler
• Public computers can talk to other public computers
• MSIs can be installed silently
• Compare-Object cmdlet
• Windows 7 computers all come with a version of Powershell
• Web server available
CLIENTS.PS1
$URL = "http://www.example.org/updates/Updater.ps1"
$Output = "C:UpdaterUpdater.ps1"
#Download the Updater.ps1 file
(New-Object System.Net.WebClient).DownloadFile($URL,$Output);
#Call the downloaded script
Powershell.exe -File $Output
$sourceFolder = "172.17.101.210updates$"
$targetFolder = "c:updates"
$sourceItem = Get-ChildItem -Path $sourceFolder
$targetItem = Get-ChildItem -Path $targetFolder
#if *Item is empty, provide empty array to make Compare-Object work.
If (-not $sourceItem) {$sourceItem = @()}
if (-not $targetItem) {$targetItem = @()}
$differentitems = Compare-Object $sourceItem $targetItem -Property Name,
LastWriteTime, Length | where { $_.SideIndicator -eq "<=" }
#Copy the items that are different to the client PC
Set-Location $sourceFolder
$differentitems | foreach {Copy-Item -Destination $targetFolder -Path $_.Name}
#Start the installation Pocess of each UpdatePackage that was copied
Set-Location $targetFolder
$differentitems | foreach { Start-Process -FilePath $_.Name -ArgumentList "/q" -Wait }
#Reboot the computer after the installs are complete
Restart-Computer
ORIGINAL UPDATER.PS1
UPDATER.PS1
$source="http://www.example.org/updates/" #web server address
$targetFolder="c:updates" #local file destination
$webClient = New-Object System.Net.WebClient
$updates = $webClient.DownloadString($source).Split("`n")
# Web server listing -> object -> array
$sourceItem= @()
foreach ($update in $updates) {
$file,$mod = $update.Split(",");
$sourceItem += New-Object –TypeName PSObject –Prop @{'Name'=$file;
'LastWriteTime'= Get-Date $mod };
}
$targetItem = Get-ChildItem -Path $targetFolder
#if targetItem is empty, provide empty array to make Compare-Object work.
if (-not $targetItem) {$targetItem = @()}
$differentitems = Compare-Object $sourceItem $targetItem -Property Name,
LastWriteTime | where { $_.SideIndicator -eq "<=" }
UPDATER.PS1 (CONTINUED)
Set-Location $targetFolder
foreach ($item in $differentitems) {
#Copy the items that are different to the client PC
$webClient.DownloadFile($source+$item.Name,
$targetFolder+$item.Name)
#Start the installation Pocess of the UpdatePackage that was copied
Start-Process -FilePath $item.Name -ArgumentList "/q /norestart" -Wait
#Change the date modified to match what the server says so that the
#compare works on the next run
(Get-Item ($targetFolder+$item.Name)).LastWriteTime=
$item.LastWriteTime
}
INDEX.PHP
<?
// set time zone so that date modified is accurate
date_default_timezone_set('America/Chicago');
$updateList = array_diff(scandir('.'), array('..', '.', 'index.php',
'error_log', 'Updater.ps1'));
foreach ($updateList as $file ) {
$out .= rawurlencode($file) . ',' .
date('Y-m-d G:i:s',filemtime ($file)) . "n";
}
print rtrim($out, "n")
?>
INDEX.PHP OUTPUT
GOOD TO GO UPDATES
• Adobe Acrobat Reader patches
• Flash
• Shockwave
SERVER INSTALLATION
1. Make a folder with Updater.ps1, index.php, and the
updates that you want.
2. Make sure
your server
has PHP, is
configured to
serve that
folder and use
index.php as
your directory
index.
CLIENT INSTALLATION
1. Set power settings
2. Create Updater and Updates folders in C:
3. Allow PowerShell to run unsigned scripts:
set-executionpolicy bypass
4. Copy Clients.ps1 to the Updater folder
5. Create a scheduled task to run the Updater during your
maintenance window.
SCHEDULING THE
UPDATER
1
2
3
4
SCHEDULING
THE UPDATER II
SCHEDULING THE UPDATER III
MSI HACKING WITH ORCA: SKYPE
• Skype MSI: http://www.skype.com/go/getskype-msi
• Orca: https://www.microsoft.com/en-
us/download/details.aspx?id=3138
• In the Property table,
• change
ProductCode to
something new.
• change
InstallUpdatesEn
abled to #0
MSI HACKING WITH ORCA:
ADOBE ACROBAT READER
• Change ECULA_ACCEPT to YES in the Property table.
ADVANCED MSI HACKING WITH ORCA:
JAVA (* THERE’S AN EASIER WAY)
• Get the .exe from the vendor. Run it but do not click
through the wizard.
• Retrieve the MSI from
%userprofile%appdataLocalLowOracleJavajre1.8.0_x
x (where xx is the update number)
• Make the following edits in Orca:
• In the CustomAction table, change the Type of installexe to 3090.
This adjusts the permissions requested by the installer.
ADVANCED MSI HACKING WITH ORCA:
JAVA II
• The changes on
the previous slide
will get you going.
The rest of these
instructions take
care of removing
previous versions.
• Make the
following edits in
Orca:
• In the InstallExecuteSequence table, change the condition for
FindRelatedProducts and RemoveExistingProducts to 1=1. This forces
those two actions to run.
ADVANCED MSI HACKING WITH ORCA:
JAVA III
• Add an entry for each version of Java you wish to uninstall in
the Upgrade table:
• UpgadeCode: you’ll need the one for your Java version
• VersionMin – 0.0.0.0 (any version ≥ 0 )
• VersionMax – leave blank to use only VersionMin as criteria
• Language – blank = any
• Attributes – a set of flags. 256 seems to work for me
• Remove – ALL means all 
• ActionProperty – a variable of your choice – must be unique and must
be added to the SecureCustomProperties variable in the Property table.
I chose FRANCIS1
HOW DO I TRACK DOWN A JAVA
UPGRADE CODE?
• If you have the MSI, open it in Orca
• Otherwise, if you have a machine with it installed:
• Go to C:WindowsInstaller
• Right click the column headings and add Authors
• Find the .msi authored by Oracle
• Open it in Orca
• Go to the Property table, and you’ll find the
UpgradeCode property.
ADVANCED MSI HACKING WITH ORCA:
JAVA IV
• Go to the property table and
add/change the following:
• JAVAUPDATE=0
• AUTOUPDATECHECK=0
• JU=0
• In SecureCustomProperties, add
your custom variables from part III
SO YOU NEED SOME MSIs?
• Make them!
• Be leery of packing software…
Firefox.ver
Firefox.mm
ROLL YOUR OWN MSI WITH MAKEMSI:
FIREFOX .
• MAKEMSI: dennisbareis.com
• Standard Firefox installer
; ProductName = Firefox
; DESCRIPTION = Install
Firefox
; Installed = WINDOWS_ALL
VERSION : 47.0.1
DATE : 19 Nov 2015
CHANGES : nothing
#define COMPANY_WANT_TO_INSTALL_DOCUMENTATION N ;; no docs
#include "ME.MMH" ;; required files
; install firefox
<$WrapInstall EXE="Firefox Setup 47.0.1.exe" Args='-ms' SeqI="<-
InstallFinalize">
; dummy component - the MSI needs to have something to install
<$Component "dummy" Create="Y" Directory_="<$AnyDir>">
<$/Component>
; filter validation errors
<$MsiValFilter "ICE71">
BROWN COUNTY LIBRARY FIREFOX
#define COMPANY_AUTO_UNINSTALL_VIA_UPGRADE_TABLE N ;;nothing to
uninst
#define COMPANY_WANT_TO_INSTALL_DOCUMENTATION N ;; no docs
#define COMPANY_REINSTALLMODE ;; leave blank to avoid validation issue
#define UISAMPLE_DISABLE_COMPLETELY Y ;; disable MSI UI customizations
#define DBG_ALL N
#include "ME.MMH" ;; required files
; do not register this installer in Add/Remove Programs
<$Table "InstallExecuteSequence">
<$RowsDelete WHERE="Action = 'PublishComponents'">
<$RowsDelete WHERE="Action = 'PublishFeatures'">
<$RowsDelete WHERE="Action = 'PublishProduct'">
<$RowsDelete WHERE="Action = 'RegisterProduct'">
<$RowsDelete WHERE="Action = 'RegisterUser'">
<$/Table>
; fast install
<$Table "Property">
<$Row Property="MSIFASTINSTALL" Value="3">
<$/Table>
BROWN COUNTY LIBRARY FIREFOX II
; install firefox
<$WrapInstall EXE="Firefox Setup 47.0.1.exe" Args='-ms' SeqI="<-
InstallFinalize">
; install BCL settings
#(
<$DirectoryTree Key="INSTALLDIR" Dir="c:program filesMozilla Firefox"
CHANGE="" PrimaryFolder="Y">
#)
<$Files "filesmoz*" DestDir="INSTALLDIR">
#(
<$DirectoryTree Dir="c:program filesMozilla Firefoxbrowser"
Key="INSTALLDIR2" CHANGE="" PrimaryFolder="Y">
#)
<$Files "filesoverride.ini" DestDir="INSTALLDIR2">
#(
<$DirectoryTree Dir="c:program filesMozilla Firefoxdefaultspref"
Key="INSTALLDIR3" CHANGE="" PrimaryFolder="Y">
#)
<$Files "fileslocal-settings.js" DestDir="INSTALLDIR3">
<$VbsCa Binary="ADRC.vbs">
<$VbsCaEntry "ADRC">
DoIt()
<$/VbsCaEntry>
<?NewLine><?NewLine>
sub DoIt()
Dim wshNetwork, fso
Set wshNetwork = CaMkObject("WScript.Network")
If InStr(wshNetwork.ComputerName,"ADRC") > 0 Then
Set fso = CaMkObject("Scripting.FileSystemObject")
If fso.FileExists("C:Program Files (x86)Mozilla Firefoxmozilla.cfg") Then
fso.DeleteFile("C:Program Files (x86)Mozilla Firefoxmozilla.cfg")
fso.MoveFile "mozilla-adrc.cfg","mozilla.cfg" ' will need full path
Else
fso.DeleteFile("C:Program FilesMozilla Firefoxmozilla.cfg")
fso.MoveFile "mozilla-adrc.cfg","mozilla.cfg" ' will need full path
End If
set fso = Nothing
End If
set wshNetwork = Nothing
end sub
<$/VbsCa>
BCLFIREFOXIII
BROWN COUNTY LIBRARY FIREFOX IV
#(
<$VbsCaSetup Binary="ADRC.vbs" Entry="ADRC" Seq="InstallFinalize-"
CONDITION=^<$CONDITION_EXCEPT_UNINSTALL>^
Type="IMMEDIATE">
#)
; ignore validation errors
<$MsiValFilter "ICE82">
AIR
• Problem: AdobeAirInstaller.exe uses an MSI internally,
so wrapping it in an MSI won’t work
• My solution: AutoIT: https://www.autoitscript.com
#RequireAdmin
#NoTrayIcon
#include <MsgBoxConstants.au3>
;MsgBox($MB_SYSTEMMODAL, "", "copying file")
FileInstall ( ".AdobeAirInstaller.exe", "c:windowstemp", 1)
;MsgBox($MB_SYSTEMMODAL, "", "installing air")
RunWait('c:windowstempAdobeAirInstaller.exe -silent' _
& ' –eulaAccepted', "", @SW_HIDE)
;MsgBox($MB_SYSTEMMODAL, "", "deleting air")
FileDelete ( "c:windowstempAdobeAirInstaller.exe" )
BATCH FILE EXAMPLE: INSTALLING
WIRELESS PROFILES
#include ..francis.mmh
; files to install
#(
<$DirectoryTree Dir="c:userslibadmindesktopwifi-profiles"
Key="INSTALLDIR" CHANGE="" PrimaryFolder="Y">
#)
<$Files "wifi-profiles*.*" DestDir="INSTALLDIR">
; script to run after installation
<$VbsCa Binary="Postflight.vbs">
<$VbsCaEntry "Postflight">
dim WshShell : Set WshShell = CaMkObject("WScript.Shell")
WshShell.Run "C:userslibadmindesktopwifi-profilesimport.bat", , TRUE
set WshShell = Nothing
<$/VbsCaEntry>
<$/VbsCa>
#(
<$VbsCaSetup Binary="Postflight.vbs" Entry="Postflight" Seq="InstallFinalize-
"
CONDITION="" Type="IMMEDIATE">
#include "OpenMsi.MMH"
<$Msi "outJava.msi" template="Java.msi">
<$Table "CustomAction">
<$Row @Where="Action='installexe'" Type="3090">
<$/Table>
<$Table "InstallExecuteSequence">
<$Row@Where="Action='FindRelatedProducts'orAction='RemoveExistingProducts'"Condition="1=1">
<$/Table>
<$Table "Upgrade">
<$RowUpgradeCode="{57BDA5C6-443C-4D65-B233-282393218045}"VersionMin="0.0.0.0"Attributes="256"
<$/Table>
<$Table "Property">
<$Row@Where="Property='SecureCustomProperties'"@SelfRef="{*}" *Value=^"FRANCIS1;"&{*}^>
<$Row Property="JAVAUPDATE" Value="0">
<$Row Property="AUTOUPDATECHECK" Value="0">
<$Row Property="JU" Value="0">
<$/Table>
<$/Msi>
<$MsiValFilter "ICE03|ICE61" Re="Y"> ; filter validation errors
JAVA THE MAKEMSI WAY
MORE POSSIBILITIES
• Different update branches
• Error checking / hashes
• Reporting
BROWN COUNTY LIBRARY’S SOFTWARE
UPDATE LIBRARY
• Adobe Air
• Adobe Flash (Active X)
• Adobe Flash (Plug-in
• Adobe Reader
• Adobe Shockwave
• Arduino
• Google Earth
• HP Universal Print Driver
• Kyocera KX Print Driver
• Mozilla Firefox
• Oracle Java
• Netloan (our PC reservation software)
• Paint.NET
• Skype
• WebEx Player
DEMO/QUESTIONS

Weitere ähnliche Inhalte

Was ist angesagt?

Automated Java Deployments With Rpm
Automated Java Deployments With RpmAutomated Java Deployments With Rpm
Automated Java Deployments With RpmMartin Jackson
 
One Click Provisioning With Enterprise Manager 12c
One Click Provisioning With Enterprise Manager 12cOne Click Provisioning With Enterprise Manager 12c
One Click Provisioning With Enterprise Manager 12cJosh Turner
 
DATABASE AUTOMATION with Thousands of database, monitoring and backup
DATABASE AUTOMATION with Thousands of database, monitoring and backupDATABASE AUTOMATION with Thousands of database, monitoring and backup
DATABASE AUTOMATION with Thousands of database, monitoring and backupSaewoong Lee
 
Build MySQL virtual enviroment
Build MySQL virtual enviromentBuild MySQL virtual enviroment
Build MySQL virtual enviromentTaras Vasylyuk
 
Learn you some Ansible for great good!
Learn you some Ansible for great good!Learn you some Ansible for great good!
Learn you some Ansible for great good!David Lapsley
 
Upgrade 11.2.0.1 gi crs to 11.2.0.2 in linux
Upgrade 11.2.0.1 gi crs to 11.2.0.2 in linuxUpgrade 11.2.0.1 gi crs to 11.2.0.2 in linux
Upgrade 11.2.0.1 gi crs to 11.2.0.2 in linuxmaclean liu
 
An Express Guide ~ Zabbix for IT Monitoring
An Express Guide ~ Zabbix for IT Monitoring An Express Guide ~ Zabbix for IT Monitoring
An Express Guide ~ Zabbix for IT Monitoring Abhishek Kumar
 
Planning and Completing an IBM Connections Upgrade
Planning and Completing an IBM Connections UpgradePlanning and Completing an IBM Connections Upgrade
Planning and Completing an IBM Connections UpgradeGabriella Davis
 
Phd tutorial hawq_v0.1
Phd tutorial hawq_v0.1Phd tutorial hawq_v0.1
Phd tutorial hawq_v0.1seungdon Choi
 
D installation manual
D installation manualD installation manual
D installation manualFaheem Akbar
 

Was ist angesagt? (10)

Automated Java Deployments With Rpm
Automated Java Deployments With RpmAutomated Java Deployments With Rpm
Automated Java Deployments With Rpm
 
One Click Provisioning With Enterprise Manager 12c
One Click Provisioning With Enterprise Manager 12cOne Click Provisioning With Enterprise Manager 12c
One Click Provisioning With Enterprise Manager 12c
 
DATABASE AUTOMATION with Thousands of database, monitoring and backup
DATABASE AUTOMATION with Thousands of database, monitoring and backupDATABASE AUTOMATION with Thousands of database, monitoring and backup
DATABASE AUTOMATION with Thousands of database, monitoring and backup
 
Build MySQL virtual enviroment
Build MySQL virtual enviromentBuild MySQL virtual enviroment
Build MySQL virtual enviroment
 
Learn you some Ansible for great good!
Learn you some Ansible for great good!Learn you some Ansible for great good!
Learn you some Ansible for great good!
 
Upgrade 11.2.0.1 gi crs to 11.2.0.2 in linux
Upgrade 11.2.0.1 gi crs to 11.2.0.2 in linuxUpgrade 11.2.0.1 gi crs to 11.2.0.2 in linux
Upgrade 11.2.0.1 gi crs to 11.2.0.2 in linux
 
An Express Guide ~ Zabbix for IT Monitoring
An Express Guide ~ Zabbix for IT Monitoring An Express Guide ~ Zabbix for IT Monitoring
An Express Guide ~ Zabbix for IT Monitoring
 
Planning and Completing an IBM Connections Upgrade
Planning and Completing an IBM Connections UpgradePlanning and Completing an IBM Connections Upgrade
Planning and Completing an IBM Connections Upgrade
 
Phd tutorial hawq_v0.1
Phd tutorial hawq_v0.1Phd tutorial hawq_v0.1
Phd tutorial hawq_v0.1
 
D installation manual
D installation manualD installation manual
D installation manual
 

Ähnlich wie Now Featuring the Latest Version!: Basic Patch Management for Basic Software

K2000 Advanced Topics
K2000 Advanced TopicsK2000 Advanced Topics
K2000 Advanced TopicsDell World
 
Project ACRN Yocto Project meta-acrn layer introduction
Project ACRN Yocto Project meta-acrn layer introductionProject ACRN Yocto Project meta-acrn layer introduction
Project ACRN Yocto Project meta-acrn layer introductionProject ACRN
 
Oracle forms and reports 11g installation on linux
Oracle forms and reports 11g installation on linuxOracle forms and reports 11g installation on linux
Oracle forms and reports 11g installation on linuxVenu Palakolanu
 
Tools and Process for Streamlining Mac Deployment
Tools and Process for Streamlining Mac DeploymentTools and Process for Streamlining Mac Deployment
Tools and Process for Streamlining Mac DeploymentTimothy Sutton
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014biicode
 
Ideal Deployment In .NET World
Ideal Deployment In .NET WorldIdeal Deployment In .NET World
Ideal Deployment In .NET WorldDima Pasko
 
24HOP Introduction to Linux for SQL Server DBAs
24HOP Introduction to Linux for SQL Server DBAs24HOP Introduction to Linux for SQL Server DBAs
24HOP Introduction to Linux for SQL Server DBAsKellyn Pot'Vin-Gorman
 
Oracle11g On Fedora14
Oracle11g On Fedora14Oracle11g On Fedora14
Oracle11g On Fedora14kmsa
 
Opscode Webinar: Cooking with Chef on Microsoft Windows
Opscode Webinar: Cooking with Chef on Microsoft WindowsOpscode Webinar: Cooking with Chef on Microsoft Windows
Opscode Webinar: Cooking with Chef on Microsoft WindowsChef Software, Inc.
 
Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)
Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)
Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)Is Antipov
 
Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...
Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...
Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...Alan Pinstein
 
MacSysAdmin Tools Smörgåsbord
MacSysAdmin Tools SmörgåsbordMacSysAdmin Tools Smörgåsbord
MacSysAdmin Tools SmörgåsbordTimothy Sutton
 
Chocolatey - making the process of installing software on windows easy as pie
Chocolatey - making the process of installing software on windows easy as pieChocolatey - making the process of installing software on windows easy as pie
Chocolatey - making the process of installing software on windows easy as pieJustin James
 
E business suite r12.2 changes for database administrators
E business suite r12.2 changes for database administratorsE business suite r12.2 changes for database administrators
E business suite r12.2 changes for database administratorsSrinivasa Pavan Marti
 
E business suite r12.2 changes for database administrators
E business suite r12.2 changes for database administratorsE business suite r12.2 changes for database administrators
E business suite r12.2 changes for database administratorsSrinivasa Pavan Marti
 

Ähnlich wie Now Featuring the Latest Version!: Basic Patch Management for Basic Software (20)

K2000 Advanced Topics
K2000 Advanced TopicsK2000 Advanced Topics
K2000 Advanced Topics
 
Project ACRN Yocto Project meta-acrn layer introduction
Project ACRN Yocto Project meta-acrn layer introductionProject ACRN Yocto Project meta-acrn layer introduction
Project ACRN Yocto Project meta-acrn layer introduction
 
Backbase CXP Manager Setup
Backbase CXP Manager SetupBackbase CXP Manager Setup
Backbase CXP Manager Setup
 
Oracle forms and reports 11g installation on linux
Oracle forms and reports 11g installation on linuxOracle forms and reports 11g installation on linux
Oracle forms and reports 11g installation on linux
 
Tools and Process for Streamlining Mac Deployment
Tools and Process for Streamlining Mac DeploymentTools and Process for Streamlining Mac Deployment
Tools and Process for Streamlining Mac Deployment
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
Ideal Deployment In .NET World
Ideal Deployment In .NET WorldIdeal Deployment In .NET World
Ideal Deployment In .NET World
 
24HOP Introduction to Linux for SQL Server DBAs
24HOP Introduction to Linux for SQL Server DBAs24HOP Introduction to Linux for SQL Server DBAs
24HOP Introduction to Linux for SQL Server DBAs
 
Oracle11g On Fedora14
Oracle11g On Fedora14Oracle11g On Fedora14
Oracle11g On Fedora14
 
Oracle11g on fedora14
Oracle11g on fedora14Oracle11g on fedora14
Oracle11g on fedora14
 
Opscode Webinar: Cooking with Chef on Microsoft Windows
Opscode Webinar: Cooking with Chef on Microsoft WindowsOpscode Webinar: Cooking with Chef on Microsoft Windows
Opscode Webinar: Cooking with Chef on Microsoft Windows
 
Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)
Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)
Automatic deployment on .NET web stack (Minsk .NET meetup 12.02.14)
 
Write php deploy everywhere
Write php deploy everywhereWrite php deploy everywhere
Write php deploy everywhere
 
Iac d.damyanov 4.pptx
Iac d.damyanov 4.pptxIac d.damyanov 4.pptx
Iac d.damyanov 4.pptx
 
Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...
Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...
Patterns and Tools for Database Versioning, Migration, Data Loading and Test ...
 
MacSysAdmin Tools Smörgåsbord
MacSysAdmin Tools SmörgåsbordMacSysAdmin Tools Smörgåsbord
MacSysAdmin Tools Smörgåsbord
 
IIS Web Ecosystem
IIS Web EcosystemIIS Web Ecosystem
IIS Web Ecosystem
 
Chocolatey - making the process of installing software on windows easy as pie
Chocolatey - making the process of installing software on windows easy as pieChocolatey - making the process of installing software on windows easy as pie
Chocolatey - making the process of installing software on windows easy as pie
 
E business suite r12.2 changes for database administrators
E business suite r12.2 changes for database administratorsE business suite r12.2 changes for database administrators
E business suite r12.2 changes for database administrators
 
E business suite r12.2 changes for database administrators
E business suite r12.2 changes for database administratorsE business suite r12.2 changes for database administrators
E business suite r12.2 changes for database administrators
 

Mehr von WiLS

1:1 Community Interview Examples & Tips for Libraries
1:1 Community Interview Examples & Tips for Libraries1:1 Community Interview Examples & Tips for Libraries
1:1 Community Interview Examples & Tips for LibrariesWiLS
 
Using Data to Help Tell Your Library's Story
Using Data to Help Tell Your Library's StoryUsing Data to Help Tell Your Library's Story
Using Data to Help Tell Your Library's StoryWiLS
 
he Past Through Tomorrow: Empowering Digital History at the Library
he Past Through Tomorrow:  Empowering Digital History at the Libraryhe Past Through Tomorrow:  Empowering Digital History at the Library
he Past Through Tomorrow: Empowering Digital History at the LibraryWiLS
 
Can Do! The WiLS Toolbox for Building a Culture of Shared Work
Can Do! The WiLS Toolbox for Building a Culture of Shared WorkCan Do! The WiLS Toolbox for Building a Culture of Shared Work
Can Do! The WiLS Toolbox for Building a Culture of Shared WorkWiLS
 
WiLS 2020 Annual Report
WiLS 2020 Annual ReportWiLS 2020 Annual Report
WiLS 2020 Annual ReportWiLS
 
Setting Your Library's Course with Community Demographics
Setting Your Library's Course with Community DemographicsSetting Your Library's Course with Community Demographics
Setting Your Library's Course with Community DemographicsWiLS
 
Lead the Way 2020: Facilitation Tools, Techniques, and Tips
Lead the Way 2020: Facilitation Tools, Techniques, and Tips Lead the Way 2020: Facilitation Tools, Techniques, and Tips
Lead the Way 2020: Facilitation Tools, Techniques, and Tips WiLS
 
WiLS 2020 Membership Meeting
WiLS 2020 Membership MeetingWiLS 2020 Membership Meeting
WiLS 2020 Membership MeetingWiLS
 
WiLS 2019 Annual Report
WiLS 2019 Annual ReportWiLS 2019 Annual Report
WiLS 2019 Annual ReportWiLS
 
Mukurtu Hubs & Spokes: A Sustainable Platform for Community Digital Archiving
Mukurtu Hubs & Spokes: A Sustainable Platform for Community Digital ArchivingMukurtu Hubs & Spokes: A Sustainable Platform for Community Digital Archiving
Mukurtu Hubs & Spokes: A Sustainable Platform for Community Digital ArchivingWiLS
 
Thank You to Recollection Wisconsin Partners
Thank You to Recollection Wisconsin PartnersThank You to Recollection Wisconsin Partners
Thank You to Recollection Wisconsin PartnersWiLS
 
User Experience: Crafting Recommendations
User Experience: Crafting RecommendationsUser Experience: Crafting Recommendations
User Experience: Crafting RecommendationsWiLS
 
Curating Community Digital Collections
Curating Community Digital CollectionsCurating Community Digital Collections
Curating Community Digital CollectionsWiLS
 
Building Belonging: Libraries and Social Justice
Building Belonging: Libraries and Social JusticeBuilding Belonging: Libraries and Social Justice
Building Belonging: Libraries and Social JusticeWiLS
 
Don’t Ask Permission
Don’t Ask PermissionDon’t Ask Permission
Don’t Ask PermissionWiLS
 
Choosing Privacy: Raising Awareness and Engaging Patrons in Privacy Issues
Choosing Privacy: Raising Awareness and Engaging Patrons in Privacy IssuesChoosing Privacy: Raising Awareness and Engaging Patrons in Privacy Issues
Choosing Privacy: Raising Awareness and Engaging Patrons in Privacy IssuesWiLS
 
The Library as Publisher: How Pressbooks Supports Knowledge Sharing
The Library as Publisher: How Pressbooks Supports Knowledge SharingThe Library as Publisher: How Pressbooks Supports Knowledge Sharing
The Library as Publisher: How Pressbooks Supports Knowledge SharingWiLS
 
WiLSWorld 2019 Lightning Talks: Community Engagement Showcase
WiLSWorld 2019 Lightning Talks: Community Engagement ShowcaseWiLSWorld 2019 Lightning Talks: Community Engagement Showcase
WiLSWorld 2019 Lightning Talks: Community Engagement ShowcaseWiLS
 
Engaged and Thriving: Building Peer Support Systems for Staff
Engaged and Thriving: Building Peer Support Systems for StaffEngaged and Thriving: Building Peer Support Systems for Staff
Engaged and Thriving: Building Peer Support Systems for StaffWiLS
 
Productivity Tools You Won't Believe You Lived Without!
Productivity Tools You Won't Believe You Lived Without!Productivity Tools You Won't Believe You Lived Without!
Productivity Tools You Won't Believe You Lived Without!WiLS
 

Mehr von WiLS (20)

1:1 Community Interview Examples & Tips for Libraries
1:1 Community Interview Examples & Tips for Libraries1:1 Community Interview Examples & Tips for Libraries
1:1 Community Interview Examples & Tips for Libraries
 
Using Data to Help Tell Your Library's Story
Using Data to Help Tell Your Library's StoryUsing Data to Help Tell Your Library's Story
Using Data to Help Tell Your Library's Story
 
he Past Through Tomorrow: Empowering Digital History at the Library
he Past Through Tomorrow:  Empowering Digital History at the Libraryhe Past Through Tomorrow:  Empowering Digital History at the Library
he Past Through Tomorrow: Empowering Digital History at the Library
 
Can Do! The WiLS Toolbox for Building a Culture of Shared Work
Can Do! The WiLS Toolbox for Building a Culture of Shared WorkCan Do! The WiLS Toolbox for Building a Culture of Shared Work
Can Do! The WiLS Toolbox for Building a Culture of Shared Work
 
WiLS 2020 Annual Report
WiLS 2020 Annual ReportWiLS 2020 Annual Report
WiLS 2020 Annual Report
 
Setting Your Library's Course with Community Demographics
Setting Your Library's Course with Community DemographicsSetting Your Library's Course with Community Demographics
Setting Your Library's Course with Community Demographics
 
Lead the Way 2020: Facilitation Tools, Techniques, and Tips
Lead the Way 2020: Facilitation Tools, Techniques, and Tips Lead the Way 2020: Facilitation Tools, Techniques, and Tips
Lead the Way 2020: Facilitation Tools, Techniques, and Tips
 
WiLS 2020 Membership Meeting
WiLS 2020 Membership MeetingWiLS 2020 Membership Meeting
WiLS 2020 Membership Meeting
 
WiLS 2019 Annual Report
WiLS 2019 Annual ReportWiLS 2019 Annual Report
WiLS 2019 Annual Report
 
Mukurtu Hubs & Spokes: A Sustainable Platform for Community Digital Archiving
Mukurtu Hubs & Spokes: A Sustainable Platform for Community Digital ArchivingMukurtu Hubs & Spokes: A Sustainable Platform for Community Digital Archiving
Mukurtu Hubs & Spokes: A Sustainable Platform for Community Digital Archiving
 
Thank You to Recollection Wisconsin Partners
Thank You to Recollection Wisconsin PartnersThank You to Recollection Wisconsin Partners
Thank You to Recollection Wisconsin Partners
 
User Experience: Crafting Recommendations
User Experience: Crafting RecommendationsUser Experience: Crafting Recommendations
User Experience: Crafting Recommendations
 
Curating Community Digital Collections
Curating Community Digital CollectionsCurating Community Digital Collections
Curating Community Digital Collections
 
Building Belonging: Libraries and Social Justice
Building Belonging: Libraries and Social JusticeBuilding Belonging: Libraries and Social Justice
Building Belonging: Libraries and Social Justice
 
Don’t Ask Permission
Don’t Ask PermissionDon’t Ask Permission
Don’t Ask Permission
 
Choosing Privacy: Raising Awareness and Engaging Patrons in Privacy Issues
Choosing Privacy: Raising Awareness and Engaging Patrons in Privacy IssuesChoosing Privacy: Raising Awareness and Engaging Patrons in Privacy Issues
Choosing Privacy: Raising Awareness and Engaging Patrons in Privacy Issues
 
The Library as Publisher: How Pressbooks Supports Knowledge Sharing
The Library as Publisher: How Pressbooks Supports Knowledge SharingThe Library as Publisher: How Pressbooks Supports Knowledge Sharing
The Library as Publisher: How Pressbooks Supports Knowledge Sharing
 
WiLSWorld 2019 Lightning Talks: Community Engagement Showcase
WiLSWorld 2019 Lightning Talks: Community Engagement ShowcaseWiLSWorld 2019 Lightning Talks: Community Engagement Showcase
WiLSWorld 2019 Lightning Talks: Community Engagement Showcase
 
Engaged and Thriving: Building Peer Support Systems for Staff
Engaged and Thriving: Building Peer Support Systems for StaffEngaged and Thriving: Building Peer Support Systems for Staff
Engaged and Thriving: Building Peer Support Systems for Staff
 
Productivity Tools You Won't Believe You Lived Without!
Productivity Tools You Won't Believe You Lived Without!Productivity Tools You Won't Believe You Lived Without!
Productivity Tools You Won't Believe You Lived Without!
 

Kürzlich hochgeladen

Unraveling Hypertext_ Analyzing Postmodern Elements in Literature.pptx
Unraveling Hypertext_ Analyzing  Postmodern Elements in  Literature.pptxUnraveling Hypertext_ Analyzing  Postmodern Elements in  Literature.pptx
Unraveling Hypertext_ Analyzing Postmodern Elements in Literature.pptxDhatriParmar
 
Decoding the Tweet _ Practical Criticism in the Age of Hashtag.pptx
Decoding the Tweet _ Practical Criticism in the Age of Hashtag.pptxDecoding the Tweet _ Practical Criticism in the Age of Hashtag.pptx
Decoding the Tweet _ Practical Criticism in the Age of Hashtag.pptxDhatriParmar
 
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITWQ-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITWQuiz Club NITW
 
Tree View Decoration Attribute in the Odoo 17
Tree View Decoration Attribute in the Odoo 17Tree View Decoration Attribute in the Odoo 17
Tree View Decoration Attribute in the Odoo 17Celine George
 
Sulphonamides, mechanisms and their uses
Sulphonamides, mechanisms and their usesSulphonamides, mechanisms and their uses
Sulphonamides, mechanisms and their usesVijayaLaxmi84
 
4.11.24 Poverty and Inequality in America.pptx
4.11.24 Poverty and Inequality in America.pptx4.11.24 Poverty and Inequality in America.pptx
4.11.24 Poverty and Inequality in America.pptxmary850239
 
PART 1 - CHAPTER 1 - CELL THE FUNDAMENTAL UNIT OF LIFE
PART 1 - CHAPTER 1 - CELL THE FUNDAMENTAL UNIT OF LIFEPART 1 - CHAPTER 1 - CELL THE FUNDAMENTAL UNIT OF LIFE
PART 1 - CHAPTER 1 - CELL THE FUNDAMENTAL UNIT OF LIFEMISSRITIMABIOLOGYEXP
 
CHUYÊN ĐỀ ÔN THEO CÂU CHO HỌC SINH LỚP 12 ĐỂ ĐẠT ĐIỂM 5+ THI TỐT NGHIỆP THPT ...
CHUYÊN ĐỀ ÔN THEO CÂU CHO HỌC SINH LỚP 12 ĐỂ ĐẠT ĐIỂM 5+ THI TỐT NGHIỆP THPT ...CHUYÊN ĐỀ ÔN THEO CÂU CHO HỌC SINH LỚP 12 ĐỂ ĐẠT ĐIỂM 5+ THI TỐT NGHIỆP THPT ...
CHUYÊN ĐỀ ÔN THEO CÂU CHO HỌC SINH LỚP 12 ĐỂ ĐẠT ĐIỂM 5+ THI TỐT NGHIỆP THPT ...Nguyen Thanh Tu Collection
 
DiskStorage_BasicFileStructuresandHashing.pdf
DiskStorage_BasicFileStructuresandHashing.pdfDiskStorage_BasicFileStructuresandHashing.pdf
DiskStorage_BasicFileStructuresandHashing.pdfChristalin Nelson
 
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...Nguyen Thanh Tu Collection
 
6 ways Samsung’s Interactive Display powered by Android changes the classroom
6 ways Samsung’s Interactive Display powered by Android changes the classroom6 ways Samsung’s Interactive Display powered by Android changes the classroom
6 ways Samsung’s Interactive Display powered by Android changes the classroomSamsung Business USA
 
Healthy Minds, Flourishing Lives: A Philosophical Approach to Mental Health a...
Healthy Minds, Flourishing Lives: A Philosophical Approach to Mental Health a...Healthy Minds, Flourishing Lives: A Philosophical Approach to Mental Health a...
Healthy Minds, Flourishing Lives: A Philosophical Approach to Mental Health a...Osopher
 
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 - I-LEARN SMART WORLD - CẢ NĂM - CÓ FILE NGHE (BẢN...
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 - I-LEARN SMART WORLD - CẢ NĂM - CÓ FILE NGHE (BẢN...BÀI TẬP BỔ TRỢ TIẾNG ANH 8 - I-LEARN SMART WORLD - CẢ NĂM - CÓ FILE NGHE (BẢN...
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 - I-LEARN SMART WORLD - CẢ NĂM - CÓ FILE NGHE (BẢN...Nguyen Thanh Tu Collection
 

Kürzlich hochgeladen (20)

Faculty Profile prashantha K EEE dept Sri Sairam college of Engineering
Faculty Profile prashantha K EEE dept Sri Sairam college of EngineeringFaculty Profile prashantha K EEE dept Sri Sairam college of Engineering
Faculty Profile prashantha K EEE dept Sri Sairam college of Engineering
 
Chi-Square Test Non Parametric Test Categorical Variable
Chi-Square Test Non Parametric Test Categorical VariableChi-Square Test Non Parametric Test Categorical Variable
Chi-Square Test Non Parametric Test Categorical Variable
 
Unraveling Hypertext_ Analyzing Postmodern Elements in Literature.pptx
Unraveling Hypertext_ Analyzing  Postmodern Elements in  Literature.pptxUnraveling Hypertext_ Analyzing  Postmodern Elements in  Literature.pptx
Unraveling Hypertext_ Analyzing Postmodern Elements in Literature.pptx
 
Decoding the Tweet _ Practical Criticism in the Age of Hashtag.pptx
Decoding the Tweet _ Practical Criticism in the Age of Hashtag.pptxDecoding the Tweet _ Practical Criticism in the Age of Hashtag.pptx
Decoding the Tweet _ Practical Criticism in the Age of Hashtag.pptx
 
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITWQ-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
Q-Factor HISPOL Quiz-6th April 2024, Quiz Club NITW
 
Mattingly "AI & Prompt Design" - Introduction to Machine Learning"
Mattingly "AI & Prompt Design" - Introduction to Machine Learning"Mattingly "AI & Prompt Design" - Introduction to Machine Learning"
Mattingly "AI & Prompt Design" - Introduction to Machine Learning"
 
Tree View Decoration Attribute in the Odoo 17
Tree View Decoration Attribute in the Odoo 17Tree View Decoration Attribute in the Odoo 17
Tree View Decoration Attribute in the Odoo 17
 
prashanth updated resume 2024 for Teaching Profession
prashanth updated resume 2024 for Teaching Professionprashanth updated resume 2024 for Teaching Profession
prashanth updated resume 2024 for Teaching Profession
 
Sulphonamides, mechanisms and their uses
Sulphonamides, mechanisms and their usesSulphonamides, mechanisms and their uses
Sulphonamides, mechanisms and their uses
 
4.11.24 Poverty and Inequality in America.pptx
4.11.24 Poverty and Inequality in America.pptx4.11.24 Poverty and Inequality in America.pptx
4.11.24 Poverty and Inequality in America.pptx
 
PART 1 - CHAPTER 1 - CELL THE FUNDAMENTAL UNIT OF LIFE
PART 1 - CHAPTER 1 - CELL THE FUNDAMENTAL UNIT OF LIFEPART 1 - CHAPTER 1 - CELL THE FUNDAMENTAL UNIT OF LIFE
PART 1 - CHAPTER 1 - CELL THE FUNDAMENTAL UNIT OF LIFE
 
CHUYÊN ĐỀ ÔN THEO CÂU CHO HỌC SINH LỚP 12 ĐỂ ĐẠT ĐIỂM 5+ THI TỐT NGHIỆP THPT ...
CHUYÊN ĐỀ ÔN THEO CÂU CHO HỌC SINH LỚP 12 ĐỂ ĐẠT ĐIỂM 5+ THI TỐT NGHIỆP THPT ...CHUYÊN ĐỀ ÔN THEO CÂU CHO HỌC SINH LỚP 12 ĐỂ ĐẠT ĐIỂM 5+ THI TỐT NGHIỆP THPT ...
CHUYÊN ĐỀ ÔN THEO CÂU CHO HỌC SINH LỚP 12 ĐỂ ĐẠT ĐIỂM 5+ THI TỐT NGHIỆP THPT ...
 
Paradigm shift in nursing research by RS MEHTA
Paradigm shift in nursing research by RS MEHTAParadigm shift in nursing research by RS MEHTA
Paradigm shift in nursing research by RS MEHTA
 
DiskStorage_BasicFileStructuresandHashing.pdf
DiskStorage_BasicFileStructuresandHashing.pdfDiskStorage_BasicFileStructuresandHashing.pdf
DiskStorage_BasicFileStructuresandHashing.pdf
 
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
31 ĐỀ THI THỬ VÀO LỚP 10 - TIẾNG ANH - FORM MỚI 2025 - 40 CÂU HỎI - BÙI VĂN V...
 
6 ways Samsung’s Interactive Display powered by Android changes the classroom
6 ways Samsung’s Interactive Display powered by Android changes the classroom6 ways Samsung’s Interactive Display powered by Android changes the classroom
6 ways Samsung’s Interactive Display powered by Android changes the classroom
 
Healthy Minds, Flourishing Lives: A Philosophical Approach to Mental Health a...
Healthy Minds, Flourishing Lives: A Philosophical Approach to Mental Health a...Healthy Minds, Flourishing Lives: A Philosophical Approach to Mental Health a...
Healthy Minds, Flourishing Lives: A Philosophical Approach to Mental Health a...
 
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 - I-LEARN SMART WORLD - CẢ NĂM - CÓ FILE NGHE (BẢN...
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 - I-LEARN SMART WORLD - CẢ NĂM - CÓ FILE NGHE (BẢN...BÀI TẬP BỔ TRỢ TIẾNG ANH 8 - I-LEARN SMART WORLD - CẢ NĂM - CÓ FILE NGHE (BẢN...
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 - I-LEARN SMART WORLD - CẢ NĂM - CÓ FILE NGHE (BẢN...
 
Spearman's correlation,Formula,Advantages,
Spearman's correlation,Formula,Advantages,Spearman's correlation,Formula,Advantages,
Spearman's correlation,Formula,Advantages,
 
Introduction to Research ,Need for research, Need for design of Experiments, ...
Introduction to Research ,Need for research, Need for design of Experiments, ...Introduction to Research ,Need for research, Need for design of Experiments, ...
Introduction to Research ,Need for research, Need for design of Experiments, ...
 

Now Featuring the Latest Version!: Basic Patch Management for Basic Software

  • 1. B A S I C PAT C H M A N A G E M E N T F O R B A S I C S O F T W A R E NOW FEATURING THE LATEST VERSION Francis Beaumier IT Specialist Brown County Library 515 Pine Street Green Bay, WI 54301 Phone: 920-448-5863 beaumier_fj@co.brown.wi.us
  • 2. ORGANIZATIONAL BACKGROUND • Part of Brown County • Use of county’s Technology Services department • Getting new software is a process • Public computers • Windows machines on a physically separate and all wireless network • No central management • Freezing software • …. No updates besides Microsoft ones
  • 3. STARTING POINTS • Computers already left on weekly for Windows updates • Windows Task Scheduler • Public computers can talk to other public computers • MSIs can be installed silently • Compare-Object cmdlet • Windows 7 computers all come with a version of Powershell • Web server available
  • 4. CLIENTS.PS1 $URL = "http://www.example.org/updates/Updater.ps1" $Output = "C:UpdaterUpdater.ps1" #Download the Updater.ps1 file (New-Object System.Net.WebClient).DownloadFile($URL,$Output); #Call the downloaded script Powershell.exe -File $Output
  • 5. $sourceFolder = "172.17.101.210updates$" $targetFolder = "c:updates" $sourceItem = Get-ChildItem -Path $sourceFolder $targetItem = Get-ChildItem -Path $targetFolder #if *Item is empty, provide empty array to make Compare-Object work. If (-not $sourceItem) {$sourceItem = @()} if (-not $targetItem) {$targetItem = @()} $differentitems = Compare-Object $sourceItem $targetItem -Property Name, LastWriteTime, Length | where { $_.SideIndicator -eq "<=" } #Copy the items that are different to the client PC Set-Location $sourceFolder $differentitems | foreach {Copy-Item -Destination $targetFolder -Path $_.Name} #Start the installation Pocess of each UpdatePackage that was copied Set-Location $targetFolder $differentitems | foreach { Start-Process -FilePath $_.Name -ArgumentList "/q" -Wait } #Reboot the computer after the installs are complete Restart-Computer ORIGINAL UPDATER.PS1
  • 6. UPDATER.PS1 $source="http://www.example.org/updates/" #web server address $targetFolder="c:updates" #local file destination $webClient = New-Object System.Net.WebClient $updates = $webClient.DownloadString($source).Split("`n") # Web server listing -> object -> array $sourceItem= @() foreach ($update in $updates) { $file,$mod = $update.Split(","); $sourceItem += New-Object –TypeName PSObject –Prop @{'Name'=$file; 'LastWriteTime'= Get-Date $mod }; } $targetItem = Get-ChildItem -Path $targetFolder #if targetItem is empty, provide empty array to make Compare-Object work. if (-not $targetItem) {$targetItem = @()} $differentitems = Compare-Object $sourceItem $targetItem -Property Name, LastWriteTime | where { $_.SideIndicator -eq "<=" }
  • 7. UPDATER.PS1 (CONTINUED) Set-Location $targetFolder foreach ($item in $differentitems) { #Copy the items that are different to the client PC $webClient.DownloadFile($source+$item.Name, $targetFolder+$item.Name) #Start the installation Pocess of the UpdatePackage that was copied Start-Process -FilePath $item.Name -ArgumentList "/q /norestart" -Wait #Change the date modified to match what the server says so that the #compare works on the next run (Get-Item ($targetFolder+$item.Name)).LastWriteTime= $item.LastWriteTime }
  • 8. INDEX.PHP <? // set time zone so that date modified is accurate date_default_timezone_set('America/Chicago'); $updateList = array_diff(scandir('.'), array('..', '.', 'index.php', 'error_log', 'Updater.ps1')); foreach ($updateList as $file ) { $out .= rawurlencode($file) . ',' . date('Y-m-d G:i:s',filemtime ($file)) . "n"; } print rtrim($out, "n") ?>
  • 10. GOOD TO GO UPDATES • Adobe Acrobat Reader patches • Flash • Shockwave
  • 11. SERVER INSTALLATION 1. Make a folder with Updater.ps1, index.php, and the updates that you want. 2. Make sure your server has PHP, is configured to serve that folder and use index.php as your directory index.
  • 12. CLIENT INSTALLATION 1. Set power settings 2. Create Updater and Updates folders in C: 3. Allow PowerShell to run unsigned scripts: set-executionpolicy bypass 4. Copy Clients.ps1 to the Updater folder 5. Create a scheduled task to run the Updater during your maintenance window.
  • 16. MSI HACKING WITH ORCA: SKYPE • Skype MSI: http://www.skype.com/go/getskype-msi • Orca: https://www.microsoft.com/en- us/download/details.aspx?id=3138 • In the Property table, • change ProductCode to something new. • change InstallUpdatesEn abled to #0
  • 17. MSI HACKING WITH ORCA: ADOBE ACROBAT READER • Change ECULA_ACCEPT to YES in the Property table.
  • 18. ADVANCED MSI HACKING WITH ORCA: JAVA (* THERE’S AN EASIER WAY) • Get the .exe from the vendor. Run it but do not click through the wizard. • Retrieve the MSI from %userprofile%appdataLocalLowOracleJavajre1.8.0_x x (where xx is the update number) • Make the following edits in Orca: • In the CustomAction table, change the Type of installexe to 3090. This adjusts the permissions requested by the installer.
  • 19. ADVANCED MSI HACKING WITH ORCA: JAVA II • The changes on the previous slide will get you going. The rest of these instructions take care of removing previous versions. • Make the following edits in Orca: • In the InstallExecuteSequence table, change the condition for FindRelatedProducts and RemoveExistingProducts to 1=1. This forces those two actions to run.
  • 20. ADVANCED MSI HACKING WITH ORCA: JAVA III • Add an entry for each version of Java you wish to uninstall in the Upgrade table: • UpgadeCode: you’ll need the one for your Java version • VersionMin – 0.0.0.0 (any version ≥ 0 ) • VersionMax – leave blank to use only VersionMin as criteria • Language – blank = any • Attributes – a set of flags. 256 seems to work for me • Remove – ALL means all  • ActionProperty – a variable of your choice – must be unique and must be added to the SecureCustomProperties variable in the Property table. I chose FRANCIS1
  • 21. HOW DO I TRACK DOWN A JAVA UPGRADE CODE? • If you have the MSI, open it in Orca • Otherwise, if you have a machine with it installed: • Go to C:WindowsInstaller • Right click the column headings and add Authors • Find the .msi authored by Oracle • Open it in Orca • Go to the Property table, and you’ll find the UpgradeCode property.
  • 22. ADVANCED MSI HACKING WITH ORCA: JAVA IV • Go to the property table and add/change the following: • JAVAUPDATE=0 • AUTOUPDATECHECK=0 • JU=0 • In SecureCustomProperties, add your custom variables from part III
  • 23. SO YOU NEED SOME MSIs? • Make them! • Be leery of packing software…
  • 24. Firefox.ver Firefox.mm ROLL YOUR OWN MSI WITH MAKEMSI: FIREFOX . • MAKEMSI: dennisbareis.com • Standard Firefox installer ; ProductName = Firefox ; DESCRIPTION = Install Firefox ; Installed = WINDOWS_ALL VERSION : 47.0.1 DATE : 19 Nov 2015 CHANGES : nothing #define COMPANY_WANT_TO_INSTALL_DOCUMENTATION N ;; no docs #include "ME.MMH" ;; required files ; install firefox <$WrapInstall EXE="Firefox Setup 47.0.1.exe" Args='-ms' SeqI="<- InstallFinalize"> ; dummy component - the MSI needs to have something to install <$Component "dummy" Create="Y" Directory_="<$AnyDir>"> <$/Component> ; filter validation errors <$MsiValFilter "ICE71">
  • 25. BROWN COUNTY LIBRARY FIREFOX #define COMPANY_AUTO_UNINSTALL_VIA_UPGRADE_TABLE N ;;nothing to uninst #define COMPANY_WANT_TO_INSTALL_DOCUMENTATION N ;; no docs #define COMPANY_REINSTALLMODE ;; leave blank to avoid validation issue #define UISAMPLE_DISABLE_COMPLETELY Y ;; disable MSI UI customizations #define DBG_ALL N #include "ME.MMH" ;; required files ; do not register this installer in Add/Remove Programs <$Table "InstallExecuteSequence"> <$RowsDelete WHERE="Action = 'PublishComponents'"> <$RowsDelete WHERE="Action = 'PublishFeatures'"> <$RowsDelete WHERE="Action = 'PublishProduct'"> <$RowsDelete WHERE="Action = 'RegisterProduct'"> <$RowsDelete WHERE="Action = 'RegisterUser'"> <$/Table> ; fast install <$Table "Property"> <$Row Property="MSIFASTINSTALL" Value="3"> <$/Table>
  • 26. BROWN COUNTY LIBRARY FIREFOX II ; install firefox <$WrapInstall EXE="Firefox Setup 47.0.1.exe" Args='-ms' SeqI="<- InstallFinalize"> ; install BCL settings #( <$DirectoryTree Key="INSTALLDIR" Dir="c:program filesMozilla Firefox" CHANGE="" PrimaryFolder="Y"> #) <$Files "filesmoz*" DestDir="INSTALLDIR"> #( <$DirectoryTree Dir="c:program filesMozilla Firefoxbrowser" Key="INSTALLDIR2" CHANGE="" PrimaryFolder="Y"> #) <$Files "filesoverride.ini" DestDir="INSTALLDIR2"> #( <$DirectoryTree Dir="c:program filesMozilla Firefoxdefaultspref" Key="INSTALLDIR3" CHANGE="" PrimaryFolder="Y"> #) <$Files "fileslocal-settings.js" DestDir="INSTALLDIR3">
  • 27. <$VbsCa Binary="ADRC.vbs"> <$VbsCaEntry "ADRC"> DoIt() <$/VbsCaEntry> <?NewLine><?NewLine> sub DoIt() Dim wshNetwork, fso Set wshNetwork = CaMkObject("WScript.Network") If InStr(wshNetwork.ComputerName,"ADRC") > 0 Then Set fso = CaMkObject("Scripting.FileSystemObject") If fso.FileExists("C:Program Files (x86)Mozilla Firefoxmozilla.cfg") Then fso.DeleteFile("C:Program Files (x86)Mozilla Firefoxmozilla.cfg") fso.MoveFile "mozilla-adrc.cfg","mozilla.cfg" ' will need full path Else fso.DeleteFile("C:Program FilesMozilla Firefoxmozilla.cfg") fso.MoveFile "mozilla-adrc.cfg","mozilla.cfg" ' will need full path End If set fso = Nothing End If set wshNetwork = Nothing end sub <$/VbsCa> BCLFIREFOXIII
  • 28. BROWN COUNTY LIBRARY FIREFOX IV #( <$VbsCaSetup Binary="ADRC.vbs" Entry="ADRC" Seq="InstallFinalize-" CONDITION=^<$CONDITION_EXCEPT_UNINSTALL>^ Type="IMMEDIATE"> #) ; ignore validation errors <$MsiValFilter "ICE82">
  • 29. AIR • Problem: AdobeAirInstaller.exe uses an MSI internally, so wrapping it in an MSI won’t work • My solution: AutoIT: https://www.autoitscript.com #RequireAdmin #NoTrayIcon #include <MsgBoxConstants.au3> ;MsgBox($MB_SYSTEMMODAL, "", "copying file") FileInstall ( ".AdobeAirInstaller.exe", "c:windowstemp", 1) ;MsgBox($MB_SYSTEMMODAL, "", "installing air") RunWait('c:windowstempAdobeAirInstaller.exe -silent' _ & ' –eulaAccepted', "", @SW_HIDE) ;MsgBox($MB_SYSTEMMODAL, "", "deleting air") FileDelete ( "c:windowstempAdobeAirInstaller.exe" )
  • 30. BATCH FILE EXAMPLE: INSTALLING WIRELESS PROFILES #include ..francis.mmh ; files to install #( <$DirectoryTree Dir="c:userslibadmindesktopwifi-profiles" Key="INSTALLDIR" CHANGE="" PrimaryFolder="Y"> #) <$Files "wifi-profiles*.*" DestDir="INSTALLDIR"> ; script to run after installation <$VbsCa Binary="Postflight.vbs"> <$VbsCaEntry "Postflight"> dim WshShell : Set WshShell = CaMkObject("WScript.Shell") WshShell.Run "C:userslibadmindesktopwifi-profilesimport.bat", , TRUE set WshShell = Nothing <$/VbsCaEntry> <$/VbsCa> #( <$VbsCaSetup Binary="Postflight.vbs" Entry="Postflight" Seq="InstallFinalize- " CONDITION="" Type="IMMEDIATE">
  • 31. #include "OpenMsi.MMH" <$Msi "outJava.msi" template="Java.msi"> <$Table "CustomAction"> <$Row @Where="Action='installexe'" Type="3090"> <$/Table> <$Table "InstallExecuteSequence"> <$Row@Where="Action='FindRelatedProducts'orAction='RemoveExistingProducts'"Condition="1=1"> <$/Table> <$Table "Upgrade"> <$RowUpgradeCode="{57BDA5C6-443C-4D65-B233-282393218045}"VersionMin="0.0.0.0"Attributes="256" <$/Table> <$Table "Property"> <$Row@Where="Property='SecureCustomProperties'"@SelfRef="{*}" *Value=^"FRANCIS1;"&{*}^> <$Row Property="JAVAUPDATE" Value="0"> <$Row Property="AUTOUPDATECHECK" Value="0"> <$Row Property="JU" Value="0"> <$/Table> <$/Msi> <$MsiValFilter "ICE03|ICE61" Re="Y"> ; filter validation errors JAVA THE MAKEMSI WAY
  • 32. MORE POSSIBILITIES • Different update branches • Error checking / hashes • Reporting
  • 33. BROWN COUNTY LIBRARY’S SOFTWARE UPDATE LIBRARY • Adobe Air • Adobe Flash (Active X) • Adobe Flash (Plug-in • Adobe Reader • Adobe Shockwave • Arduino • Google Earth • HP Universal Print Driver • Kyocera KX Print Driver • Mozilla Firefox • Oracle Java • Netloan (our PC reservation software) • Paint.NET • Skype • WebEx Player