├── .gitignore ├── BreakdownGraphic.png ├── LICENSE ├── Lync ├── MSLync.install.recipe ├── MSLync.munki.recipe ├── MSLync.pkg.recipe └── MSLyncURLandUpdateInfoProvider.py ├── MAU ├── MAU.install.recipe ├── MAU.lanrev.recipe ├── MAU.munki.recipe ├── MAU.pkg.recipe └── MAUURLandUpdateInfoProvider.py ├── Office2016-IndividualApps ├── EA-OfficeAppVersion.xml ├── JSS-README.md ├── MSO2016License.jss.recipe ├── MSOffice2016URLandUpdateInfoProvider.py ├── MicrosoftExcel.png ├── MicrosoftExcel2016.download.recipe ├── MicrosoftExcel2016.ds.recipe ├── MicrosoftExcel2016.install.recipe ├── MicrosoftExcel2016.jss.recipe ├── MicrosoftExcel2016.lanrev.recipe ├── MicrosoftExcel2016.munki.recipe ├── MicrosoftOneNote2016.download.recipe ├── MicrosoftOneNote2016.ds.recipe ├── MicrosoftOneNote2016.lanrev.recipe ├── MicrosoftOneNote2016.munki.recipe ├── MicrosoftOutlook.png ├── MicrosoftOutlook2016.download.recipe ├── MicrosoftOutlook2016.ds.recipe ├── MicrosoftOutlook2016.install.recipe ├── MicrosoftOutlook2016.jss.recipe ├── MicrosoftOutlook2016.lanrev.recipe ├── MicrosoftOutlook2016.munki.recipe ├── MicrosoftPowerPoint.png ├── MicrosoftPowerPoint2016.download.recipe ├── MicrosoftPowerPoint2016.ds.recipe ├── MicrosoftPowerPoint2016.install.recipe ├── MicrosoftPowerPoint2016.jss.recipe ├── MicrosoftPowerPoint2016.lanrev.recipe ├── MicrosoftPowerPoint2016.munki.recipe ├── MicrosoftWord.png ├── MicrosoftWord2016.download.recipe ├── MicrosoftWord2016.ds.recipe ├── MicrosoftWord2016.install.recipe ├── MicrosoftWord2016.jss.recipe ├── MicrosoftWord2016.lanrev.recipe ├── MicrosoftWord2016.munki.recipe ├── P-OtherTrigger.xml ├── P-SelfService.xml ├── S-Standard.xml ├── SG-ExtendedAttributeOffice.xml ├── manual_trigger_office.sh └── payload │ └── .gitignore ├── Office2016Suite-SKUless ├── Office2016.png ├── Office2016SuiteSKUless.download.recipe ├── Office2016SuiteSKUless.ds.recipe ├── Office2016SuiteSKUless.install.recipe ├── Office2016SuiteSKUless.jss.recipe ├── Office2016SuiteSKUless.lanrev.recipe ├── Office2016SuiteSKUless.munki.recipe ├── OfficeSuiteSKULessVersionProvider.py ├── PolicyTemplate.xml └── SmartGroupTemplate.xml ├── OneDrive-Standalone ├── OneDrive.pkg.recipe └── OneDrive.png ├── README.md └── SkypeForBusiness ├── SkypeForBusiness.munki.recipe ├── SkypeForBusiness.pkg.recipe └── SkypeForBusiness.png /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | # Byte-compiled / optimized / DLL files 3 | __pycache__/ 4 | *.py[cod] 5 | *$py.class 6 | 7 | # C extensions 8 | *.so 9 | 10 | # Distribution / packaging 11 | .Python 12 | env/ 13 | build/ 14 | develop-eggs/ 15 | dist/ 16 | downloads/ 17 | eggs/ 18 | .eggs/ 19 | lib/ 20 | lib64/ 21 | parts/ 22 | sdist/ 23 | var/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *,cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | 56 | # Sphinx documentation 57 | docs/_build/ 58 | 59 | # PyBuilder 60 | target/ 61 | 62 | # Editor-related 63 | .idea/ 64 | -------------------------------------------------------------------------------- /BreakdownGraphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arubdesu/microsoft-recipes/677aaa3a8b82f25fbb7c130177095d6c7841a03f/BreakdownGraphic.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Lync/MSLync.install.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Installs the current release version of MSLync. 7 | Identifier 8 | com.github.microsoft-recipes.install.LyncInstaller 9 | Input 10 | 11 | 12 | MinimumVersion 13 | 0.4.0 14 | ParentRecipe 15 | com.github.microsoft-recipes.pkg.LyncInstaller 16 | Process 17 | 18 | 19 | Processor 20 | Installer 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Lync/MSLync.munki.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Finds latest Lync installer, downloads the disk image and extracts the pkg. 7 | Set VERSION to a specific version number to download that version instead. 8 | Set CULTURE_CODE to a different value to get a different localization. See 9 | http://msdn.microsoft.com/en-us/library/ee825488(v=cs.20).aspx for a table of Culture Codes. 10 | Identifier 11 | com.github.microsoft-recipes.munki.LyncInstaller 12 | Input 13 | 14 | NAME 15 | MSLync 16 | MUNKI_REPO_SUBDIR 17 | apps/Office2011 18 | VERSION 19 | latest 20 | CULTURE_CODE 21 | 0409 22 | pkginfo 23 | 24 | blocking_applications 25 | 26 | MSN Messenger 27 | Microsoft Lync 28 | Microsoft Error Reporting 29 | Microsoft Communicator 30 | Microsoft Messenger 31 | 32 | catalogs 33 | 34 | testing 35 | 36 | 37 | 38 | MinimumVersion 39 | 0.3.1 40 | Process 41 | 42 | 43 | Processor 44 | MSLyncURLandUpdateInfoProvider 45 | Arguments 46 | 47 | culture_code 48 | %CULTURE_CODE% 49 | munki_update_name 50 | %NAME% 51 | version 52 | %VERSION% 53 | 54 | 55 | 56 | Processor 57 | URLDownloader 58 | 59 | 60 | Processor 61 | CodeSignatureVerifier 62 | Arguments 63 | 64 | input_path 65 | %pathname%/Lync Installer.pkg 66 | expected_authority_names 67 | 68 | Developer ID Installer: Microsoft Corporation 69 | Developer ID Certification Authority 70 | Apple Root CA 71 | 72 | 73 | 74 | 75 | Comment 76 | Merge input pkginfo and additional_pkginfo generated by MSLyncURLandUpdateInfoProvider 77 | Processor 78 | MunkiPkginfoMerger 79 | 80 | 81 | Arguments 82 | 83 | pkg_path 84 | %pathname% 85 | repo_subdirectory 86 | %MUNKI_REPO_SUBDIR% 87 | 88 | Processor 89 | MunkiImporter 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /Lync/MSLync.pkg.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Finds latest Lync installer, downloads the disk image and extracts the pkg. 7 | Set VERSION to a specific version number to download that version instead. 8 | Set CULTURE_CODE to a different value to get a different localization. See 9 | http://msdn.microsoft.com/en-us/library/ee825488(v=cs.20).aspx for a table of Culture Codes. 10 | Identifier 11 | com.github.arubdesu.pkg.LyncInstaller 12 | MinimumVersion 13 | 0.3.1 14 | Input 15 | 16 | NAME 17 | MSLync 18 | VERSION 19 | latest 20 | CULTURE_CODE 21 | 0409 22 | 23 | Process 24 | 25 | 26 | Processor 27 | MSLyncURLandUpdateInfoProvider 28 | Arguments 29 | 30 | culture_code 31 | %CULTURE_CODE% 32 | version 33 | %VERSION% 34 | 35 | 36 | 37 | Processor 38 | URLDownloader 39 | 40 | 41 | Processor 42 | EndOfCheckPhase 43 | 44 | 45 | Processor 46 | CodeSignatureVerifier 47 | Arguments 48 | 49 | input_path 50 | %pathname%/Lync Installer.pkg 51 | expected_authority_names 52 | 53 | Developer ID Installer: Microsoft Corporation 54 | Developer ID Certification Authority 55 | Apple Root CA 56 | 57 | 58 | 59 | 60 | Processor 61 | PkgCopier 62 | Arguments 63 | 64 | source_pkg 65 | %pathname%/%pkg_name% 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /Lync/MSLyncURLandUpdateInfoProvider.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # 3 | # Copyright 2016 Allister Banks, mostly repurposed from code by Greg Neagle 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | 18 | import plistlib 19 | import urllib2 20 | 21 | from distutils.version import LooseVersion 22 | from operator import itemgetter 23 | 24 | from autopkglib import Processor, ProcessorError 25 | 26 | 27 | __all__ = ["MSLyncURLandUpdateInfoProvider"] 28 | 29 | CULTURE_CODE = "0409" 30 | BASE_URL = "https://www.microsoft.com/mac/autoupdate/%sUCCP14.xml" 31 | MUNKI_UPDATE_NAME = "Lync_Installer" 32 | 33 | class MSLyncURLandUpdateInfoProvider(Processor): 34 | """Provides a download URL for the most recent version of MS Lync.""" 35 | input_variables = { 36 | "culture_code": { 37 | "required": False, 38 | "description": ("See " 39 | "http://msdn.microsoft.com/en-us/library/ee825488(v=cs.20).aspx" 40 | " for a table of CultureCodes Defaults to 0409, which " 41 | "corresponds to en-US (English - United States)"), 42 | }, 43 | "base_url": { 44 | "required": False, 45 | "description": ("Default is %s. If this is given, culture_code " 46 | "is ignored." % (BASE_URL % CULTURE_CODE)), 47 | }, 48 | "version": { 49 | "required": False, 50 | "description": "Update version number. Defaults to latest.", 51 | }, 52 | } 53 | output_variables = { 54 | "url": { 55 | "description": "URL to the latest Lync installer.", 56 | }, 57 | "pkg_name": { 58 | "description": "Name of the package within the disk image.", 59 | }, 60 | "additional_pkginfo": { 61 | "description": 62 | "Some pkginfo fields extracted from the Microsoft metadata.", 63 | }, 64 | "display_name": { 65 | "description": 66 | "The name of the package that includes the version.", 67 | }, 68 | } 69 | description = __doc__ 70 | 71 | def sanityCheckExpectedTriggers(self, item): 72 | """Raises an exeception if the Trigger Condition or 73 | Triggers for an update don't match what we expect. 74 | Protects us if these change in the future.""" 75 | if not item.get("Trigger Condition") == ["and", "Lync"]: 76 | raise ProcessorError( 77 | "Unexpected Trigger Condition in item %s: %s" 78 | % (item["Title"], item["Trigger Condition"])) 79 | if not "Lync" in item.get("Triggers", {}): 80 | raise ProcessorError( 81 | "Missing expected MCP Trigger in item %s" % item["Title"]) 82 | 83 | def getRequiresFromUpdateItem(self, item): 84 | """Attempts to determine what earlier updates are 85 | required by this update""" 86 | 87 | def compare_versions(a, b): 88 | """Internal comparison function for use with sorting""" 89 | return cmp(LooseVersion(a), LooseVersion(b)) 90 | 91 | self.sanityCheckExpectedTriggers(item) 92 | munki_update_name = self.env.get("munki_update_name", MUNKI_UPDATE_NAME) 93 | mcp_versions = item.get( 94 | "Triggers", {}).get("Lync", {}).get("Versions", []) 95 | if not mcp_versions: 96 | return None 97 | # Versions array is already sorted in current 0409MSOf14.xml, 98 | # may be no need to sort; but we should just to be safe... 99 | mcp_versions.sort(compare_versions) 100 | if mcp_versions[0] == "14.0.0": 101 | # works with original Office release, so no requires array 102 | return None 103 | return ["%s-%s" % (munki_update_name, mcp_versions[0])] 104 | 105 | def getInstallsItems(self, item): 106 | """Attempts to parse the Triggers to create an installs item""" 107 | self.sanityCheckExpectedTriggers(item) 108 | triggers = item.get("Triggers", {}) 109 | paths = [triggers[key].get("File") for key in triggers.keys()] 110 | if "Contents/Info.plist" in paths: 111 | # use the apps info.plist as installs item 112 | installs_item = { 113 | "CFBundleShortVersionString": self.getVersion(item), 114 | "CFBundleVersion": self.getVersion(item), 115 | "path": ("/Applications/Lync/" 116 | "Contents/Info.plist"), 117 | "type": "bundle", 118 | "version_comparison_key": "CFBundleShortVersionString" 119 | } 120 | return [installs_item] 121 | return None 122 | 123 | def getVersion(self, item): 124 | """Extracts the version of the update item.""" 125 | # currently relies on the item having a title in the format 126 | # "Lync x.y.z Update" 127 | TITLE_START = "Lync " 128 | TITLE_END = " Update" 129 | title = item.get("Title", "") 130 | version_str = title.replace(TITLE_START, "").replace(TITLE_END, "") 131 | return version_str 132 | 133 | def valueToOSVersionString(self, value): 134 | """Converts a value to an OS X version number""" 135 | version_str = '' 136 | if isinstance(value, int): 137 | version_str = hex(value)[2:] 138 | elif isinstance(value, basestring): 139 | if value.startswith('0x'): 140 | version_str = value[2:] 141 | # OS versions are encoded as hex: 142 | # 4184 = 0x1058 = 10.5.8 143 | # not sure how 10.4.11 would be encoded; 144 | # guessing 0x104B ? 145 | major = 0 146 | minor = 0 147 | patch = 0 148 | try: 149 | if len(version_str) == 1: 150 | major = int(version_str[0]) 151 | if len(version_str) > 1: 152 | major = int(version_str[0:2]) 153 | if len(version_str) > 2: 154 | minor = int(version_str[2], 16) 155 | if len(version_str) > 3: 156 | patch = int(version_str[3], 16) 157 | except ValueError: 158 | raise ProcessorError("Unexpected value in version: %s" % value) 159 | return "%s.%s.%s" % (major, minor, patch) 160 | 161 | def get_lyncInstaller_info(self): 162 | """Gets info about a Lync installer from MS metadata.""" 163 | if "base_url" in self.env: 164 | base_url = self.env["base_url"] 165 | else: 166 | culture_code = self.env.get("culture_code", CULTURE_CODE) 167 | base_url = BASE_URL % culture_code 168 | version_str = self.env.get("version") 169 | if not version_str: 170 | version_str = "latest" 171 | # Get metadata URL 172 | req = urllib2.Request(base_url) 173 | # Add the MAU User-Agent, since MAU feed server seems to explicitly block 174 | # a User-Agent of 'Python-urllib/2.7' - even a blank User-Agent string 175 | # passes. 176 | req.add_header("User-Agent", 177 | "Microsoft%20AutoUpdate/3.0.2 CFNetwork/720.2.4 Darwin/14.1.0 (x86_64)") 178 | try: 179 | f = urllib2.urlopen(req) 180 | data = f.read() 181 | f.close() 182 | except BaseException as err: 183 | raise ProcessorError("Can't download %s: %s" % (base_url, err)) 184 | 185 | metadata = plistlib.readPlistFromString(data) 186 | if version_str == "latest": 187 | # Lync 'update' metadata is a list of dicts. 188 | # we need to sort by date. 189 | sorted_metadata = sorted(metadata, key=itemgetter('Date')) 190 | # choose the last item, which should be most recent. 191 | item = sorted_metadata[-1] 192 | else: 193 | # we've been told to find a specific version. Unfortunately, the 194 | # Lync updates metadata items don't have a version attibute. 195 | # The version is only in text in the update's Title. So we look for 196 | # that... 197 | # Titles are in the format "Lync x.y.z Update" 198 | padded_version_str = " " + version_str + " " 199 | matched_items = [item for item in metadata 200 | if padded_version_str in item["Title"]] 201 | if len(matched_items) != 1: 202 | raise ProcessorError( 203 | "Could not find version %s in update metadata. " 204 | "Updates that are available: %s" 205 | % (version_str, ", ".join(["'%s'" % item["Title"] 206 | for item in metadata]))) 207 | item = matched_items[0] 208 | 209 | self.env["url"] = item["Location"] 210 | self.env["pkg_name"] = item["Payload"] 211 | self.output("Found URL %s" % self.env["url"]) 212 | self.output("Got update: '%s'" % item["Title"]) 213 | # now extract useful info from the rest of the metadata that could 214 | # be used in a pkginfo 215 | pkginfo = {} 216 | pkginfo["description"] = "%s" % item["Short Description"] 217 | pkginfo["display_name"] = item["Title"] 218 | max_os = self.valueToOSVersionString(item['Max OS']) 219 | min_os = self.valueToOSVersionString(item['Min OS']) 220 | if max_os != "0.0.0": 221 | pkginfo["maximum_os_version"] = max_os 222 | if min_os != "0.0.0": 223 | pkginfo["minimum_os_version"] = min_os 224 | installs_items = self.getInstallsItems(item) 225 | if installs_items: 226 | pkginfo["installs"] = installs_items 227 | requires = self.getRequiresFromUpdateItem(item) 228 | if requires: 229 | pkginfo["requires"] = requires 230 | self.output( 231 | "Update requires previous update version %s" 232 | % requires[0].split("-")[1]) 233 | 234 | pkginfo['name'] = self.env.get("munki_update_name", MUNKI_UPDATE_NAME) 235 | self.env["additional_pkginfo"] = pkginfo 236 | self.env["display_name"] = pkginfo["display_name"] 237 | self.output("Additional pkginfo: %s" % self.env["additional_pkginfo"]) 238 | 239 | def main(self): 240 | """Get information about an update""" 241 | self.get_lyncInstaller_info() 242 | 243 | 244 | if __name__ == "__main__": 245 | processor = MSLyncURLandUpdateInfoProvider() 246 | processor.execute_shell() 247 | -------------------------------------------------------------------------------- /MAU/MAU.install.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Installs the current release version of Microsoft AutoUpdate (MAU). 7 | Identifier 8 | com.github.autopkg.microsoft-recipes.install.MAU 9 | Input 10 | 11 | 12 | MinimumVersion 13 | 0.4.1 14 | ParentRecipe 15 | com.github.autopkg.microsoft-recipes.pkg.MAU 16 | Process 17 | 18 | 19 | Processor 20 | Installer 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /MAU/MAU.lanrev.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Finds latest Microsoft AutoUpdate (MAU) installer, downloads the pkg and uploads to LANrev 7 | Identifier 8 | com.github.autopkg.microsoft-recipes.lanrev.MAU 9 | Input 10 | 11 | CULTURE_CODE 12 | 0409 13 | 14 | MinimumVersion 15 | 0.4.2 16 | ParentRecipe 17 | com.github.autopkg.microsoft-recipes.pkg.MAU 18 | Process 19 | 20 | 21 | Arguments 22 | 23 | dest_payload_path 24 | %RECIPE_CACHE_DIR%/%display_name%.amsdpackages 25 | import_pkg_to_servercenter 26 | 27 | sdpackages_ampkgprops_path 28 | %RECIPE_DIR%/%NAME%-Defaults.ampkgprops 29 | source_payload_path 30 | %pathname% 31 | 32 | Processor 33 | com.github.autopkg.microsoft.jbaker10.LANrevImporter/LANrevImporter 34 | SharedProcessorRepoURL 35 | https://github.com/jbaker10/LANrevImporter 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /MAU/MAU.munki.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Finds latest Microsoft AutoUpdate (MAU) installer, downloads the pkg. Set CULTURE_CODE to a different 7 | value to get a different localization. See http://msdn.microsoft.com/en-us/library/ee825488(v=cs.20).aspx 8 | for a table of Culture Codes. 9 | Identifier 10 | com.github.autopkg.microsoft-recipes.munki.MAU 11 | Input 12 | 13 | NAME 14 | MAU 15 | MUNKI_REPO_SUBDIR 16 | apps/Office2011 17 | CULTURE_CODE 18 | 0409 19 | pkginfo 20 | 21 | blocking_applications 22 | 23 | Microsoft AutoUpdate 24 | 25 | catalogs 26 | 27 | testing 28 | 29 | 30 | 31 | MinimumVersion 32 | 0.4.1 33 | Process 34 | 35 | 36 | Processor 37 | MAUURLandUpdateInfoProvider 38 | Arguments 39 | 40 | culture_code 41 | %CULTURE_CODE% 42 | munki_update_name 43 | %NAME% 44 | 45 | 46 | 47 | Processor 48 | URLDownloader 49 | 50 | 51 | Processor 52 | EndOfCheckPhase 53 | 54 | 55 | Processor 56 | CodeSignatureVerifier 57 | Arguments 58 | 59 | input_path 60 | %pathname% 61 | expected_authority_names 62 | 63 | Developer ID Installer: Microsoft Corporation (UBF8T346G9) 64 | Developer ID Certification Authority 65 | Apple Root CA 66 | 67 | 68 | 69 | 70 | Comment 71 | Merge input pkginfo and additional_pkginfo generated by MAUURLandUpdateInfoProvider 72 | Processor 73 | MunkiPkginfoMerger 74 | 75 | 76 | Arguments 77 | 78 | pkg_path 79 | %pathname% 80 | repo_subdirectory 81 | %MUNKI_REPO_SUBDIR% 82 | 83 | Processor 84 | MunkiImporter 85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /MAU/MAU.pkg.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Finds latest Microsoft AutoUpdate (MAU) installer, downloads the pkg. 7 | Identifier 8 | com.github.autopkg.microsoft-recipes.pkg.MAU 9 | MinimumVersion 10 | 0.4.1 11 | Input 12 | 13 | NAME 14 | MSMAU 15 | CULTURE_CODE 16 | 0409 17 | 18 | Process 19 | 20 | 21 | Processor 22 | MAUURLandUpdateInfoProvider 23 | Arguments 24 | 25 | culture_code 26 | %CULTURE_CODE% 27 | 28 | 29 | 30 | Processor 31 | URLDownloader 32 | 33 | 34 | Processor 35 | EndOfCheckPhase 36 | 37 | 38 | Processor 39 | CodeSignatureVerifier 40 | Arguments 41 | 42 | input_path 43 | %pathname% 44 | expected_authority_names 45 | 46 | Developer ID Installer: Microsoft Corporation (UBF8T346G9) 47 | Developer ID Certification Authority 48 | Apple Root CA 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /MAU/MAUURLandUpdateInfoProvider.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # 3 | # Copyright 2016 Allister Banks, wholesale lifted from code by Greg Neagle 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | 18 | import plistlib 19 | import urllib2 20 | 21 | from operator import itemgetter 22 | 23 | from autopkglib import Processor, ProcessorError 24 | 25 | 26 | __all__ = ["MAUURLandUpdateInfoProvider"] 27 | 28 | CULTURE_CODE = "0409" 29 | BASE_URL = "https://www.microsoft.com/mac/autoupdate/%sMSau03.xml" 30 | MUNKI_UPDATE_NAME = "Microsoft AutoUpdate" 31 | 32 | class MAUURLandUpdateInfoProvider(Processor): 33 | """Provides a download URL for the most recent version of MAU.""" 34 | input_variables = { 35 | "culture_code": { 36 | "required": False, 37 | "description": ("See " 38 | "http://msdn.microsoft.com/en-us/library/ee825488(v=cs.20).aspx" 39 | " for a table of CultureCodes Defaults to 0409, which " 40 | "corresponds to en-US (English - United States)"), 41 | }, 42 | "base_url": { 43 | "required": False, 44 | "description": ("Default is %s. If this is given, culture_code " 45 | "is ignored." % (BASE_URL % CULTURE_CODE)), 46 | }, 47 | } 48 | output_variables = { 49 | "url": { 50 | "description": "URL to the latest MAU installer.", 51 | }, 52 | "additional_pkginfo": { 53 | "description": 54 | "Some pkginfo fields extracted from the Microsoft metadata.", 55 | }, 56 | "display_name": { 57 | "description": 58 | "The name of the package that includes the version.", 59 | }, 60 | } 61 | description = __doc__ 62 | 63 | def sanityCheckExpectedTriggers(self, item): 64 | """Raises an exeception if the Trigger Condition or 65 | Triggers for an update don't match what we expect. 66 | Protects us if these change in the future.""" 67 | if not item.get("Trigger Condition") == ["and", "Registered File"]: 68 | raise ProcessorError( 69 | "Unexpected Trigger Condition in item %s: %s" 70 | % (item["Title"], item["Trigger Condition"])) 71 | 72 | def getInstallsItems(self, item): 73 | """Attempts to parse the Triggers to create an installs item""" 74 | self.sanityCheckExpectedTriggers(item) 75 | triggers = item.get("Triggers", {}) 76 | paths = [triggers[key].get("File") for key in triggers.keys()] 77 | if "Contents/Info.plist" in paths: 78 | # use the apps info.plist as installs item 79 | installs_item = { 80 | "CFBundleShortVersionString": self.getVersion(item), 81 | "CFBundleVersion": self.getVersion(item), 82 | "path": ("/Library/Application Support/" 83 | "Microsoft/MAU2.0/" 84 | "Microsoft AutoUpdate.app/" 85 | "Contents/Info.plist"), 86 | "type": "bundle", 87 | "version_comparison_key": "CFBundleShortVersionString" 88 | } 89 | return [installs_item] 90 | return None 91 | 92 | def getVersion(self, item): 93 | """Extracts the version of the update item.""" 94 | # currently relies on the item having a title in the format 95 | # "Microsoft AutoUpdate x.y.z " 96 | title = item.get("Title", "") 97 | version_str = title[21:] 98 | return version_str 99 | 100 | def valueToOSVersionString(self, value): 101 | """Converts a value to an OS X version number""" 102 | version_str = '' 103 | if isinstance(value, int): 104 | version_str = hex(value)[2:] 105 | elif isinstance(value, basestring): 106 | if value.startswith('0x'): 107 | version_str = value[2:] 108 | # OS versions are encoded as hex: 109 | # 4184 = 0x1058 = 10.5.8 110 | # not sure how 10.4.11 would be encoded; 111 | # guessing 0x104B ? 112 | major = 0 113 | minor = 0 114 | patch = 0 115 | try: 116 | if len(version_str) == 1: 117 | major = int(version_str[0]) 118 | if len(version_str) > 1: 119 | major = int(version_str[0:2]) 120 | if len(version_str) > 2: 121 | minor = int(version_str[2], 16) 122 | if len(version_str) > 3: 123 | patch = int(version_str[3], 16) 124 | except ValueError: 125 | raise ProcessorError("Unexpected value in version: %s" % value) 126 | return "%s.%s.%s" % (major, minor, patch) 127 | 128 | def get_mauInstaller_info(self): 129 | """Gets info about a MAU installer from MS metadata.""" 130 | if "base_url" in self.env: 131 | base_url = self.env["base_url"] 132 | else: 133 | culture_code = self.env.get("culture_code", CULTURE_CODE) 134 | base_url = BASE_URL % culture_code 135 | # Get metadata URL 136 | req = urllib2.Request(base_url) 137 | # Add the MAU User-Agent, since MAU feed server seems to explicitly block 138 | # a User-Agent of 'Python-urllib/2.7' - even a blank User-Agent string 139 | # passes. 140 | req.add_header("User-Agent", 141 | "Microsoft%20AutoUpdate/3.4 CFNetwork/760.2.6 Darwin/15.4.0 (x86_64)") 142 | try: 143 | f = urllib2.urlopen(req) 144 | data = f.read() 145 | f.close() 146 | except BaseException as err: 147 | raise ProcessorError("Can't download %s: %s" % (base_url, err)) 148 | 149 | metadata = plistlib.readPlistFromString(data) 150 | # MAU 'update' metadata is a list of dicts. 151 | # we need to sort by date. 152 | sorted_metadata = sorted(metadata, key=itemgetter('Date')) 153 | # choose the last item, which should be most recent. 154 | item = sorted_metadata[-1] 155 | 156 | self.env["url"] = item["Location"] 157 | self.env["pkg_name"] = item["Payload"] 158 | self.output("Found URL %s" % self.env["url"]) 159 | self.output("Got update: '%s'" % item["Title"]) 160 | # now extract useful info from the rest of the metadata that could 161 | # be used in a pkginfo 162 | pkginfo = {} 163 | pkginfo["description"] = "%s" % item["Short Description"] 164 | pkginfo["display_name"] = item["Title"] 165 | max_os = self.valueToOSVersionString(item['Max OS']) 166 | min_os = self.valueToOSVersionString(item['Min OS']) 167 | if max_os != "0.0.0": 168 | pkginfo["maximum_os_version"] = max_os 169 | if min_os != "0.0.0": 170 | pkginfo["minimum_os_version"] = min_os 171 | installs_items = self.getInstallsItems(item) 172 | if installs_items: 173 | pkginfo["installs"] = installs_items 174 | 175 | pkginfo['name'] = self.env.get("munki_update_name", MUNKI_UPDATE_NAME) 176 | self.env["additional_pkginfo"] = pkginfo 177 | self.env["display_name"] = pkginfo["display_name"] 178 | self.output("Additional pkginfo: %s" % self.env["additional_pkginfo"]) 179 | 180 | def main(self): 181 | """Get information about an update""" 182 | self.get_mauInstaller_info() 183 | 184 | 185 | if __name__ == "__main__": 186 | processor = MAUURLandUpdateInfoProvider() 187 | processor.execute_shell() 188 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/EA-OfficeAppVersion.xml: -------------------------------------------------------------------------------- 1 | 2 | %JSS_INVENTORY_NAME% 2016 Version 3 | 4 | String 5 | 6 | script 7 | Mac 8 | 31 | 32 | Extension Attributes 33 | Extension Attributes 34 | 35 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/JSS-README.md: -------------------------------------------------------------------------------- 1 | This will help you download the latest standalone installer for an Office App. 2 | 3 | It will: 4 | - create an Extended Attribute that will check each Office App version. 5 | - create a Smart Group that includes computers that don't have this version installed 6 | - create a script that will trigger the policy with the Serializer 7 | - create a Self-Service policy, featured on the main page. 8 | 9 | If you need to serialize your VL installers: 10 | - put your `Microsoft_Office_2016_VL_Serializer.pkg` in payload/ 11 | - make sure `manual_trigger_office.sh` is included in your Office App recipes 12 | - customize `TRIGGER_OTHER` in MSO2016License.jss.recipe 13 | 14 | 15 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MSO2016License.jss.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Installes MS Office 2016 VL License 7 | Identifier 8 | com.github.autopkg.microsoft-recipes.2016SuiteStandalone.jss.MSO2016License 9 | Input 10 | 11 | 12 | NAME 13 | Microsoft Office License 14 | VERSION 15 | 1.0 16 | 17 | 18 | INTERNAL_NAME 19 | MSO2016License 20 | 21 | 22 | CATEGORY 23 | Productivity 24 | 25 | 26 | POLICY_CATEGORY 27 | Productivity 28 | 29 | 30 | GROUP_TEMPLATE 31 | SG-PackageInstalledByCasper.xml 32 | 33 | 34 | POLICY_TEMPLATE 35 | P-OtherTrigger.xml 36 | 37 | TRIGGER_OTHER 38 | office-license 39 | 40 | FREQUENCY 41 | ongoing 42 | 43 | 44 | MinimumVersion 45 | 0.4.0 46 | Process 47 | 48 | 49 | Processor 50 | PkgCopier 51 | Arguments 52 | 53 | pkg_path 54 | %RECIPE_CACHE_DIR%/%INTERNAL_NAME%-%VERSION%.pkg 55 | source_pkg 56 | %RECIPE_DIR%/payload/Microsoft_Office_2016_VL_Serializer.pkg 57 | 58 | 59 | 60 | Arguments 61 | 62 | pkg_path 63 | %pkg_path% 64 | version 65 | %VERSION% 66 | prod_name 67 | %NAME% 68 | category 69 | %CATEGORY% 70 | policy_category 71 | %POLICY_CATEGORY% 72 | policy_template 73 | %POLICY_TEMPLATE% 74 | groups 75 | 76 | 77 | name 78 | %INTERNAL_NAME%-smart 79 | smart 80 | 81 | template_path 82 | %GROUP_TEMPLATE% 83 | 84 | 85 | 86 | Processor 87 | JSSImporter 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MSOffice2016URLandUpdateInfoProvider.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # 3 | # Copyright 2015 Allister Banks and Tim Sutton, 4 | # based on MSOffice2011UpdateInfoProvider by Greg Neagle 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # Disabling 'no-env-member' for recipe processors 18 | #pylint:disable=e1101 19 | """See docstring for MSOffice2016URLandUpdateInfoProvider class""" 20 | 21 | import plistlib 22 | import re 23 | import urllib2 24 | 25 | from autopkglib import Processor, ProcessorError 26 | 27 | 28 | __all__ = ["MSOffice2016URLandUpdateInfoProvider"] 29 | 30 | # CULTURE_CODE defaulting to 'en-US' as the installers and updates seem to be 31 | # multilingual. Only Production (vs. Insider Slow/Fast) option available 32 | CULTURE_CODE = "0409" 33 | BASE_URL = "https://officecdn.microsoft.com/pr/C1297A47-86C4-4C1F-97FA-950631F94777/OfficeMac/%s15.xml" 34 | PROD_DICT = { 35 | 'Excel':'XCEL', 36 | 'OneNote':'ONMC', 37 | 'Outlook':'OPIM', 38 | 'PowerPoint':'PPT3', 39 | 'Word':'MSWD', 40 | } 41 | LOCALE_ID_INFO_URL = "https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx" 42 | SUPPORTED_TYPES = ["Combo", "Delta", "Standalone"] 43 | DEFAULT_TYPE = "Combo" 44 | 45 | class MSOffice2016URLandUpdateInfoProvider(Processor): 46 | """Provides a download URL for the most recent version of MS Office 2016.""" 47 | input_variables = { 48 | "locale_id": { 49 | "required": False, 50 | "default": "1033", 51 | "description": ( 52 | "Locale ID that determines the language " 53 | "that is retrieved from the metadata, currently only " 54 | "used by the update description. See %s " 55 | "for a list of locale codes. The default is en-US." 56 | % LOCALE_ID_INFO_URL) 57 | }, 58 | "product": { 59 | "required": True, 60 | "description": "Name of product to fetch, e.g. Excel.", 61 | }, 62 | "type": { 63 | "required": False, 64 | "default": DEFAULT_TYPE, 65 | "description": ("Update type to fetch. Supported values are: " 66 | "'%s'. Defaults to %s." 67 | % ("', '".join(SUPPORTED_TYPES), 68 | DEFAULT_TYPE)), 69 | }, 70 | "munki_required_update_name": { 71 | "required": False, 72 | "default": "", 73 | "description": 74 | ("If the update is a delta, a 'requires' key will be set " 75 | "according to the minimum version defined in the MS " 76 | "metadata. If this key is set, this name will be used " 77 | "for the required item. If unset, NAME will be used.") 78 | }, 79 | } 80 | output_variables = { 81 | "additional_pkginfo": { 82 | "description": 83 | "Some pkginfo fields extracted from the Microsoft metadata.", 84 | }, 85 | "description": { 86 | "description": 87 | "Description of the update from the manifest, in the language " 88 | "given by the locale_id input variable.", 89 | }, 90 | "version": { 91 | "description": 92 | ("The version of the update as extracted from the Microsoft " 93 | "metadata.") 94 | }, 95 | "minimum_os_version": { 96 | "description": 97 | ("The minimum os version required by the update as extracted " 98 | "from the Microsoft metadata.") 99 | }, 100 | "minimum_version_for_delta": { 101 | "description": 102 | ("If this update is a delta, this value will be set to the " 103 | "minimum required application version to which this delta " 104 | "can be applied. Otherwise it will be an empty string.") 105 | }, 106 | "url": { 107 | "description": "URL to the latest requested installer.", 108 | }, 109 | } 110 | description = __doc__ 111 | min_delta_version = "" 112 | 113 | def sanity_check_expected_triggers(self, item): 114 | """Raises an exeception if the Trigger Condition or 115 | Triggers for an update don't match what we expect. 116 | Protects us if these change in the future.""" 117 | # MS currently uses "Registered File" placeholders, which get replaced 118 | # with the bundle of a given application ID. In other words, this is 119 | # the bundle version of the app itself. 120 | if not item.get("Trigger Condition") == ["and", "Registered File"]: 121 | raise ProcessorError( 122 | "Unexpected Trigger Condition in item %s: %s" 123 | % (item["Title"], item["Trigger Condition"])) 124 | if not "Registered File" in item.get("Triggers", {}): 125 | raise ProcessorError( 126 | "Missing expected 'and Registered File' Trigger in item " 127 | "%s" % item["Title"]) 128 | 129 | def get_installs_items(self, item): 130 | """Attempts to parse the Triggers to create an installs item using 131 | only manifest data, making the assumption that CFBundleVersion and 132 | CFBundleShortVersionString are equal.""" 133 | self.sanity_check_expected_triggers(item) 134 | version = self.get_version(item) 135 | installs_item = { 136 | "CFBundleShortVersionString": version, 137 | "CFBundleVersion": version, 138 | "path": ("/Applications/Microsoft %s.app" % self.env["product"]), 139 | "type": "application", 140 | } 141 | return [installs_item] 142 | 143 | def get_version(self, item): 144 | """Extracts the version of the update item.""" 145 | # We currently expect the version at the end of the Title key, 146 | # e.g.: "Microsoft Excel Update 15.10.0" 147 | # Work backwards from the end and break on the first thing 148 | # that looks like a version 149 | match = None 150 | for element in reversed(item["Title"].split()): 151 | match = re.match(r"(\d+\.\d+(\.\d)*)", element) 152 | if match: 153 | break 154 | if not match: 155 | raise ProcessorError( 156 | "Error validating Office 2016 version extracted " 157 | "from Title manifest value: '%s'" % item["Title"]) 158 | version = match.group(0) 159 | return version 160 | 161 | def value_to_os_version_string(self, value): 162 | """Converts a value to an OS X version number""" 163 | version_str = '' 164 | if isinstance(value, int): 165 | version_str = hex(value)[2:] 166 | elif isinstance(value, basestring): 167 | if value.startswith('0x'): 168 | version_str = value[2:] 169 | # OS versions are encoded as hex: 170 | # 4184 = 0x1058 = 10.5.8 171 | major = 0 172 | minor = 0 173 | patch = 0 174 | try: 175 | if len(version_str) == 1: 176 | major = int(version_str[0]) 177 | if len(version_str) > 1: 178 | major = int(version_str[0:2]) 179 | if len(version_str) > 2: 180 | minor = int(version_str[2], 16) 181 | if len(version_str) > 3: 182 | patch = int(version_str[3], 16) 183 | except ValueError: 184 | raise ProcessorError("Unexpected value in version: %s" % value) 185 | return "%s.%s.%s" % (major, minor, patch) 186 | 187 | def get_installer_info(self): 188 | """Gets info about an installer from MS metadata.""" 189 | base_url = BASE_URL % (CULTURE_CODE + PROD_DICT[self.env["product"]]) 190 | # Get metadata URL 191 | req = urllib2.Request(base_url) 192 | # Add the MAU User-Agent, since MAU feed server seems to explicitly 193 | # block a User-Agent of 'Python-urllib/2.7' - even a blank User-Agent 194 | # string passes. 195 | req.add_header("User-Agent", 196 | "Microsoft%20AutoUpdate/3.6.16080300 CFNetwork/760.6.3 Darwin/15.6.0 (x86_64)") 197 | 198 | try: 199 | fdesc = urllib2.urlopen(req) 200 | data = fdesc.read() 201 | fdesc.close() 202 | except BaseException as err: 203 | raise ProcessorError("Can't download %s: %s" % (base_url, err)) 204 | 205 | self.output(self.env["type"]) 206 | metadata = plistlib.readPlistFromString(data) 207 | item = {} 208 | # Update feeds for a given 'channel' will have either combo or delta 209 | # pkg urls, with delta's additionally having a 'FullUpdaterLocation' key. 210 | # We populate the item dict with the appropriate section of the metadata 211 | # output, and do string replacement on the pattern of the URL in the 212 | # case of a Standalone app request. 213 | if self.env["type"] == "Combo" or self.env["type"] == "Standalone": 214 | item = [u for u in metadata if not u.get("FullUpdaterLocation")] 215 | elif self.env["type"] == "Delta": 216 | item = [u for u in metadata if u.get("FullUpdaterLocation")] 217 | if not item: 218 | raise ProcessorError("Could not find an applicable update in " 219 | "update metadata.") 220 | item = item[0] 221 | 222 | if self.env["type"] == "Standalone": 223 | p = re.compile(ur'(^[a-zA-Z0-9:/.-]*_[a-zA-Z]*_)(.*)Updater.pkg') 224 | url = item["Location"] 225 | (firstGroup, secondGroup) = re.search(p, url).group(1, 2) 226 | item["Location"] = firstGroup + "2016_"+ secondGroup + "Installer.pkg" 227 | 228 | self.env["url"] = item["Location"] 229 | self.output("Found URL %s" % self.env["url"]) 230 | 231 | if self.env["type"] == "Combo" or self.env["type"] == "Delta": 232 | self.output("Got update: '%s'" % item["Title"]) 233 | 234 | # now extract useful info from the rest of the metadata that could 235 | # be used in a pkginfo 236 | pkginfo = {} 237 | # Get a copy of the description in our locale_id 238 | all_localizations = item.get("Localized") 239 | lcid = self.env["locale_id"] 240 | if lcid not in all_localizations: 241 | raise ProcessorError( 242 | "Locale ID %s not found in manifest metadata. Available IDs: " 243 | "%s. See %s for more details." % ( 244 | lcid, 245 | ", ".join(all_localizations.keys()), 246 | LOCALE_ID_INFO_URL)) 247 | manifest_description = all_localizations[lcid]['Short Description'] 248 | # Store the description in a separate output variable and in our pkginfo 249 | # directly. 250 | pkginfo["description"] = "%s" % manifest_description 251 | self.env["description"] = manifest_description 252 | 253 | max_os = self.value_to_os_version_string(item['Max OS']) 254 | min_os = self.value_to_os_version_string(item['Min OS']) 255 | if max_os != "0.0.0": 256 | pkginfo["maximum_os_version"] = max_os 257 | if min_os != "0.0.0": 258 | pkginfo["minimum_os_version"] = min_os 259 | installs_items = self.get_installs_items(item) 260 | if installs_items: 261 | pkginfo["installs"] = installs_items 262 | 263 | # Extra work to do if this is a delta updater 264 | if self.env["type"] == "Delta": 265 | try: 266 | rel_versions = item["Triggers"]["Registered File"]["VersionsRelative"] 267 | except KeyError: 268 | raise ProcessorError("Can't find expected VersionsRelative" 269 | "keys for determining minimum update " 270 | "required for delta update.") 271 | for expression in rel_versions: 272 | operator, ver_eval = expression.split() 273 | if operator == ">=": 274 | self.min_delta_version = ver_eval 275 | break 276 | if not self.min_delta_version: 277 | raise ProcessorError("Not able to determine minimum required " 278 | "version for delta update.") 279 | # Put minimum_update_version into installs item 280 | self.output("Adding minimum required version: %s" % 281 | self.min_delta_version) 282 | pkginfo["installs"][0]["minimum_update_version"] = \ 283 | self.min_delta_version 284 | required_update_name = self.env["NAME"] 285 | if self.env["munki_required_update_name"]: 286 | required_update_name = self.env["munki_required_update_name"] 287 | # Add 'requires' array 288 | pkginfo["requires"] = ["%s-%s" % (required_update_name, 289 | self.min_delta_version)] 290 | 291 | self.env["version"] = self.get_version(item) 292 | self.env["minimum_os_version"] = min_os 293 | self.env["minimum_version_for_delta"] = self.min_delta_version 294 | self.env["additional_pkginfo"] = pkginfo 295 | self.env["url"] = item["Location"] 296 | self.output("Additional pkginfo: %s" % self.env["additional_pkginfo"]) 297 | 298 | def main(self): 299 | """Get information about an update""" 300 | if self.env["type"] not in SUPPORTED_TYPES: 301 | raise ProcessorError("Invalid type: supported values are '%s'" 302 | % "', '".join(SUPPORTED_TYPES)) 303 | self.get_installer_info() 304 | 305 | 306 | if __name__ == "__main__": 307 | PROCESSOR = MSOffice2016URLandUpdateInfoProvider() 308 | PROCESSOR.execute_shell() 309 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftExcel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arubdesu/microsoft-recipes/677aaa3a8b82f25fbb7c130177095d6c7841a03f/Office2016-IndividualApps/MicrosoftExcel.png -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftExcel2016.download.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Excel 2016 update (or standalone) pkg, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', 'Delta', and 'Standalone' options. 15 | 16 | Identifier 17 | com.github.autopkg.microsoft-recipes.download.MicrosoftExcel 18 | Input 19 | 20 | NAME 21 | Microsoft Excel 22 | MSLOCALE 23 | 1033 24 | MSPRODUCT 25 | Excel 26 | MSTYPE 27 | Combo 28 | 29 | SHORTNAME 30 | MicrosoftExcel 31 | 32 | MinimumVersion 33 | 0.4.2 34 | Process 35 | 36 | 37 | Processor 38 | MSOffice2016URLandUpdateInfoProvider 39 | Arguments 40 | 41 | locale_id 42 | %MSLOCALE% 43 | product 44 | %MSPRODUCT% 45 | type 46 | %MSTYPE% 47 | 48 | 49 | 50 | Processor 51 | URLDownloader 52 | Arguments 53 | 54 | filename 55 | %SHORTNAME%-%MSTYPE%-%version%.pkg 56 | 57 | 58 | 59 | Processor 60 | EndOfCheckPhase 61 | 62 | 63 | Processor 64 | CodeSignatureVerifier 65 | Arguments 66 | 67 | input_path 68 | %pathname% 69 | expected_authority_names 70 | 71 | Developer ID Installer: Microsoft Corporation 72 | Developer ID Certification Authority 73 | Apple Root CA 74 | 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftExcel2016.ds.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Excel 2016 update (or standalone) package and then 7 | copies the package to the DeployStudio packages repository. 8 | Requires the microsoft-recipes repo (currently https://github.com/arubdesu/microsoft-recipes, 9 | eventually to be merged into autopkg/microsoft-recipes). 10 | 11 | Input keys from the parent recipe: 12 | - MSLOCALE sets the locale for a descriptive text that will be 13 | extracted from the Microsoft update metadata. See 14 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 15 | for more information about locale IDs. Defaults to 1033 for English. 16 | - MSTYPE supports 'Combo', 'Delta', and 'Standalone' options. 17 | 18 | Input keys from this recipe: 19 | - DS_PKGS_PATH is the path for the Packages folder in the DeployStudio repository (trailing slash not required/desired). 20 | The path does not need to be on the same volume as the cache, as the pkg is being duplicated. 21 | - DS_NAME is what the final package will be called in DeployStudio, regardless of what was generated by the parent recipe. 22 | It defaults to "%NAME% %MSTYPE%" (e.g., Microsoft Excel Combo), in case you wish to override this 23 | recipe more than once (e.g., for both Standalone and Combo). 24 | 25 | Identifier 26 | com.github.autopkg.microsoft-recipes.ds.MicrosoftExcel 27 | Input 28 | 29 | DS_PKGS_PATH 30 | /Volumes/DSServer/Users/Shared/Deploy/Packages 31 | DS_NAME 32 | %NAME% %MSTYPE% 33 | 34 | MinimumVersion 35 | 0.4.2 36 | ParentRecipe 37 | com.github.autopkg.microsoft-recipes.download.MicrosoftExcel 38 | Process 39 | 40 | 41 | Processor 42 | StopProcessingIf 43 | Arguments 44 | 45 | predicate 46 | download_changed == FALSE 47 | 48 | 49 | 50 | Processor 51 | Copier 52 | Arguments 53 | 54 | source_path 55 | %pathname% 56 | destination_path 57 | %DS_PKGS_PATH%/%DS_NAME%.pkg 58 | overwrite 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftExcel2016.install.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads and installs the latest Microsoft Excel 2016 'Standalone' version. 7 | Identifier 8 | com.github.autopkg.microsoft-recipes.install.MicrosoftExcel 9 | Input 10 | 11 | MSTYPE 12 | Standalone 13 | 14 | MinimumVersion 15 | 0.4.2 16 | ParentRecipe 17 | com.github.autopkg.microsoft-recipes.download.MicrosoftExcel 18 | Process 19 | 20 | 21 | Processor 22 | Installer 23 | Arguments 24 | 25 | pkg_path 26 | %pathname% 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftExcel2016.jss.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Identifier 6 | com.github.autopkg.microsoft-recipes.jss.MicrosoftExcel 7 | Input 8 | 9 | 10 | EA_TEMPLATE 11 | EA-OfficeAppVersion.xml 12 | 13 | 14 | SCRIPT_FILENAME 15 | manual_trigger_office.sh 16 | SCRIPT_TEMPLATE 17 | S-Standard.xml 18 | 19 | 20 | GROUP_NAME 21 | %SHORTNAME%-install-smart 22 | GROUP_TEMPLATE 23 | SG-ExtendedAttributeOffice.xml 24 | 25 | 26 | POLICY_CATEGORY 27 | Productivity 28 | POLICY_TEMPLATE 29 | P-SelfService.xml 30 | 31 | 32 | OS_REQUIREMENTS 33 | 10.11.x,10.10.x 34 | CATEGORY 35 | Productivity 36 | 37 | 38 | SELF_SERVICE_DESCRIPTION 39 | Microsoft Excel is a graphical Excel processing program that users can type with. It is made by the computer company Microsoft. The purpose of the MS Excel is to allow the users to type and save documents. 40 | SELF_SERVICE_ICON 41 | MicrosoftExcel.png 42 | FEATURED 43 | True 44 | 45 | ParentRecipe 46 | com.github.autopkg.microsoft-recipes.download.MicrosoftExcel 47 | MinimumVersion 48 | 0.4.2 49 | Process 50 | 51 | 52 | Processor 53 | JSSImporter 54 | Arguments 55 | 56 | 57 | extension_attributes 58 | 59 | 60 | ext_attribute_path 61 | %EA_TEMPLATE% 62 | 63 | 64 | scripts 65 | 66 | 67 | name 68 | %SCRIPT_FILENAME% 69 | template_path 70 | %SCRIPT_TEMPLATE% 71 | 72 | 73 | groups 74 | 75 | 76 | name 77 | %GROUP_NAME% 78 | smart 79 | 80 | template_path 81 | %GROUP_TEMPLATE% 82 | 83 | 84 | 85 | 86 | prod_name 87 | %NAME% 88 | category 89 | %CATEGORY% 90 | os_requirements 91 | %OS_REQUIREMENTS% 92 | pkg_path 93 | %pathname% 94 | 95 | 96 | policy_category 97 | %POLICY_CATEGORY% 98 | policy_template 99 | %POLICY_TEMPLATE% 100 | 101 | 102 | self_service_description 103 | %SELF_SERVICE_DESCRIPTION% 104 | self_service_icon 105 | %SELF_SERVICE_ICON% 106 | 107 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftExcel2016.lanrev.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Excel 2016 update (or standalone) pkg and uploads to LANrev, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', 'Delta', and 'Standalone' options. 15 | Identifier 16 | com.github.autopkg.microsoft-recipes.lanrev.MicrosoftExcel 17 | Input 18 | 19 | MSLOCALE 20 | 1033 21 | MSPRODUCT 22 | Excel 23 | MSTYPE 24 | Combo 25 | NAME 26 | Microsoft Excel 27 | min_os 28 | OSX10.10 29 | 30 | MinimumVersion 31 | 0.4.2 32 | ParentRecipe 33 | com.github.autopkg.microsoft-recipes.download.MicrosoftExcel 34 | Process 35 | 36 | 37 | Arguments 38 | 39 | dest_payload_path 40 | %RECIPE_CACHE_DIR%/%NAME%-%version%.amsdpackages 41 | import_pkg_to_servercenter 42 | 43 | sdpackages_ampkgprops_path 44 | %RECIPE_DIR%/%NAME%-Defaults.ampkgprops 45 | source_payload_path 46 | %pathname% 47 | 48 | Processor 49 | com.github.jbaker10.LANrevImporter/LANrevImporter 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftExcel2016.munki.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Excel 2016 update (or standalone) pkg, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', 'Delta', and 'Standalone' options. Default is Combo. 15 | 16 | Identifier 17 | com.github.autopkg.microsoft-recipes.munki.MicrosoftExcel 18 | MinimumVersion 19 | 0.4.2 20 | Input 21 | 22 | NAME 23 | Microsoft Excel 24 | MSLOCALE 25 | 1033 26 | MSPRODUCT 27 | Excel 28 | MSTYPE 29 | Combo 30 | MUNKI_REPO_SUBDIR 31 | apps 32 | pkginfo 33 | 34 | blocking_applications 35 | 36 | Microsoft Excel 37 | Microsoft Error Reporting 38 | Microsoft AutoUpdate 39 | 40 | catalogs 41 | 42 | testing 43 | 44 | name 45 | %NAME%_%MSTYPE% 46 | unattended_install 47 | 48 | 49 | 50 | ParentRecipe 51 | com.github.autopkg.microsoft-recipes.download.MicrosoftExcel 52 | Process 53 | 54 | 55 | Comment 56 | Merge input pkginfo and additional_pkginfo generated by MSOffice2016URLandUpdateInfoProvider 57 | Processor 58 | MunkiPkginfoMerger 59 | 60 | 61 | Arguments 62 | 63 | pkg_path 64 | %pathname% 65 | repo_subdirectory 66 | %MUNKI_REPO_SUBDIR% 67 | 68 | Processor 69 | MunkiImporter 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftOneNote2016.download.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest OneNote 2016 update pkg, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', and 'Delta' options. (No Standalone download available for OneNote.) 15 | 16 | Identifier 17 | com.github.autopkg.microsoft-recipes.download.MicrosoftOneNote 18 | Input 19 | 20 | NAME 21 | Microsoft OneNote 22 | MSLOCALE 23 | 1033 24 | MSPRODUCT 25 | OneNote 26 | MSTYPE 27 | Combo 28 | 29 | SHORTNAME 30 | MicrosoftOneNote 31 | 32 | MinimumVersion 33 | 0.4.2 34 | Process 35 | 36 | 37 | Processor 38 | MSOffice2016URLandUpdateInfoProvider 39 | Arguments 40 | 41 | locale_id 42 | %MSLOCALE% 43 | product 44 | %MSPRODUCT% 45 | type 46 | %MSTYPE% 47 | 48 | 49 | 50 | Processor 51 | URLDownloader 52 | Arguments 53 | 54 | filename 55 | %SHORTNAME%-%MSTYPE%-%version%.pkg 56 | 57 | 58 | 59 | Processor 60 | EndOfCheckPhase 61 | 62 | 63 | Processor 64 | CodeSignatureVerifier 65 | Arguments 66 | 67 | input_path 68 | %pathname% 69 | expected_authority_names 70 | 71 | Developer ID Installer: Microsoft Corporation (UBF8T346G9) 72 | Developer ID Certification Authority 73 | Apple Root CA 74 | 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftOneNote2016.ds.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest OneNote 2016 update package and then 7 | copies the package to the DeployStudio packages repository. 8 | Requires the microsoft-recipes repo (currently https://github.com/arubdesu/microsoft-recipes, 9 | eventually to be merged into autopkg/microsoft-recipes). 10 | 11 | Input keys from the parent recipe: 12 | - MSLOCALE sets the locale for a descriptive text that will be 13 | extracted from the Microsoft update metadata. See 14 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 15 | for more information about locale IDs. Defaults to 1033 for English. 16 | - MSTYPE supports 'Combo', and 'Delta' options. (No Standalone download available for OneNote.) 17 | 18 | Input keys from this recipe: 19 | - DS_PKGS_PATH is the path for the Packages folder in the DeployStudio repository (trailing slash not required/desired). 20 | The path does not need to be on the same volume as the cache, as the pkg is being duplicated. 21 | - DS_NAME is what the final package will be called in DeployStudio, regardless of what was generated by the parent recipe. 22 | It defaults to "%NAME% %MSTYPE%" (e.g., Microsoft OneNote Combo), in case you wish to override this 23 | recipe more than once (e.g., for both Delta and Combo). 24 | 25 | Identifier 26 | com.github.autopkg.microsoft-recipes.ds.MicrosoftOneNote 27 | Input 28 | 29 | DS_PKGS_PATH 30 | /Volumes/DSServer/Users/Shared/Deploy/Packages 31 | DS_NAME 32 | %NAME% %MSTYPE% 33 | 34 | MinimumVersion 35 | 0.4.2 36 | ParentRecipe 37 | com.github.autopkg.microsoft-recipes.download.MicrosoftOneNote 38 | Process 39 | 40 | 41 | Processor 42 | StopProcessingIf 43 | Arguments 44 | 45 | predicate 46 | download_changed == FALSE 47 | 48 | 49 | 50 | Processor 51 | Copier 52 | Arguments 53 | 54 | source_path 55 | %pathname% 56 | destination_path 57 | %DS_PKGS_PATH%/%DS_NAME%.pkg 58 | overwrite 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftOneNote2016.lanrev.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest OneNote 2016 update (or standalone) pkg and uploads to LANrev, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', and 'Delta' options. (No Standalone download available for OneNote) 15 | Identifier 16 | com.github.autopkg.microsoft-recipes.lanrev.MicrosoftOneNote 17 | Input 18 | 19 | MSLOCALE 20 | 1033 21 | MSPRODUCT 22 | Excel 23 | MSTYPE 24 | Combo 25 | NAME 26 | Microsoft Excel 27 | min_os 28 | OSX10.10 29 | 30 | MinimumVersion 31 | 0.4.0 32 | ParentRecipe 33 | com.github.autopkg.microsoft-recipes.download.MicrosoftOneNote 34 | Process 35 | 36 | 37 | Arguments 38 | 39 | dest_payload_path 40 | %RECIPE_CACHE_DIR%/%NAME%-%version%.amsdpackages 41 | import_pkg_to_servercenter 42 | 43 | sdpackages_ampkgprops_path 44 | %RECIPE_DIR%/%NAME%-Defaults.ampkgprops 45 | source_payload_path 46 | %pathname% 47 | 48 | Processor 49 | com.github.jbaker10.LANrevImporter/LANrevImporter 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftOneNote2016.munki.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest OneNote 2016 update (or standalone) pkg, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', 'Delta', and 'Standalone' options. Default is Combo. 15 | 16 | Identifier 17 | com.github.autopkg.microsoft-recipes.munki.MicrosoftOneNote 18 | MinimumVersion 19 | 0.4.2 20 | Input 21 | 22 | NAME 23 | Microsoft OneNote 24 | MSLOCALE 25 | 1033 26 | MSPRODUCT 27 | OneNote 28 | MSTYPE 29 | Combo 30 | MUNKI_REPO_SUBDIR 31 | apps 32 | pkginfo 33 | 34 | blocking_applications 35 | 36 | Microsoft OneNote 37 | Microsoft Error Reporting 38 | Microsoft AutoUpdate 39 | 40 | catalogs 41 | 42 | testing 43 | 44 | name 45 | %NAME%_%MSTYPE% 46 | unattended_install 47 | 48 | 49 | 50 | ParentRecipe 51 | com.github.autopkg.microsoft-recipes.download.MicrosoftOneNote 52 | Process 53 | 54 | 55 | Comment 56 | Merge input pkginfo and additional_pkginfo generated by MSOffice2016URLandUpdateInfoProvider 57 | Processor 58 | MunkiPkginfoMerger 59 | 60 | 61 | Arguments 62 | 63 | pkg_path 64 | %pathname% 65 | repo_subdirectory 66 | %MUNKI_REPO_SUBDIR% 67 | 68 | Processor 69 | MunkiImporter 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftOutlook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arubdesu/microsoft-recipes/677aaa3a8b82f25fbb7c130177095d6c7841a03f/Office2016-IndividualApps/MicrosoftOutlook.png -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftOutlook2016.download.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Outlook 2016 update (or standalone) pkg, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', 'Delta', and 'Standalone' options. Default is Combo. 15 | 16 | Identifier 17 | com.github.autopkg.microsoft-recipes.download.MicrosoftOutlook 18 | Input 19 | 20 | NAME 21 | Microsoft Outlook 22 | MSLOCALE 23 | 1033 24 | MSPRODUCT 25 | Outlook 26 | MSTYPE 27 | Combo 28 | 29 | SHORTNAME 30 | MicrosoftOutlook 31 | 32 | MinimumVersion 33 | 0.4.2 34 | Process 35 | 36 | 37 | Processor 38 | MSOffice2016URLandUpdateInfoProvider 39 | Arguments 40 | 41 | locale_id 42 | %MSLOCALE% 43 | product 44 | %MSPRODUCT% 45 | type 46 | %MSTYPE% 47 | 48 | 49 | 50 | Processor 51 | URLDownloader 52 | Arguments 53 | 54 | filename 55 | %SHORTNAME%-%MSTYPE%-%version%.pkg 56 | 57 | 58 | 59 | Processor 60 | EndOfCheckPhase 61 | 62 | 63 | Processor 64 | CodeSignatureVerifier 65 | Arguments 66 | 67 | input_path 68 | %pathname% 69 | expected_authority_names 70 | 71 | Developer ID Installer: Microsoft Corporation (UBF8T346G9) 72 | Developer ID Certification Authority 73 | Apple Root CA 74 | 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftOutlook2016.ds.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Outlook 2016 update (or standalone) package and then 7 | copies the package to the DeployStudio packages repository. 8 | Requires the microsoft-recipes repo (currently https://github.com/arubdesu/microsoft-recipes, 9 | eventually to be merged into autopkg/microsoft-recipes). 10 | 11 | Input keys from the parent recipe: 12 | - MSLOCALE sets the locale for a descriptive text that will be 13 | extracted from the Microsoft update metadata. See 14 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 15 | for more information about locale IDs. Defaults to 1033 for English. 16 | - MSTYPE supports 'Combo', 'Delta', and 'Standalone' options. 17 | 18 | Input keys from this recipe: 19 | - DS_PKGS_PATH is the path for the Packages folder in the DeployStudio repository (trailing slash not required/desired). 20 | The path does not need to be on the same volume as the cache, as the pkg is being duplicated. 21 | - DS_NAME is what the final package will be called in DeployStudio, regardless of what was generated by the parent recipe. 22 | It defaults to "%NAME% %MSTYPE%" (e.g., Microsoft Outlook Combo), in case you wish to override this 23 | recipe more than once (e.g., for both Standalone and Combo). 24 | 25 | Identifier 26 | com.github.autopkg.microsoft-recipes.ds.MicrosoftOutlook 27 | Input 28 | 29 | DS_PKGS_PATH 30 | /Volumes/DSServer/Users/Shared/Deploy/Packages 31 | DS_NAME 32 | %NAME% %MSTYPE% 33 | 34 | MinimumVersion 35 | 0.4.2 36 | ParentRecipe 37 | com.github.autopkg.microsoft-recipes.download.MicrosoftOutlook 38 | Process 39 | 40 | 41 | Processor 42 | StopProcessingIf 43 | Arguments 44 | 45 | predicate 46 | download_changed == FALSE 47 | 48 | 49 | 50 | Processor 51 | Copier 52 | Arguments 53 | 54 | source_path 55 | %pathname% 56 | destination_path 57 | %DS_PKGS_PATH%/%DS_NAME%.pkg 58 | overwrite 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftOutlook2016.install.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads and installs the latest Microsoft Outlook 2016 'Standalone' version. 7 | Identifier 8 | com.github.autopkg.microsoft-recipes.install.MicrosoftOutlook 9 | Input 10 | 11 | MSTYPE 12 | Standalone 13 | 14 | MinimumVersion 15 | 0.4.2 16 | ParentRecipe 17 | com.github.autopkg.microsoft-recipes.download.MicrosoftOutlook 18 | Process 19 | 20 | 21 | Processor 22 | Installer 23 | Arguments 24 | 25 | pkg_path 26 | %pathname% 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftOutlook2016.jss.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Identifier 6 | com.github.autopkg.microsoft-recipes.jss.MicrosoftOutlook 7 | Input 8 | 9 | 10 | EA_TEMPLATE 11 | EA-OfficeAppVersion.xml 12 | 13 | 14 | SCRIPT_FILENAME 15 | manual_trigger_office.sh 16 | SCRIPT_TEMPLATE 17 | S-Standard.xml 18 | 19 | 20 | GROUP_NAME 21 | %SHORTNAME%-install-smart 22 | GROUP_TEMPLATE 23 | SG-ExtendedAttributeOffice.xml 24 | 25 | 26 | POLICY_CATEGORY 27 | Productivity 28 | POLICY_TEMPLATE 29 | P-SelfService.xml 30 | 31 | 32 | OS_REQUIREMENTS 33 | 10.11.x,10.10.x 34 | CATEGORY 35 | Productivity 36 | 37 | 38 | SELF_SERVICE_DESCRIPTION 39 | Microsoft Outlook. 40 | SELF_SERVICE_ICON 41 | MicrosoftOutlook.png 42 | FEATURED 43 | True 44 | 45 | ParentRecipe 46 | com.github.autopkg.microsoft-recipes.download.MicrosoftOutlook 47 | MinimumVersion 48 | 0.4.2 49 | Process 50 | 51 | 52 | Processor 53 | JSSImporter 54 | Arguments 55 | 56 | 57 | extension_attributes 58 | 59 | 60 | ext_attribute_path 61 | %EA_TEMPLATE% 62 | 63 | 64 | scripts 65 | 66 | 67 | name 68 | %SCRIPT_FILENAME% 69 | template_path 70 | %SCRIPT_TEMPLATE% 71 | 72 | 73 | groups 74 | 75 | 76 | name 77 | %GROUP_NAME% 78 | smart 79 | 80 | template_path 81 | %GROUP_TEMPLATE% 82 | 83 | 84 | 85 | 86 | prod_name 87 | %NAME% 88 | category 89 | %CATEGORY% 90 | os_requirements 91 | %OS_REQUIREMENTS% 92 | pkg_path 93 | %pathname% 94 | 95 | 96 | policy_category 97 | %POLICY_CATEGORY% 98 | policy_template 99 | %POLICY_TEMPLATE% 100 | 101 | 102 | self_service_description 103 | %SELF_SERVICE_DESCRIPTION% 104 | self_service_icon 105 | %SELF_SERVICE_ICON% 106 | 107 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftOutlook2016.lanrev.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Outlook 2016 update (or standalone) pkg and uploads to LANrev, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', 'Delta', and 'Standalone' options. Default is Combo. 15 | 16 | Identifier 17 | com.github.autopkg.microsoft-recipes.lanrev.MicrosoftOutlook 18 | Input 19 | 20 | MSLOCALE 21 | 1033 22 | MSPRODUCT 23 | Outlook 24 | MSTYPE 25 | Combo 26 | NAME 27 | Microsoft Outlook 28 | min_os 29 | OSX10.10 30 | 31 | MinimumVersion 32 | 0.4.0 33 | ParentRecipe 34 | com.github.autopkg.microsoft-recipes.download.MicrosoftOutlook 35 | Process 36 | 37 | 38 | Arguments 39 | 40 | dest_payload_path 41 | %RECIPE_CACHE_DIR%/%NAME%-%version%.amsdpackages 42 | import_pkg_to_servercenter 43 | 44 | sdpackages_ampkgprops_path 45 | %RECIPE_DIR%/%NAME%-Defaults.ampkgprops 46 | source_payload_path 47 | %pathname% 48 | 49 | Processor 50 | com.github.jbaker10.LANrevImporter/LANrevImporter 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftOutlook2016.munki.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Outlook 2016 update (or standalone) pkg, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', 'Delta', and 'Standalone' options. Default is Combo. 15 | 16 | Identifier 17 | com.github.autopkg.microsoft-recipes.munki.MicrosoftOutlook 18 | MinimumVersion 19 | 0.4.2 20 | Input 21 | 22 | NAME 23 | Microsoft Outlook 24 | MSLOCALE 25 | 1033 26 | MSPRODUCT 27 | Outlook 28 | MSTYPE 29 | Combo 30 | MUNKI_REPO_SUBDIR 31 | apps 32 | pkginfo 33 | 34 | blocking_applications 35 | 36 | Microsoft Outlook 37 | Microsoft Error Reporting 38 | Microsoft AutoUpdate 39 | 40 | catalogs 41 | 42 | testing 43 | 44 | name 45 | %NAME%_%MSTYPE% 46 | unattended_install 47 | 48 | 49 | 50 | ParentRecipe 51 | com.github.autopkg.microsoft-recipes.download.MicrosoftOutlook 52 | Process 53 | 54 | 55 | Comment 56 | Merge input pkginfo and additional_pkginfo generated by MSOffice2016URLandUpdateInfoProvider 57 | Processor 58 | MunkiPkginfoMerger 59 | 60 | 61 | Arguments 62 | 63 | pkg_path 64 | %pathname% 65 | repo_subdirectory 66 | %MUNKI_REPO_SUBDIR% 67 | 68 | Processor 69 | MunkiImporter 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftPowerPoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arubdesu/microsoft-recipes/677aaa3a8b82f25fbb7c130177095d6c7841a03f/Office2016-IndividualApps/MicrosoftPowerPoint.png -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftPowerPoint2016.download.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest PowerPoint 2016 update (or standalone) pkg, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', 'Delta', and 'Standalone' options. 15 | 16 | Identifier 17 | com.github.autopkg.microsoft-recipes.download.MicrosoftPowerPoint 18 | Input 19 | 20 | NAME 21 | Microsoft PowerPoint 22 | MSLOCALE 23 | 1033 24 | MSPRODUCT 25 | PowerPoint 26 | MSTYPE 27 | Combo 28 | 29 | SHORTNAME 30 | MicrosoftPowerPoint 31 | 32 | MinimumVersion 33 | 0.4.2 34 | Process 35 | 36 | 37 | Processor 38 | MSOffice2016URLandUpdateInfoProvider 39 | Arguments 40 | 41 | locale_id 42 | %MSLOCALE% 43 | product 44 | %MSPRODUCT% 45 | type 46 | %MSTYPE% 47 | 48 | 49 | 50 | Processor 51 | URLDownloader 52 | Arguments 53 | 54 | filename 55 | %SHORTNAME%-%MSTYPE%-%version%.pkg 56 | 57 | 58 | 59 | Processor 60 | EndOfCheckPhase 61 | 62 | 63 | Processor 64 | CodeSignatureVerifier 65 | Arguments 66 | 67 | input_path 68 | %pathname% 69 | expected_authority_names 70 | 71 | Developer ID Installer: Microsoft Corporation (UBF8T346G9) 72 | Developer ID Certification Authority 73 | Apple Root CA 74 | 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftPowerPoint2016.ds.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest PowerPoint 2016 update (or standalone) package and then 7 | copies the package to the DeployStudio packages repository. 8 | Requires the microsoft-recipes repo (currently https://github.com/arubdesu/microsoft-recipes, 9 | eventually to be merged into autopkg/microsoft-recipes). 10 | 11 | Input keys from the parent recipe: 12 | - MSLOCALE sets the locale for a descriptive text that will be 13 | extracted from the Microsoft update metadata. See 14 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 15 | for more information about locale IDs. Defaults to 1033 for English. 16 | - MSTYPE supports 'Combo', 'Delta', and 'Standalone' options. 17 | 18 | Input keys from this recipe: 19 | - DS_PKGS_PATH is the path for the Packages folder in the DeployStudio repository (trailing slash not required/desired). 20 | The path does not need to be on the same volume as the cache, as the pkg is being duplicated. 21 | - DS_NAME is what the final package will be called in DeployStudio, regardless of what was generated by the parent recipe. 22 | It defaults to "%NAME% %MSTYPE%" (e.g., Microsoft PowerPoint Combo), in case you wish to override this 23 | recipe more than once (e.g., for both Standalone and Combo). 24 | 25 | Identifier 26 | com.github.autopkg.microsoft-recipes.ds.MicrosoftPowerPoint 27 | Input 28 | 29 | DS_PKGS_PATH 30 | /Volumes/DSServer/Users/Shared/Deploy/Packages 31 | DS_NAME 32 | %NAME% %MSTYPE% 33 | 34 | MinimumVersion 35 | 0.4.2 36 | ParentRecipe 37 | com.github.autopkg.microsoft-recipes.download.MicrosoftPowerPoint 38 | Process 39 | 40 | 41 | Processor 42 | StopProcessingIf 43 | Arguments 44 | 45 | predicate 46 | download_changed == FALSE 47 | 48 | 49 | 50 | Processor 51 | Copier 52 | Arguments 53 | 54 | source_path 55 | %pathname% 56 | destination_path 57 | %DS_PKGS_PATH%/%DS_NAME%.pkg 58 | overwrite 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftPowerPoint2016.install.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads and installs the latest Microsoft PowerPoint 2016 'Standalone' version. 7 | Identifier 8 | com.github.autopkg.microsoft-recipes.install.MicrosoftPowerPoint 9 | Input 10 | 11 | MSTYPE 12 | Standalone 13 | 14 | MinimumVersion 15 | 0.4.2 16 | ParentRecipe 17 | com.github.autopkg.microsoft-recipes.download.MicrosoftPowerPoint 18 | Process 19 | 20 | 21 | Processor 22 | Installer 23 | Arguments 24 | 25 | pkg_path 26 | %pathname% 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftPowerPoint2016.jss.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Identifier 6 | com.github.autopkg.microsoft-recipes.jss.MicrosoftPowerPoint 7 | Input 8 | 9 | 10 | EA_TEMPLATE 11 | EA-OfficeAppVersion.xml 12 | 13 | 14 | SCRIPT_FILENAME 15 | manual_trigger_office.sh 16 | SCRIPT_TEMPLATE 17 | S-Standard.xml 18 | 19 | 20 | GROUP_NAME 21 | %SHORTNAME%-install-smart 22 | GROUP_TEMPLATE 23 | SG-ExtendedAttributeOffice.xml 24 | 25 | 26 | POLICY_CATEGORY 27 | Productivity 28 | POLICY_TEMPLATE 29 | P-SelfService.xml 30 | 31 | 32 | OS_REQUIREMENTS 33 | 10.11.x,10.10.x 34 | CATEGORY 35 | Productivity 36 | 37 | 38 | SELF_SERVICE_DESCRIPTION 39 | Microsoft PowerPoint is a graphical PowerPoint processing program that users can type with. It is made by the computer company Microsoft. The purpose of the MS PowerPoint is to allow the users to type and save documents. 40 | SELF_SERVICE_ICON 41 | MicrosoftPowerPoint.png 42 | FEATURED 43 | True 44 | 45 | ParentRecipe 46 | com.github.autopkg.microsoft-recipes.download.MicrosoftPowerPoint 47 | MinimumVersion 48 | 0.4.2 49 | Process 50 | 51 | 52 | Processor 53 | JSSImporter 54 | Arguments 55 | 56 | 57 | extension_attributes 58 | 59 | 60 | ext_attribute_path 61 | %EA_TEMPLATE% 62 | 63 | 64 | scripts 65 | 66 | 67 | name 68 | %SCRIPT_FILENAME% 69 | template_path 70 | %SCRIPT_TEMPLATE% 71 | 72 | 73 | groups 74 | 75 | 76 | name 77 | %GROUP_NAME% 78 | smart 79 | 80 | template_path 81 | %GROUP_TEMPLATE% 82 | 83 | 84 | 85 | 86 | prod_name 87 | %NAME% 88 | category 89 | %CATEGORY% 90 | os_requirements 91 | %OS_REQUIREMENTS% 92 | pkg_path 93 | %pathname% 94 | 95 | 96 | policy_category 97 | %POLICY_CATEGORY% 98 | policy_template 99 | %POLICY_TEMPLATE% 100 | 101 | 102 | self_service_description 103 | %SELF_SERVICE_DESCRIPTION% 104 | self_service_icon 105 | %SELF_SERVICE_ICON% 106 | 107 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftPowerPoint2016.lanrev.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest PowerPoint 2016 update (or standalone) pkg and uploads to LANrev, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', 'Delta', and 'Standalone' options. 15 | 16 | Identifier 17 | com.github.autopkg.microsoft-recipes.lanrev.MicrosoftPowerPoint 18 | Input 19 | 20 | MSLOCALE 21 | 1033 22 | MSPRODUCT 23 | PowerPoint 24 | MSTYPE 25 | Combo 26 | NAME 27 | Microsoft PowerPoint 28 | min_os 29 | OSX10.10 30 | 31 | MinimumVersion 32 | 0.4.2 33 | ParentRecipe 34 | com.github.autopkg.microsoft-recipes.download.MicrosoftPowerPoint 35 | Process 36 | 37 | 38 | Arguments 39 | 40 | dest_payload_path 41 | %RECIPE_CACHE_DIR%/%NAME%-%version%.amsdpackages 42 | import_pkg_to_servercenter 43 | 44 | sdpackages_ampkgprops_path 45 | %RECIPE_DIR%/%NAME%-Defaults.ampkgprops 46 | source_payload_path 47 | %pathname% 48 | 49 | Processor 50 | com.github.jbaker10.LANrevImporter/LANrevImporter 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftPowerPoint2016.munki.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest PowerPoint 2016 update (or standalone) pkg, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', 'Delta', and 'Standalone' options. Default is Combo. 15 | 16 | Identifier 17 | com.github.autopkg.microsoft-recipes.munki.MicrosoftPowerPoint 18 | MinimumVersion 19 | 0.4.2 20 | Input 21 | 22 | NAME 23 | Microsoft PowerPoint 24 | MSLOCALE 25 | 1033 26 | MSPRODUCT 27 | PowerPoint 28 | MSTYPE 29 | Combo 30 | MUNKI_REPO_SUBDIR 31 | apps 32 | pkginfo 33 | 34 | blocking_applications 35 | 36 | Microsoft PowerPoint 37 | Microsoft Error Reporting 38 | Microsoft AutoUpdate 39 | 40 | catalogs 41 | 42 | testing 43 | 44 | name 45 | %NAME%_%MSTYPE% 46 | unattended_install 47 | 48 | 49 | 50 | ParentRecipe 51 | com.github.autopkg.microsoft-recipes.download.MicrosoftPowerPoint 52 | Process 53 | 54 | 55 | Comment 56 | Merge input pkginfo and additional_pkginfo generated by MSOffice2016URLandUpdateInfoProvider 57 | Processor 58 | MunkiPkginfoMerger 59 | 60 | 61 | Arguments 62 | 63 | pkg_path 64 | %pathname% 65 | repo_subdirectory 66 | %MUNKI_REPO_SUBDIR% 67 | 68 | Processor 69 | MunkiImporter 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftWord.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arubdesu/microsoft-recipes/677aaa3a8b82f25fbb7c130177095d6c7841a03f/Office2016-IndividualApps/MicrosoftWord.png -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftWord2016.download.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Word 2016 update (or standalone) pkg, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', 'Delta', and 'Standalone' options. 15 | 16 | Identifier 17 | com.github.autopkg.microsoft-recipes.download.MicrosoftWord 18 | Input 19 | 20 | NAME 21 | Microsoft Word 22 | MSLOCALE 23 | 1033 24 | MSPRODUCT 25 | Word 26 | MSTYPE 27 | Combo 28 | 29 | SHORTNAME 30 | MicrosoftWord 31 | 32 | MinimumVersion 33 | 0.4.2 34 | Process 35 | 36 | 37 | Processor 38 | MSOffice2016URLandUpdateInfoProvider 39 | Arguments 40 | 41 | locale_id 42 | %MSLOCALE% 43 | product 44 | %MSPRODUCT% 45 | type 46 | %MSTYPE% 47 | 48 | 49 | 50 | Processor 51 | URLDownloader 52 | Arguments 53 | 54 | filename 55 | %SHORTNAME%-%MSTYPE%-%version%.pkg 56 | 57 | 58 | 59 | Processor 60 | EndOfCheckPhase 61 | 62 | 63 | Processor 64 | CodeSignatureVerifier 65 | Arguments 66 | 67 | input_path 68 | %pathname% 69 | expected_authority_names 70 | 71 | Developer ID Installer: Microsoft Corporation (UBF8T346G9) 72 | Developer ID Certification Authority 73 | Apple Root CA 74 | 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftWord2016.ds.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Word 2016 update (or standalone) package and then 7 | copies the package to the DeployStudio packages repository. 8 | Requires the microsoft-recipes repo (currently https://github.com/arubdesu/microsoft-recipes, 9 | eventually to be merged into autopkg/microsoft-recipes). 10 | 11 | Input keys from the parent recipe: 12 | - MSLOCALE sets the locale for a descriptive text that will be 13 | extracted from the Microsoft update metadata. See 14 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 15 | for more information about locale IDs. Defaults to 1033 for English. 16 | - MSTYPE supports 'Combo', 'Delta', and 'Standalone' options. 17 | 18 | Input keys from this recipe: 19 | - DS_PKGS_PATH is the path for the Packages folder in the DeployStudio repository (trailing slash not required/desired). 20 | The path does not need to be on the same volume as the cache, as the pkg is being duplicated. 21 | - DS_NAME is what the final package will be called in DeployStudio, regardless of what was generated by the parent recipe. 22 | It defaults to "%NAME% %MSTYPE%" (e.g., Microsoft Word Combo), in case you wish to override this 23 | recipe more than once (e.g., for both Standalone and Combo). 24 | 25 | Identifier 26 | com.github.autopkg.microsoft-recipes.ds.MicrosoftWord 27 | Input 28 | 29 | DS_PKGS_PATH 30 | /Volumes/DSServer/Users/Shared/Deploy/Packages 31 | DS_NAME 32 | %NAME% %MSTYPE% 33 | 34 | MinimumVersion 35 | 0.4.2 36 | ParentRecipe 37 | com.github.autopkg.microsoft-recipes.download.MicrosoftWord 38 | Process 39 | 40 | 41 | Processor 42 | StopProcessingIf 43 | Arguments 44 | 45 | predicate 46 | download_changed == FALSE 47 | 48 | 49 | 50 | Processor 51 | Copier 52 | Arguments 53 | 54 | source_path 55 | %pathname% 56 | destination_path 57 | %DS_PKGS_PATH%/%DS_NAME%.pkg 58 | overwrite 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftWord2016.install.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads and installs the latest Microsoft Word 2016 'Standalone' version. 7 | Identifier 8 | com.github.autopkg.microsoft-recipes.install.MicrosoftWord 9 | Input 10 | 11 | MSTYPE 12 | Standalone 13 | 14 | MinimumVersion 15 | 0.4.2 16 | ParentRecipe 17 | com.github.autopkg.microsoft-recipes.download.MicrosoftWord 18 | Process 19 | 20 | 21 | Processor 22 | Installer 23 | Arguments 24 | 25 | pkg_path 26 | %pathname% 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftWord2016.jss.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Identifier 6 | com.github.autopkg.microsoft-recipes.jss.MicrosoftWord 7 | Input 8 | 9 | 10 | EA_TEMPLATE 11 | EA-OfficeAppVersion.xml 12 | 13 | 14 | SCRIPT_FILENAME 15 | manual_trigger_office.sh 16 | SCRIPT_TEMPLATE 17 | S-Standard.xml 18 | 19 | 20 | GROUP_NAME 21 | %SHORTNAME%-install-smart 22 | GROUP_TEMPLATE 23 | SG-ExtendedAttributeOffice.xml 24 | 25 | 26 | POLICY_CATEGORY 27 | Productivity 28 | POLICY_TEMPLATE 29 | P-SelfService.xml 30 | 31 | 32 | OS_REQUIREMENTS 33 | 10.11.x,10.10.x 34 | CATEGORY 35 | Productivity 36 | 37 | 38 | SELF_SERVICE_DESCRIPTION 39 | Microsoft Word is a graphical word processing program that users can type with. It is made by the computer company Microsoft. The purpose of the MS Word is to allow the users to type and save documents. 40 | SELF_SERVICE_ICON 41 | MicrosoftWord.png 42 | FEATURED 43 | True 44 | 45 | ParentRecipe 46 | com.github.autopkg.microsoft-recipes.download.MicrosoftWord 47 | MinimumVersion 48 | 0.4.2 49 | Process 50 | 51 | 52 | Processor 53 | JSSImporter 54 | Arguments 55 | 56 | 57 | extension_attributes 58 | 59 | 60 | ext_attribute_path 61 | %EA_TEMPLATE% 62 | 63 | 64 | scripts 65 | 66 | 67 | name 68 | %SCRIPT_FILENAME% 69 | template_path 70 | %SCRIPT_TEMPLATE% 71 | 72 | 73 | groups 74 | 75 | 76 | name 77 | %GROUP_NAME% 78 | smart 79 | 80 | template_path 81 | %GROUP_TEMPLATE% 82 | 83 | 84 | 85 | 86 | prod_name 87 | %NAME% 88 | category 89 | %CATEGORY% 90 | os_requirements 91 | %OS_REQUIREMENTS% 92 | pkg_path 93 | %pathname% 94 | 95 | 96 | policy_category 97 | %POLICY_CATEGORY% 98 | policy_template 99 | %POLICY_TEMPLATE% 100 | 101 | 102 | self_service_description 103 | %SELF_SERVICE_DESCRIPTION% 104 | self_service_icon 105 | %SELF_SERVICE_ICON% 106 | 107 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftWord2016.lanrev.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Word 2016 update (or standalone) pkg and uploads to LANrev, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', 'Delta', and 'Standalone' options. 15 | 16 | Identifier 17 | com.github.autopkg.microsoft-recipes.lanrev.MicrosoftWord 18 | Input 19 | 20 | MSLOCALE 21 | 1033 22 | MSPRODUCT 23 | Word 24 | MSTYPE 25 | Combo 26 | NAME 27 | Microsoft Word 28 | min_os 29 | OSX10.10 30 | 31 | MinimumVersion 32 | 0.4.2 33 | ParentRecipe 34 | com.github.autopkg.microsoft-recipes.download.MicrosoftWord 35 | Process 36 | 37 | 38 | Arguments 39 | 40 | dest_payload_path 41 | %RECIPE_CACHE_DIR%/%NAME%-%version%.amsdpackages 42 | import_pkg_to_servercenter 43 | 44 | sdpackages_ampkgprops_path 45 | %RECIPE_DIR%/%NAME%-Defaults.ampkgprops 46 | source_payload_path 47 | %pathname% 48 | 49 | Processor 50 | com.github.jbaker10.LANrevImporter/LANrevImporter 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/MicrosoftWord2016.munki.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Word 2016 update (or standalone) pkg, 7 | and appends the type and version to the end of the filename. 8 | 9 | MSLOCALE sets the locale for a descriptive text that will be 10 | extracted from the Microsoft update metadata. See 11 | https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx 12 | for more information about locale IDs. Defaults to 1033 for English. 13 | 14 | TYPE supports 'Combo', 'Delta', and 'Standalone' options. Default is Combo. 15 | 16 | Identifier 17 | com.github.autopkg.microsoft-recipes.munki.MicrosoftWord 18 | MinimumVersion 19 | 0.4.2 20 | Input 21 | 22 | NAME 23 | Microsoft Word 24 | MSLOCALE 25 | 1033 26 | MSPRODUCT 27 | Word 28 | MSTYPE 29 | Combo 30 | MUNKI_REPO_SUBDIR 31 | apps 32 | pkginfo 33 | 34 | blocking_applications 35 | 36 | Microsoft Word 37 | Microsoft Error Reporting 38 | Microsoft AutoUpdate 39 | 40 | catalogs 41 | 42 | testing 43 | 44 | name 45 | %NAME%_%MSTYPE% 46 | unattended_install 47 | 48 | 49 | 50 | ParentRecipe 51 | com.github.autopkg.microsoft-recipes.download.MicrosoftWord 52 | Process 53 | 54 | 55 | Comment 56 | Merge input pkginfo and additional_pkginfo generated by MSOffice2016URLandUpdateInfoProvider 57 | Processor 58 | MunkiPkginfoMerger 59 | 60 | 61 | Arguments 62 | 63 | pkg_path 64 | %pathname% 65 | repo_subdirectory 66 | %MUNKI_REPO_SUBDIR% 67 | 68 | Processor 69 | MunkiImporter 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/P-OtherTrigger.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | %PROD_NAME% 4 | true 5 | EVENT 6 | %TRIGGER_OTHER% 7 | %FREQUENCY% 8 | 9 | %POLICY_CATEGORY% 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | false 23 | 24 | 25 | true 26 | 27 | 28 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/P-SelfService.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | %PROD_NAME% 4 | true 5 | Ongoing 6 | 7 | %POLICY_CATEGORY% 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | true 21 | Install %VERSION% 22 | %FEATURED% 23 | 24 | 25 | true 26 | 27 | 28 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/S-Standard.xml: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/SG-ExtendedAttributeOffice.xml: -------------------------------------------------------------------------------- 1 | 2 | %GROUP_NAME% 3 | true 4 | 5 | 6 | %JSS_INVENTORY_NAME% 2016 Version 7 | 0 8 | and 9 | is not 10 | %VERSION% 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Office2016-IndividualApps/manual_trigger_office.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # This script runs a manual policy trigger to 4 | # allow the policie(s) associated with that 5 | # trigger to be executed. 6 | 7 | trigger_name="office-license" 8 | 9 | CheckBinary (){ 10 | 11 | # Identify location of jamf binary. 12 | 13 | jamf_binary=`/usr/bin/which jamf` 14 | 15 | if [[ "$jamf_binary" == "" ]] && [[ -e "/usr/sbin/jamf" ]] && [[ ! -e "/usr/local/bin/jamf" ]]; then 16 | jamf_binary="/usr/sbin/jamf" 17 | elif [[ "$jamf_binary" == "" ]] && [[ ! -e "/usr/sbin/jamf" ]] && [[ -e "/usr/local/bin/jamf" ]]; then 18 | jamf_binary="/usr/local/bin/jamf" 19 | elif [[ "$jamf_binary" == "" ]] && [[ -e "/usr/sbin/jamf" ]] && [[ -e "/usr/local/bin/jamf" ]]; then 20 | jamf_binary="/usr/local/bin/jamf" 21 | fi 22 | } 23 | 24 | # Run the CheckBinary function to identify the location 25 | # of the jamf binary for the jamf_binary variable. 26 | 27 | CheckBinary 28 | 29 | $jamf_binary policy -trigger "$trigger_name" 30 | 31 | exit 0 -------------------------------------------------------------------------------- /Office2016-IndividualApps/payload/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arubdesu/microsoft-recipes/677aaa3a8b82f25fbb7c130177095d6c7841a03f/Office2016-IndividualApps/payload/.gitignore -------------------------------------------------------------------------------- /Office2016Suite-SKUless/Office2016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arubdesu/microsoft-recipes/677aaa3a8b82f25fbb7c130177095d6c7841a03f/Office2016Suite-SKUless/Office2016.png -------------------------------------------------------------------------------- /Office2016Suite-SKUless/Office2016SuiteSKUless.download.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Microsoft Office 2016 SKU-less installer package. 7 | 8 | Set the REGION key to: 9 | 10 | 525133 for Americas (default) 11 | 532572 for Europe 12 | 532577 for Asia 13 | Identifier 14 | com.github.autopkg.microsoft-recipes.download.Office2016Suite 15 | Input 16 | 17 | NAME 18 | Office2016Suite 19 | REGION 20 | 525133 21 | DOWNLOAD_URL_BASE 22 | https://go.microsoft.com/fwlink/?linkid= 23 | 24 | MinimumVersion 25 | 0.4.1 26 | Process 27 | 28 | 29 | Processor 30 | OfficeSuiteSKULessVersionProvider 31 | 32 | 33 | Processor 34 | URLDownloader 35 | Arguments 36 | 37 | url 38 | %DOWNLOAD_URL_BASE%%REGION% 39 | filename 40 | %NAME%-%version%.pkg 41 | 42 | 43 | 44 | Processor 45 | EndOfCheckPhase 46 | 47 | 48 | Processor 49 | CodeSignatureVerifier 50 | Arguments 51 | 52 | input_path 53 | %pathname% 54 | expected_authority_names 55 | 56 | Developer ID Installer: Microsoft Corporation (UBF8T346G9) 57 | Developer ID Certification Authority 58 | Apple Root CA 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /Office2016Suite-SKUless/Office2016SuiteSKUless.ds.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Microsoft Office 2016 SKU-less installer package and then 7 | copies the package to the DeployStudio packages repository. 8 | Requires the microsoft-recipes repo (currently https://github.com/arubdesu/microsoft-recipes, 9 | eventually to be merged into autopkg/microsoft-recipes). 10 | 11 | Input keys: 12 | - REGION should be set to 525133 for Americas (default), 532572 for Europe, 532577 for Asia 13 | - DS_PKGS_PATH is the path for the Packages folder in the DeployStudio repository (trailing slash not required/desired). 14 | The path does not need to be on the same volume as the cache, as the pkg is being duplicated. 15 | - DS_NAME is what the final package will be called in DeployStudio, regardless of what was generated by the parent recipe. 16 | It defaults to %NAME% (just the app name). 17 | 18 | Identifier 19 | com.github.autopkg.microsoft-recipes.ds.Office2016Suite 20 | Input 21 | 22 | DS_PKGS_PATH 23 | /Volumes/DSServer/Users/Shared/Deploy/Packages 24 | DS_NAME 25 | %NAME% 26 | 27 | MinimumVersion 28 | 0.4.1 29 | ParentRecipe 30 | com.github.autopkg.microsoft-recipes.download.Office2016Suite 31 | Process 32 | 33 | 34 | Processor 35 | StopProcessingIf 36 | Arguments 37 | 38 | predicate 39 | download_changed == FALSE 40 | 41 | 42 | 43 | Processor 44 | Copier 45 | Arguments 46 | 47 | source_path 48 | %pathname% 49 | destination_path 50 | %DS_PKGS_PATH%/%DS_NAME%.pkg 51 | overwrite 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /Office2016Suite-SKUless/Office2016SuiteSKUless.install.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Download and install the latest Microsoft Office 2016 7 | SKU-less installer package. 8 | 9 | Set the REGION key to: 10 | 11 | 525133 for Americas (default) 12 | 532572 for Europe 13 | 532577 for Asia 14 | Identifier 15 | com.github.autopkg.microsoft-recipes.install.Office2016Suite 16 | Input 17 | 18 | NAME 19 | Office2016Suite 20 | REGION 21 | 525133 22 | DOWNLOAD_URL_BASE 23 | https://go.microsoft.com/fwlink/?linkid= 24 | 25 | MinimumVersion 26 | 0.4.1 27 | ParentRecipe 28 | com.github.autopkg.microsoft-recipes.download.Office2016Suite 29 | Process 30 | 31 | 32 | Processor 33 | Installer 34 | Arguments 35 | 36 | pkg_path 37 | %pathname% 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Office2016Suite-SKUless/Office2016SuiteSKUless.jss.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Uses parent download recipe to download the latest Microsoft Office 2016 SKU-less installer package and import it into the JSS. 7 | Identifier 8 | com.github.autopkg.microsoft-recipes.jss.Office2016Suite 9 | Input 10 | 11 | NAME 12 | Office2016 13 | CATEGORY 14 | Microsoft 15 | POLICY_CATEGORY 16 | Testing 17 | POLICY_TEMPLATE 18 | %RECIPE_DIR%/PolicyTemplate.xml 19 | ICON 20 | %RECIPE_DIR%/Office2016.png 21 | GROUP_TEMPLATE 22 | %RECIPE_DIR%/SmartGroupTemplate.xml 23 | GROUP_NAME 24 | %NAME%-update-smart 25 | DESCRIPTION 26 | Office 2016 is a software suite for word processing, spreadsheets, presentations, graphics and more. 27 | 28 | MinimumVersion 29 | 0.4.1 30 | ParentRecipe 31 | com.github.autopkg.microsoft-recipes.download.Office2016Suite 32 | Process 33 | 34 | 35 | Arguments 36 | 37 | prod_name 38 | %NAME% 39 | category 40 | %CATEGORY% 41 | pkg_path 42 | %pathname% 43 | policy_category 44 | %POLICY_CATEGORY% 45 | policy_template 46 | %POLICY_TEMPLATE% 47 | self_service_icon 48 | %ICON% 49 | self_service_description 50 | %DESCRIPTION% 51 | groups 52 | 53 | 54 | name 55 | %GROUP_NAME% 56 | smart 57 | 58 | template_path 59 | %GROUP_TEMPLATE% 60 | 61 | 62 | 63 | Processor 64 | JSSImporter 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /Office2016Suite-SKUless/Office2016SuiteSKUless.lanrev.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Microsoft Office 2016 SKU-less installer package and uploads to LANrev. 7 | 8 | Set the REGION key to: 9 | 10 | 525133 for Americas (default) 11 | 532572 for Europe 12 | 532577 for Asia 13 | Identifier 14 | com.github.autopkg.microsoft-recipes.lanrev.Office2016Suite 15 | Input 16 | 17 | DOWNLOAD_URL_BASE 18 | https://go.microsoft.com/fwlink/?linkid= 19 | NAME 20 | Office2016Suite 21 | REGION 22 | 525133 23 | 24 | MinimumVersion 25 | 0.4.1 26 | ParentRecipe 27 | com.github.autopkg.microsoft-recipes.download.Office2016Suite 28 | Process 29 | 30 | 31 | Arguments 32 | 33 | dest_payload_path 34 | %RECIPE_CACHE_DIR%/%NAME%-%version%.amsdpackages 35 | import_pkg_to_servercenter 36 | 37 | sdpackages_ampkgprops_path 38 | %RECIPE_DIR%/%NAME%-Defaults.ampkgprops 39 | source_payload_path 40 | %pathname% 41 | 42 | Processor 43 | com.github.jbaker10.LANrevImporter/LANrevImporter 44 | SharedProcessorRepoURL 45 | https://github.com/jbaker10/LANrevImporter 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Office2016Suite-SKUless/Office2016SuiteSKUless.munki.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Microsoft Office 2016 SKU-less installer package, 7 | appends the version to the end of the filename, and imports into Munki. 8 | 9 | Set the REGION key to: 10 | 11 | 525133 for Americas (default) 12 | 532572 for Europe 13 | 532577 for Asia 14 | Identifier 15 | com.github.autopkg.microsoft-recipes.munki.Office2016Suite 16 | ParentRecipe 17 | com.github.autopkg.microsoft-recipes.download.Office2016Suite 18 | Input 19 | 20 | NAME 21 | Office2016Suite 22 | REGION 23 | 525133 24 | DOWNLOAD_URL_BASE 25 | https://go.microsoft.com/fwlink/?linkid= 26 | MUNKI_REPO_SUBDIR 27 | apps/Office2016 28 | pkginfo 29 | 30 | blocking_applications 31 | 32 | Microsoft AutoUpdate 33 | Microsoft Outlook 34 | Microsoft Excel 35 | Microsoft PowerPoint 36 | Microsoft Word 37 | Microsoft OneNote 38 | 39 | catalogs 40 | 41 | testing 42 | 43 | 44 | 45 | MinimumVersion 46 | 0.4.1 47 | Process 48 | 49 | 50 | Arguments 51 | 52 | pkg_path 53 | %pathname% 54 | repo_subdirectory 55 | %MUNKI_REPO_SUBDIR% 56 | 57 | Processor 58 | MunkiImporter 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /Office2016Suite-SKUless/OfficeSuiteSKULessVersionProvider.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # 3 | # Copyright 2016 Allister Banks, lovingly based on work by Hannes Juutilainen 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | import urllib2 18 | import xml.etree.ElementTree as ET 19 | 20 | from autopkglib import Processor, ProcessorError 21 | 22 | 23 | __all__ = ["OfficeSuiteSKULessVersionProvider"] 24 | 25 | FEED_URL = "http://macadmins.software/versions.xml" 26 | 27 | class OfficeSuiteSKULessVersionProvider(Processor): 28 | """Provides the version of the latest SKU-Less Office 2016 Suite release""" 29 | input_variables = {} 30 | output_variables = { 31 | "version": { 32 | "description": "Version of the latest SKU-Less Office 2016 Suite release.", 33 | }, 34 | } 35 | description = __doc__ 36 | 37 | def get_version(self, FEED_URL): 38 | """Parse the macadmins.software/versions.xml feed for the latest O365 version number""" 39 | try: 40 | raw_xml = urllib2.urlopen(FEED_URL) 41 | xml = raw_xml.read() 42 | except BaseException as e: 43 | raise ProcessorError("Can't download %s: %s" % (FEED_URL, e)) 44 | version = '' 45 | root = ET.fromstring(xml) 46 | for vers in root.iter('latest'): 47 | version = vers.find('o365').text 48 | return version 49 | 50 | def main(self): 51 | self.env["version"] = self.get_version(FEED_URL) 52 | self.output("Found Version Number %s" % self.env["version"]) 53 | 54 | 55 | if __name__ == "__main__": 56 | processor = OfficeSuiteSKULessVersionProvider() 57 | processor.execute_shell() 58 | -------------------------------------------------------------------------------- /Office2016Suite-SKUless/PolicyTemplate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Install Latest %PROD_NAME% 4 | true 5 | Ongoing 6 | 7 | %POLICY_CATEGORY% 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | true 21 | Install %VERSION% 22 | %SELF_SERVICE_DESCRIPTION% 23 | 24 | 25 | true 26 | 27 | 28 | -------------------------------------------------------------------------------- /Office2016Suite-SKUless/SmartGroupTemplate.xml: -------------------------------------------------------------------------------- 1 | 2 | %group_name% 3 | true 4 | 5 | 6 | Application Title 7 | 0 8 | and 9 | is 10 | %JSS_INVENTORY_NAME% 11 | 12 | 13 | Application Version 14 | 1 15 | and 16 | is not 17 | %VERSION% 18 | 19 | 20 | Computer Group 21 | 2 22 | and 23 | member of 24 | Testing 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /OneDrive-Standalone/OneDrive.pkg.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest OneDrive standalone version installer package. 7 | Identifier 8 | com.github.microsoft-recipes.pkg.OneDriveStandalone 9 | Input 10 | 11 | DOWNLOAD_URL 12 | https://go.microsoft.com/fwlink/?linkid=823060 13 | NAME 14 | OneDrive 15 | 16 | MinimumVersion 17 | 0.6.1 18 | Process 19 | 20 | 21 | Arguments 22 | 23 | filename 24 | %NAME%.pkg 25 | url 26 | %DOWNLOAD_URL% 27 | 28 | Processor 29 | URLDownloader 30 | 31 | 32 | Processor 33 | EndOfCheckPhase 34 | 35 | 36 | Arguments 37 | 38 | expected_authorities 39 | 40 | Developer ID Installer: Microsoft Corporation (UBF8T346G9) 41 | Developer ID Certification Authority 42 | Apple Root CA 43 | 44 | input_path 45 | %pathname% 46 | 47 | Processor 48 | CodeSignatureVerifier 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /OneDrive-Standalone/OneDrive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arubdesu/microsoft-recipes/677aaa3a8b82f25fbb7c130177095d6c7841a03f/OneDrive-Standalone/OneDrive.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # microsoft-recipes 2 | 3 | __Unofficial (meaning not maintained by Microsoft) Office (and Microsoft-related) Recipes for AutoPkg__ 4 | 5 | This repo contains update recipes for Lync (soon to be rebranded ~~Communicator~~ ~~Messenger~~ [SkypeForBusiness](https://support.office.com/en-us/article/Lync-is-now-Skype-for-Business-—-see-what-s-new-aba02d7e-c801-4a82-bccd-e7207240f612)), AutoUpdate 3.x (AKA MAU), and the Office 2016 suite. (OneNote can be obtained from the Mac App Store, so it is only partially included.) 6 | 7 | ### What the who? 8 | 9 | These used to be located in the `autopkg/recipes` and `autopkg/arubdesu-recipes` repos, but they grew in number and variety to the point that it made sense to gather them all in one place. 10 | 11 | These are more than just traditional 'update' recipes - while the original intention of autopkg was to grab updates by using mechanisms that are as-close-as-possible to the native polling an apps auto-update functionality would use, Office 2016 has many deployment permutations to consider. All of the products referenced above have 'combo' update flavored packages, which install the entire product. MAU and Lync are less of a concern, as they do not require licensing... but the story becomes interesting with Office 2016: 12 | 13 | - While Office 2016 can be deployed in many ways, it comes in several different flavored installers: 14 | - Standalone, meaning each individual product install has a bundled version of MAU 15 | - Volume Licensed (VL), per-product or full suite installers 16 | - 'Combo' updates, similar to how Lync updates are full, potentially-installable versions 17 | - 'Delta' updates, which are slated for release with 15.19 18 | - And finally, there is the new concept of a 'SKU-less' installer, meaning a version of the suite that can be installed (except in an AutoDMG workflow) and licensed for O365 or [volume licensing](https://clburlison.com/demystify-office2016/#vl-serializer) after the fact. 19 | 20 | Besides the VL suite installer and the SKU-less version, the Standalone flavor can also be licensed because it contains the proper support files. 21 | 22 | ![Breakdown Graphic](BreakdownGraphic.png) 23 | 24 | ### All the things! 25 | 26 | Like Pokemon, we've gotta catch them all. Contained in this repo is a custom AutoPkg processor that allows you to fetch standalone, combo, or delta flavors of the Office 2016 apps, and recipes that can be customized via [overrides](https://github.com/autopkg/autopkg/wiki/FAQ#can-i-change-a-recipe-to-do-x-instead-of-y-do-i-use-overrides-for-that) to grab the one(s) you want. This functionality was enabled by @ftiff by adapting code worked on by @tvsutton, @arubdesu, and originally authored by @gregneagle. 27 | 28 | A separate set of recipes operate on the SKU-less suite. The included [JSS-README](Office2016-IndividualApps/JSS-README.md) describes a workflow for deploying the 2016 apps (which require you to override the MSVERSION key to be 'Standalone') along with policy templates that even enable it to be licensed if you supply the 15.17+ bundled 'VL Serializer' package. 29 | 30 | ### ...But, can we really [have it all?](https://twitter.com/manwhohasitall/status/664351940692738048) 31 | 32 | If by that you mean you'd like to fetch multiple flavored (delta/combo/standalone) packages from the same AutoPkg setup, [yes we can](https://github.com/autopkg/autopkg/wiki/FAQ#can-i-fetch-multiple-variations-of-the-same-product-eg-office-2016-delta-updatesfull-installers). 33 | 34 | #### Standalone/SKU-Less Installer(s) + Munki Note 35 | 36 | For those who have left MAU out of their deployment and want to continue doing so, you'll want to add [ChoiceChangesXML](https://github.com/munki/munki/wiki/ChoiceChangesXML) to your override's pkginfo stanza, like so: 37 | 38 | ``` 39 | installer_choices_xml 40 | 41 | 42 | attributeSetting 43 | 0 44 | choiceAttribute 45 | selected 46 | choiceIdentifier 47 | com.microsoft.autoupdate 48 | 49 | 50 | ``` 51 | -------------------------------------------------------------------------------- /SkypeForBusiness/SkypeForBusiness.munki.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest version of Skype for Business and imports it into Munki. 7 | Identifier 8 | com.github.microsoft-recipes.munki.SkypeForBusiness 9 | Input 10 | 11 | MUNKI_REPO_SUBDIR 12 | apps 13 | NAME 14 | Skype for Business 15 | pkginfo 16 | 17 | blocking_applications 18 | 19 | Skype for Business.app 20 | 21 | catalogs 22 | 23 | testing 24 | 25 | description 26 | Microsoft's business solution for videoconferencing and collaboration. 27 | developer 28 | Microsoft 29 | display_name 30 | Skype for Business 31 | name 32 | %NAME% 33 | unattended_install 34 | 35 | 36 | 37 | MinimumVersion 38 | 0.6.1 39 | ParentRecipe 40 | com.github.microsoft-recipes.pkg.SkypeForBusiness 41 | Process 42 | 43 | 44 | Arguments 45 | 46 | pkg_path 47 | %pathname% 48 | repo_subdirectory 49 | %MUNKI_REPO_SUBDIR% 50 | 51 | Processor 52 | MunkiImporter 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /SkypeForBusiness/SkypeForBusiness.pkg.recipe: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Description 6 | Downloads the latest Skype for Business installer package. 7 | Identifier 8 | com.github.microsoft-recipes.pkg.SkypeForBusiness 9 | Input 10 | 11 | DOWNLOAD_URL 12 | https://go.microsoft.com/fwlink/?linkid=832978 13 | NAME 14 | SkypeForBusiness 15 | 16 | MinimumVersion 17 | 0.6.1 18 | Process 19 | 20 | 21 | Arguments 22 | 23 | filename 24 | %NAME%.pkg 25 | url 26 | %DOWNLOAD_URL% 27 | 28 | Processor 29 | URLDownloader 30 | 31 | 32 | Processor 33 | EndOfCheckPhase 34 | 35 | 36 | Arguments 37 | 38 | expected_authorities 39 | 40 | Developer ID Installer: Microsoft Corporation (UBF8T346G9) 41 | Developer ID Certification Authority 42 | Apple Root CA 43 | 44 | input_path 45 | %pathname% 46 | 47 | Processor 48 | CodeSignatureVerifier 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /SkypeForBusiness/SkypeForBusiness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arubdesu/microsoft-recipes/677aaa3a8b82f25fbb7c130177095d6c7841a03f/SkypeForBusiness/SkypeForBusiness.png --------------------------------------------------------------------------------