{"id":37829,"date":"2020-03-31T09:59:15","date_gmt":"2020-03-31T14:59:15","guid":{"rendered":"https:\/\/verticalagetechnologies.com\/?p=37829"},"modified":"2020-03-31T09:59:15","modified_gmt":"2020-03-31T14:59:15","slug":"automate-updating-os-isos-with-osdbuilder-and-mdt","status":"publish","type":"post","link":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt","title":{"rendered":"Automate updating OS ISOs with OSDBuilder and MDT"},"content":{"rendered":"\n<p>Now that we&#8217;ve started down this &#8220;MDT&#8221; train, there&#8217;s no getting off until we discuss some of the more important parts.  If you haven&#8217;t read the previous posts you can find them here:<\/p>\n\n\n\n<p>Post 1:  <a href=\"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/04\/citrix-microsoft-mdt-powershell-tools-the-beginning\">https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/04\/citrix-microsoft-mdt-powershell-tools-the-beginning<\/a> <\/p>\n\n\n\n<p>Post 2:  <a href=\"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/16\/building-multiple-citrix-images-with-one-microsoft-mdt-task-sequence\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/16\/building-multiple-citrix-images-with-one-microsoft-mdt-task-sequence  (opens in a new tab)\">https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/16\/building-multiple-citrix-images-with-one-microsoft-mdt-task-sequence <\/a><\/p>\n\n\n\n<p>Today we will be focusing on automating the procedures for always having an updated Windows OS ISO.  This is especially important for automating master image builds b\/c we can&#8217;t remove windows updates from the task sequence.  Windows Updates can add hours into your build, so if we can decouple this from the process we would be saving considerable amounts of time.<\/p>\n\n\n\n<p>For those not familiar with <a rel=\"noreferrer noopener\" aria-label=\"OSDBuilder (opens in a new tab)\" href=\"https:\/\/osdbuilder.osdeploy.com\/\" target=\"_blank\">OSDBuilder<\/a> it&#8217;s an awesome Powershell compilation created by <a href=\"https:\/\/twitter.com\/SeguraOSD\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"David Segura (opens in a new tab)\">David Segura<\/a> that allows you to service your Windows Operating systems in an &#8216;offline&#8217; fashion.  Say you have a Server 2016 ISO that&#8217;s 4 years old.  With OSDBuilder, you can &#8216;Import&#8217; that ISO and apply all the necessary cumulative updates, in an automated offline fashion.  So the next time you install Server 2016, it&#8217;s completely updated.<\/p>\n\n\n\n<p>For me, this process looks something like this:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>&#8216;First Run&#8217; Powershell script (only ran once)<\/li><li>Patch Tuesday arrives<\/li><li>Run &#8216;Install\/Update OSDbuilder&#8217; Powershell script (scheduled task)<\/li><li>Run &#8216;Ongoing Updates&#8217; Powershell script (scheduled task)<\/li><li>Run MDT Task Sequence<\/li><li>Rinse and Repeat (Steps 2-6)<\/li><\/ol>\n\n\n\n<p>As you can see you pretty much have a fully automated cycle that spits out a new #Citrix \/ #VMware Master Image with a fully updated OS.<\/p>\n\n\n\n<pre class=\"wp-block-verse\">Note: OSDbuilder follows WSUS release schedule, not Windows Updates.  Read more here  <a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/www.osdeploy.com\/blog\/microsoft-update-releases\" target=\"_blank\">https:\/\/www.osdeploy.com\/blog\/microsoft-update-releases<\/a>.<\/pre>\n\n\n\n<p>I&#8217;ll break this blog into 3 sections: Install\/Update Module,  First Run, Ongoing Updates.  A big thank you to <a rel=\"noreferrer noopener\" aria-label=\"Julien (opens in a new tab)\" href=\"https:\/\/twitter.com\/citrixguyblog\" target=\"_blank\">Julien<\/a> for setting up the <a rel=\"noreferrer noopener\" aria-label=\"base code (opens in a new tab)\" href=\"https:\/\/github.com\/citrixguyblog\/OSDBuilder-ReferenceImage\" target=\"_blank\">base code<\/a>.  <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Install\/Update Module<\/h2>\n\n\n\n<p>This section will install\/update the necessary powershell modules.  If the Module doesn&#8217;t exist at all, it will install it.  Also, if the module finds an update, it will install the latest.  It&#8217;s broken into two module sections, OSDBuilder and <a rel=\"noreferrer noopener\" aria-label=\"OSDSUS (opens in a new tab)\" href=\"https:\/\/osdsus.osdeploy.com\/\" target=\"_blank\">OSDSUS<\/a>.  OSDBuilder is the main module and OSDSUS is the module responsible for tracking the windows updates.  <\/p>\n\n\n\n<p>Latest release notes:<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>OSDSUS &#8211; <a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/osdsus.osdeploy.com\/release\" target=\"_blank\">https:\/\/osdsus.osdeploy.com\/release<\/a><\/p>\n<\/div><\/div>\n\n\n\n<p>OSDBuilder &#8211; <a href=\"https:\/\/osdbuilder.osdeploy.com\/release\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">https:\/\/osdbuilder.osdeploy.com\/release<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#==========================================================================\n#\n# Automating Reference Image with OSDBuilder\n#\n# AUTHOR: Julian Mooren (https:\/\/citrixguyblog.com)\n# DATE  : 03.18.2019\n#\n# PowerShell Template by Dennis Span (http:\/\/dennisspan.com)\n#\n#==========================================================================\n\n# define Error handling\n# note: do not change these values\n$global:ErrorActionPreference = \"Stop\"\nif($verbose){ $global:VerbosePreference = \"Continue\" }\n\n# FUNCTION DS_WriteLog\n#==========================================================================\nFunction DS_WriteLog {\n    &lt;#\n        .SYNOPSIS\n        Write text to this script's log file\n        .DESCRIPTION\n        Write text to this script's log file\n        .PARAMETER InformationType\n        This parameter contains the information type prefix. Possible prefixes and information types are:\n            I = Information\n            S = Success\n            W = Warning\n            E = Error\n            - = No status\n        .PARAMETER Text\n        This parameter contains the text (the line) you want to write to the log file. If text in the parameter is omitted, an empty line is written.\n        .PARAMETER LogFile\n        This parameter contains the full path, the file name and file extension to the log file (e.g. C:\\Logs\\MyApps\\MylogFile.log)\n        .EXAMPLE\n        DS_WriteLog -$InformationType \"I\" -Text \"Copy files to C:\\Temp\" -LogFile \"C:\\Logs\\MylogFile.log\"\n        Writes a line containing information to the log file\n        .Example\n        DS_WriteLog -$InformationType \"E\" -Text \"An error occurred trying to copy files to C:\\Temp (error: $($Error&#91;0]))\" -LogFile \"C:\\Logs\\MylogFile.log\"\n        Writes a line containing error information to the log file\n        .Example\n        DS_WriteLog -$InformationType \"-\" -Text \"\" -LogFile \"C:\\Logs\\MylogFile.log\"\n        Writes an empty line to the log file\n    #>\n    &#91;CmdletBinding()]\n    Param( \n        &#91;Parameter(Mandatory=$true, Position = 0)]&#91;ValidateSet(\"I\",\"S\",\"W\",\"E\",\"-\",IgnoreCase = $True)]&#91;String]$InformationType,\n        &#91;Parameter(Mandatory=$true, Position = 1)]&#91;AllowEmptyString()]&#91;String]$Text,\n        &#91;Parameter(Mandatory=$true, Position = 2)]&#91;AllowEmptyString()]&#91;String]$LogFile\n    )\n \n    begin {\n    }\n \n    process {\n     $DateTime = (Get-Date -format dd-MM-yyyy) + \" \" + (Get-Date -format HH:mm:ss)\n \n        if ( $Text -eq \"\" ) {\n            Add-Content $LogFile -value (\"\") # Write an empty line\n        } Else {\n         Add-Content $LogFile -value ($DateTime + \" \" + $InformationType.ToUpper() + \" - \" + $Text)\n        }\n    }\n \n    end {\n    }\n}\n#==========================================================================\n\n################\n# Main section #\n################\n\n# Custom variables \n$BaseLogDir = \"E:\\Logs\"                               \n$PackageName = \"OSDBuilder\"\n\n# Global variables\n$date = Get-Date -Format yyy-MM-dd-HHmm\n$StartDir = $PSScriptRoot # the directory path of the script currently being executed\n$LogDir = (Join-Path $BaseLogDir $PackageName).Replace(\" \",\"_\")\n$LogFileName = \"$PackageName-$date.log\"\n$LogFile = Join-path $LogDir $LogFileName\n\n\n# Create the log directory if it does not exist\nif (!(Test-Path $LogDir)) { New-Item -Path $LogDir -ItemType directory | Out-Null }\n\n# Create new log file (overwrite existing one)\nNew-Item $LogFile -ItemType \"file\" -force | Out-Null\n\n# ---------------------------------------------------------------------------------------------------------------------------\n\nDS_WriteLog \"I\" \"START SCRIPT - $Installationtype $PackageName\" $LogFile\nDS_WriteLog \"-\" \"\" $LogFile\n\n#################################################\n# Update OSDBuilder PoweShell Module            #\n#################################################\n\nDS_WriteLog \"I\" \"Looking for installed OSDBuilder Module...\" $LogFile\n\ntry {\n      $Version =  Get-ChildItem -Path \"C:\\Program Files\\WindowsPowerShell\\Modules\\OSDBuilder\" | Sort-Object LastAccessTime -Descending | Select-Object -First 1\n      DS_WriteLog \"S\" \"OSDBuilder Module is installed - Version: $Version\" $LogFile\n     } catch {\n              DS_WriteLog \"E\" \"An error occurred while looking for the OSDBuilder PowerShell Module (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n\nDS_WriteLog \"I\" \"Checking for newer OSDBuilder Module in the PowerShell Gallery...\" $LogFile\n\ntry {\n      $NewBuild = Find-Module -Name OSDBuilder\n      DS_WriteLog \"S\" \"The newest OSDBuilder Module is Version: $($NewBuild.Version)\" $LogFile\n     } catch {\n              DS_WriteLog \"E\" \"An error occurred while looking for the OSDBuilder PowerShell Module (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n\n if($Version.Name -lt  $NewBuild.Version)\n  {\n  try {\n         DS_WriteLog \"I\" \"Update is available. Update in progress....\" $LogFile\n         OSDBuilder -Update\n         DS_WriteLog \"S\" \"OSDBuilder Update completed succesfully to Version: $($NewBuild.Version)\" $LogFile\n       \n     } catch {\n              DS_WriteLog \"E\" \"An error occurred while updating the OSDBuilder Module (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n  }\n\nelse {DS_WriteLog \"I\" \"Newest OSDBuilder is already installed.\" $LogFile}\n\nDS_WriteLog \"I\" \"Trying to Import the OSDBuilder Module...\" $LogFile\n\ntry {\n        Import-Module -Name OSDBuilder -Force\n        DS_WriteLog \"S\" \"Module got imported\" $LogFile\n     }  catch {\n              DS_WriteLog \"E\" \"An error occurred while importing the OSDBuilder Module (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n\nDS_WriteLog \"-\" \"\" $LogFile\n\n#################################################\n# Update OSDSUS PoweShell Module            #\n#################################################\n\nDS_WriteLog \"I\" \"Looking for installed OSDSUS Module...\" $LogFile\n\n\ntry {\n      $Version =  Get-ChildItem -Path \"C:\\Program Files\\WindowsPowerShell\\Modules\\OSDSUS\" | Sort-Object LastAccessTime -Descending | Select-Object -First 1\n      DS_WriteLog \"S\" \"OSDSUS Module is installed - Version: $Version\" $LogFile\n     } catch {\n              DS_WriteLog \"E\" \"An error occurred while looking for the OSDSUS PowerShell Module (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n\nDS_WriteLog \"I\" \"Checking for newer OSDSUS Module in the PowerShell Gallery...\" $LogFile\n\n\ntry {\n      $NewBuild = Find-Module -Name OSDSUS\n      DS_WriteLog \"S\" \"The newest OSDSUS Module is Version: $($NewBuild.Version)\" $LogFile\n     } catch {\n              DS_WriteLog \"E\" \"An error occurred while looking for the OSDSUS PowerShell Module (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n\n\n\n if($Version.Name -lt  $NewBuild.Version)\n  {\n  try {\n         DS_WriteLog \"I\" \"Update is available. Update in progress....\" $LogFile\n         Update-OSDSUS\n         DS_WriteLog \"S\" \"OSDSUS Update completed succesfully to Version: $($NewBuild.Version)\" $LogFile\n       \n     } catch {\n              DS_WriteLog \"E\" \"An error occurred while updating the OSDSUS Module (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n  }\n\n\nelse {DS_WriteLog \"I\" \"Newest OSDSUS is already installed.\" $LogFile}\n\n\nDS_WriteLog \"I\" \"Trying to Import the OSDSUS Module...\" $LogFile\n\n\ntry {\n        Import-Module -Name OSDSUS -Force\n        DS_WriteLog \"S\" \"Module got imported\" $LogFile\n     }  catch {\n              DS_WriteLog \"E\" \"An error occurred while importing the OSDSUS Module (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n\n\nDS_WriteLog \"-\" \"\" $LogFile\n\n\n# ---------------------------------------------------------------------------------------------------------------------------\n\n\nDS_WriteLog \"-\" \"\" $LogFile\nDS_WriteLog \"I\" \"End of script\" $LogFile\n\nGet-Content $LogFile -Verbose<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">First Run<\/h2>\n\n\n\n<p>This section will talk about how to first get started by importing your OS Media into OSDBuilder.  This section really only needs to be run once.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2020\/03\/image-12.png\" alt=\"OSDBuilder\" class=\"wp-image-38064\" width=\"182\" height=\"284\"\/><\/figure><\/div>\n\n\n\n<p>Here is what happens:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Install\/Update OSDbuilder<\/li><li>Import Server 2016 ISO into OSDBuilder<ul><li>lives in the &#8216;OSImport&#8217; directory<\/li><\/ul><\/li><li>Update OS with latest updates<ul><li>lives in the &#8216;OSMedia&#8217; directory<\/li><\/ul><\/li><\/ul>\n\n\n\n<p>The next time you run OSDBuilder, you don&#8217;t have to import the Media.  You can simply run the commands in the &#8216;<strong>On-going Updates<\/strong>&#8216; section below.  OSDBuilder will look in inside the &#8216;OSMedia&#8217; folder, look for any updates from the last time it was run and apply the delta.<\/p>\n\n\n\n<p>This code focuses on Server 2016.  However, same code would apply for different Operating Systems.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># https:\/\/citrixguyblog.com\/2019\/03\/19\/osdbuilder-reference-image-on-steroids\/\n\nImport-Module -Name OSDBuilder\n\n# Needs to be set for the rest of this to work\nGet-OSBuilder -SetPath \"E:\\OSDBuilder\"\n\n# Create mount point for Windows Server 2016 iso\n&amp; subst F: \\\\Fileshare-p1\\Files$\\Citrix\\Microsoft\\2016-ISO\n\n# Select index 2 (Standard w\/Desktop Experience), go right to the updates, skip the ogv menu\nImport-OSMedia -Verbose -ImageIndex 2 -SkipGrid\n\n# Now we update the media\n# the -SkipComponentCleanup argument is critical for us - without it, the PVS Target Device driver will break if installed during a task sequence \nGet-OSMedia | Sort ModifiedTime -Descending | Select -First 1 | Update-OSMedia -Download -Execute -SkipComponentCleanup\n\n# With the updates complete, we create a build task\nNew-OSBuildTask -TaskName 'Task' -CustomName 'Test' -EnableNetFx3 -EnableFeature\n\n# Cleanup mount point for 2016 iso\n&amp; subst F: \/D<\/code><\/pre>\n\n\n\n<p>Note:  You&#8217;ll want to change your paths to match your needs.  The &#8220;Get-OSBuilder -SetPath &#8220;E:\\OSDBuilder&#8221; is where you want OSDBuilder to create it&#8217;s directory\/file\/folder structure.  In my case I put it on another drive.  You&#8217;ll also want o change the path for your ISO location.   And also take note of the <strong>-SkipComponentCleanup<\/strong>.  You&#8217;ll need this if you are using Citrix Provisioning Services.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">On-going Updates<\/h2>\n\n\n\n<p>The &#8216;On-going Updates&#8217; section Gets\/Applies Windows Updates to the lasted updated &#8216;OSMedia&#8217; directory.  Meaning that you&#8217;ll only be applying delta updates to the previous one you ran.  If you want to apply updates from scratch, that&#8217;s configurable as well.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#==========================================================================\n#\n# Automating Reference Image with OSDBuilder\n#\n# AUTHOR: Julian Mooren (https:\/\/citrixguyblog.com)\n# DATE  : 03.18.2019\n#\n# PowerShell Template by Dennis Span (http:\/\/dennisspan.com)\n#\n#==========================================================================\n\n\n# define Error handling\n# note: do not change these values\n$global:ErrorActionPreference = \"Stop\"\nif($verbose){ $global:VerbosePreference = \"Continue\" }\n\n\n# FUNCTION DS_WriteLog\n#==========================================================================\nFunction DS_WriteLog {\n    &lt;#\n        .SYNOPSIS\n        Write text to this script's log file\n        .DESCRIPTION\n        Write text to this script's log file\n        .PARAMETER InformationType\n        This parameter contains the information type prefix. Possible prefixes and information types are:\n            I = Information\n            S = Success\n            W = Warning\n            E = Error\n            - = No status\n        .PARAMETER Text\n        This parameter contains the text (the line) you want to write to the log file. If text in the parameter is omitted, an empty line is written.\n        .PARAMETER LogFile\n        This parameter contains the full path, the file name and file extension to the log file (e.g. C:\\Logs\\MyApps\\MylogFile.log)\n        .EXAMPLE\n        DS_WriteLog -$InformationType \"I\" -Text \"Copy files to C:\\Temp\" -LogFile \"C:\\Logs\\MylogFile.log\"\n        Writes a line containing information to the log file\n        .Example\n        DS_WriteLog -$InformationType \"E\" -Text \"An error occurred trying to copy files to C:\\Temp (error: $($Error&#91;0]))\" -LogFile \"C:\\Logs\\MylogFile.log\"\n        Writes a line containing error information to the log file\n        .Example\n        DS_WriteLog -$InformationType \"-\" -Text \"\" -LogFile \"C:\\Logs\\MylogFile.log\"\n        Writes an empty line to the log file\n    #>\n    &#91;CmdletBinding()]\n    Param( \n        &#91;Parameter(Mandatory=$true, Position = 0)]&#91;ValidateSet(\"I\",\"S\",\"W\",\"E\",\"-\",IgnoreCase = $True)]&#91;String]$InformationType,\n        &#91;Parameter(Mandatory=$true, Position = 1)]&#91;AllowEmptyString()]&#91;String]$Text,\n        &#91;Parameter(Mandatory=$true, Position = 2)]&#91;AllowEmptyString()]&#91;String]$LogFile\n    )\n \n    begin {\n    }\n \n    process {\n     $DateTime = (Get-Date -format dd-MM-yyyy) + \" \" + (Get-Date -format HH:mm:ss)\n \n        if ( $Text -eq \"\" ) {\n            Add-Content $LogFile -value (\"\") # Write an empty line\n        } Else {\n         Add-Content $LogFile -value ($DateTime + \" \" + $InformationType.ToUpper() + \" - \" + $Text)\n        }\n    }\n \n    end {\n    }\n}\n#==========================================================================\n\n################\n# Main section #\n################\n\n# Custom variables \n$BaseLogDir = \"E:\\Logs\"                               \n$PackageName = \"OSDBuilder\"\n\n# OSDBuilder variables \n$OSDBuilderDir = \"E:\\OSDBuilder\"    \n$TaskName = \"CitrixVDA2\"  # Do not use the real name of the task file - Example: \"OSBuild Build-031819.json\" --> Build-031819\n\n#MDT variables\n$MDTShare = \"E:\\DeploymentShare\"\n\n\n# Global variables\n$date = Get-Date -Format yyy-MM-dd-HHmm\n$StartDir = $PSScriptRoot # the directory path of the script currently being executed\n$LogDir = (Join-Path $BaseLogDir $PackageName).Replace(\" \",\"_\")\n$LogFileName = \"$PackageName-$date.log\"\n$LogFile = Join-path $LogDir $LogFileName\n\n\n# Create the log directory if it does not exist\nif (!(Test-Path $LogDir)) { New-Item -Path $LogDir -ItemType directory | Out-Null }\n\n# Create new log file (overwrite existing one)\nNew-Item $LogFile -ItemType \"file\" -force | Out-Null\n\n\n# ---------------------------------------------------------------------------------------------------------------------------\n\n\nDS_WriteLog \"I\" \"START SCRIPT - $Installationtype $PackageName\" $LogFile\nDS_WriteLog \"-\" \"\" $LogFile\n\n\n#################################################\n# Update of the OS-Media                        #\n#################################################\n\nDS_WriteLog \"I\" \"Starting Update of OS-Media\" $LogFile\n\ntry {\n        $StartDTM = (Get-Date)\n        Get-OSBuilder -SetPath $OSDBuilderDir\n        DS_WriteLog \"S\" \"Set OSDBuider Path to $OSDBuilderDir\" $LogFile\n        $OSMediaSource = Get-ChildItem -Path \"$OSDBuilderDir\\OSMedia\" | Sort-Object LastAccessTime -Descending | Select-Object -First 1\n        Update-OSMedia -Name $($OSMediaSource.Name) -Download -Execute -SkipComponentCleanup\n\t    $EndDTM = (Get-Date) \n        DS_WriteLog \"S\" \"Update-OSMedia completed succesfully\" $LogFile\n\t\tDS_WriteLog \"I\" \"Elapsed Time: $(($EndDTM-$StartDTM).TotalMinutes) Minutes\" $LogFile\n     }  catch {\n              DS_WriteLog \"E\" \"An error occurred while updating the OS-Media (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n\n\n#################################################\n# Creation of the New-OSBuild                   #\n#################################################\n\nDS_WriteLog \"I\" \"Creating New-OSBuild\" $LogFile\n\ntry {\n        $StartDTM = (Get-Date)\n        New-OSBuild -ByTaskName $TaskName -Execute -SkipComponentCleanup\n        $EndDTM = (Get-Date)  \n        DS_WriteLog \"S\" \"OS-Media Creation for Task $TaskName completed succesfully\" $LogFile\n        DS_WriteLog \"I\" \"Elapsed Time: $(($EndDTM-$StartDTM).TotalMinutes) Minutes\" $LogFile\n     }  catch {\n              DS_WriteLog \"E\" \"An error occurred while creating the OS-Media (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n\n\n#################################################\n# Import the OS-Media to the MDT-Share          #\n#################################################\n\nDS_WriteLog \"I\" \"Searching for OS-Build Source Directory\" $LogFile\n\ntry {\n        $OSBuildSource = Get-ChildItem -Path \"$OSDBuilderDir\\OSBuilds\" | Sort-Object LastAccessTime -Descending | Select-Object -First 1\n        DS_WriteLog \"S\" \"Found the latest OS-Build directory - $($OSBuildSource.FullName) \" $LogFile\n     }  catch {\n              DS_WriteLog \"E\" \"An error occurred while searching the latest OS-Build directory (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n\n\nDS_WriteLog \"I\" \"Importing Microsoft Deployment Toolkit PowerShell Module\" $LogFile\n\ntry {\n        Import-Module \"C:\\Program Files\\Microsoft Deployment Toolkit\\Bin\\MicrosoftDeploymentToolkit.psd1\"\n        DS_WriteLog \"S\" \"MDT PS Module got imported successfully\" $LogFile\n     }  catch {\n              DS_WriteLog \"E\" \"An error occurred while importing the MDT PowerShell Module (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n\n\nDS_WriteLog \"I\" \"Adding MDT Drive\" $LogFile\n\n\ntry {\n        New-PSDrive -Name \"DS001\" -PSProvider \"MDTProvider\" \u2013Root $MDTShare -Description \"MDT Deployment Share\" \n        DS_WriteLog \"S\" \"Created MDT Drive\" $LogFile\n     }  catch {\n              DS_WriteLog \"E\" \"An error occurred while creating the MDT Drive (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n\n\nDS_WriteLog \"I\" \"Importing OS-Build to MDT\" $LogFile\n\ntry {\n        $date = Get-Date -Format yyy-MM-dd-HHmm\n        New-Item -Path \"DS001:\\Operating Systems\\2016\\OSDBuilder-$date\" -ItemType \"Directory\"\n        Import-MDTOperatingSystem -Path \"DS001:\\Operating Systems\\2016\\OSDBuilder-$date\" -SourcePath \"$($OSBuildSource.FullName)\\OS\" -DestinationFolder \"OSDBuilder-2016-$date\"\n        DS_WriteLog \"S\" \"Imported latest OS-Build\" $LogFile\n     }  catch {\n              DS_WriteLog \"E\" \"An error occurred while importing the OS-Build (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n\n\n\ntry {\n        Remove-PSDrive -Name \"DS001\"\n        DS_WriteLog \"S\" \"Removed the MDT Drive\" $LogFile\n     }  catch {\n              DS_WriteLog \"E\" \"An error occurred while removing the MDT Drive (error: $($error&#91;0]))\" $LogFile\n              Exit 1\n             }\n\n\n\n\n# ---------------------------------------------------------------------------------------------------------------------------\n\n\nDS_WriteLog \"-\" \"\" $LogFile\nDS_WriteLog \"I\" \"End of script\" $LogFile<\/code><\/pre>\n\n\n\n<p>You may have to edit these variables based upon your configuration.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"241\" height=\"138\" src=\"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2020\/03\/image-14.png\" alt=\"\" class=\"wp-image-38679\"\/><\/figure>\n\n\n\n<p>Note that the &#8216;TaskName&#8217; action is done in the &#8216;New-OSBuild&#8217; section.  This part can install any roles\/features\/languages that you may want to include that you don&#8217;t want to perform in your task sequence.  If you just need Windows Updates, you can remove that whole &#8216;New-OSBuild&#8217; section.<\/p>\n\n\n\n<p>Also, be sure to modify the MDT import directory that matches how your structuring your Operating Systems.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"910\" height=\"31\" src=\"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2020\/03\/image-15.png\" alt=\"\" class=\"wp-image-38680\"\/><\/figure>\n\n\n\n<p> Mine looks something like this:  <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"170\" height=\"94\" src=\"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2020\/03\/image-16.png\" alt=\"\" class=\"wp-image-38681\"\/><\/figure>\n\n\n\n<p>If you need to check out the logs to diagnose or troubleshoot issues, everything gets logged to the &#8216;log directory&#8217; you specify.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"249\" height=\"122\" src=\"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2020\/03\/image-17.png\" alt=\"\" class=\"wp-image-38682\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"777\" height=\"292\" src=\"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2020\/03\/image-18.png\" alt=\"\" class=\"wp-image-38690\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p>There you have it.  You now have a way to Automate updating your Windows OS media by using OSDBuilder, which then gets imported into your MDT environment. <\/p>\n\n\n\n<p>The next post I&#8217;ll go over the Task Sequence and how I&#8217;ve setup most of my installs.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Now that we&#8217;ve started down this &#8220;MDT&#8221; train, there&#8217;s no getting off until we discuss some of the more important parts. If you haven&#8217;t read the previous posts you can find them here: Post 1: https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/04\/citrix-microsoft-mdt-powershell-tools-the-beginning Post 2: https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/16\/building-multiple-citrix-images-with-one-microsoft-mdt-task-sequence Today we will be focusing on automating the procedures for always having an updated Windows OS&#8230;<\/p>\n","protected":false},"author":1,"featured_media":38656,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[8,11],"tags":[],"class_list":["post-37829","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-citrix","category-microsoft"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\r\n<title>Automate updating OS ISOs with OSDBuilder and MDT - Vertical Age Technologies, LLC<\/title>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Automate updating OS ISOs with OSDBuilder and MDT - Vertical Age Technologies, LLC\" \/>\r\n<meta property=\"og:description\" content=\"Now that we&#8217;ve started down this &#8220;MDT&#8221; train, there&#8217;s no getting off until we discuss some of the more important parts. If you haven&#8217;t read the previous posts you can find them here: Post 1: https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/04\/citrix-microsoft-mdt-powershell-tools-the-beginning Post 2: https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/16\/building-multiple-citrix-images-with-one-microsoft-mdt-task-sequence Today we will be focusing on automating the procedures for always having an updated Windows OS...\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt\" \/>\r\n<meta property=\"og:site_name\" content=\"Vertical Age Technologies, LLC\" \/>\r\n<meta property=\"article:published_time\" content=\"2020-03-31T14:59:15+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2020\/03\/image-13.png\" \/>\r\n\t<meta property=\"og:image:width\" content=\"622\" \/>\r\n\t<meta property=\"og:image:height\" content=\"357\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\r\n<meta name=\"author\" content=\"Steve Noel\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:creator\" content=\"@steve_noel\" \/>\r\n<meta name=\"twitter:site\" content=\"@steve_noel\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Noel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/index.php\\\/2020\\\/03\\\/31\\\/automate-updating-os-isos-with-osdbuilder-and-mdt#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/index.php\\\/2020\\\/03\\\/31\\\/automate-updating-os-isos-with-osdbuilder-and-mdt\"},\"author\":{\"name\":\"Steve Noel\",\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/#\\\/schema\\\/person\\\/8770e41ed31650ba3b32a4e7482e5de6\"},\"headline\":\"Automate updating OS ISOs with OSDBuilder and MDT\",\"datePublished\":\"2020-03-31T14:59:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/index.php\\\/2020\\\/03\\\/31\\\/automate-updating-os-isos-with-osdbuilder-and-mdt\"},\"wordCount\":745,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/index.php\\\/2020\\\/03\\\/31\\\/automate-updating-os-isos-with-osdbuilder-and-mdt#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/verticalagetechnologies.com\\\/wp-content\\\/uploads\\\/2020\\\/03\\\/image-13.png\",\"articleSection\":[\"Citrix\",\"Microsoft\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/verticalagetechnologies.com\\\/index.php\\\/2020\\\/03\\\/31\\\/automate-updating-os-isos-with-osdbuilder-and-mdt#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/index.php\\\/2020\\\/03\\\/31\\\/automate-updating-os-isos-with-osdbuilder-and-mdt\",\"url\":\"https:\\\/\\\/verticalagetechnologies.com\\\/index.php\\\/2020\\\/03\\\/31\\\/automate-updating-os-isos-with-osdbuilder-and-mdt\",\"name\":\"Automate updating OS ISOs with OSDBuilder and MDT - Vertical Age Technologies, LLC\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/index.php\\\/2020\\\/03\\\/31\\\/automate-updating-os-isos-with-osdbuilder-and-mdt#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/index.php\\\/2020\\\/03\\\/31\\\/automate-updating-os-isos-with-osdbuilder-and-mdt#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/verticalagetechnologies.com\\\/wp-content\\\/uploads\\\/2020\\\/03\\\/image-13.png\",\"datePublished\":\"2020-03-31T14:59:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/index.php\\\/2020\\\/03\\\/31\\\/automate-updating-os-isos-with-osdbuilder-and-mdt#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/verticalagetechnologies.com\\\/index.php\\\/2020\\\/03\\\/31\\\/automate-updating-os-isos-with-osdbuilder-and-mdt\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/index.php\\\/2020\\\/03\\\/31\\\/automate-updating-os-isos-with-osdbuilder-and-mdt#primaryimage\",\"url\":\"https:\\\/\\\/verticalagetechnologies.com\\\/wp-content\\\/uploads\\\/2020\\\/03\\\/image-13.png\",\"contentUrl\":\"https:\\\/\\\/verticalagetechnologies.com\\\/wp-content\\\/uploads\\\/2020\\\/03\\\/image-13.png\",\"width\":622,\"height\":357},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/index.php\\\/2020\\\/03\\\/31\\\/automate-updating-os-isos-with-osdbuilder-and-mdt#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/verticalagetechnologies.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automate updating OS ISOs with OSDBuilder and MDT\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/#website\",\"url\":\"https:\\\/\\\/verticalagetechnologies.com\\\/\",\"name\":\"Vertical Age Technologies, LLC\",\"description\":\"A Blogging and Portfolio website on everything technology.\",\"publisher\":{\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/verticalagetechnologies.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/#organization\",\"name\":\"Vertical Age Technologies\",\"url\":\"https:\\\/\\\/verticalagetechnologies.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/verticalagetechnologies.com\\\/wp-content\\\/uploads\\\/2015\\\/11\\\/VA-Green-Alpha.png\",\"contentUrl\":\"https:\\\/\\\/verticalagetechnologies.com\\\/wp-content\\\/uploads\\\/2015\\\/11\\\/VA-Green-Alpha.png\",\"width\":1683,\"height\":462,\"caption\":\"Vertical Age Technologies\"},\"image\":{\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/steve_noel\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/snoel\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/verticalagetechnologies.com\\\/#\\\/schema\\\/person\\\/8770e41ed31650ba3b32a4e7482e5de6\",\"name\":\"Steve Noel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8a54091a24f06514e9fa9b1702fdb589dced4bdf85d9ebced7ef6047b79a3ca3?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8a54091a24f06514e9fa9b1702fdb589dced4bdf85d9ebced7ef6047b79a3ca3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8a54091a24f06514e9fa9b1702fdb589dced4bdf85d9ebced7ef6047b79a3ca3?s=96&d=mm&r=g\",\"caption\":\"Steve Noel\"},\"sameAs\":[\"http:\\\/\\\/VerticalAge.com\"]}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Automate updating OS ISOs with OSDBuilder and MDT - Vertical Age Technologies, LLC","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt","og_locale":"en_US","og_type":"article","og_title":"Automate updating OS ISOs with OSDBuilder and MDT - Vertical Age Technologies, LLC","og_description":"Now that we&#8217;ve started down this &#8220;MDT&#8221; train, there&#8217;s no getting off until we discuss some of the more important parts. If you haven&#8217;t read the previous posts you can find them here: Post 1: https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/04\/citrix-microsoft-mdt-powershell-tools-the-beginning Post 2: https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/16\/building-multiple-citrix-images-with-one-microsoft-mdt-task-sequence Today we will be focusing on automating the procedures for always having an updated Windows OS...","og_url":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt","og_site_name":"Vertical Age Technologies, LLC","article_published_time":"2020-03-31T14:59:15+00:00","og_image":[{"width":622,"height":357,"url":"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2020\/03\/image-13.png","type":"image\/png"}],"author":"Steve Noel","twitter_card":"summary_large_image","twitter_creator":"@steve_noel","twitter_site":"@steve_noel","twitter_misc":{"Written by":"Steve Noel","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt#article","isPartOf":{"@id":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt"},"author":{"name":"Steve Noel","@id":"https:\/\/verticalagetechnologies.com\/#\/schema\/person\/8770e41ed31650ba3b32a4e7482e5de6"},"headline":"Automate updating OS ISOs with OSDBuilder and MDT","datePublished":"2020-03-31T14:59:15+00:00","mainEntityOfPage":{"@id":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt"},"wordCount":745,"commentCount":0,"publisher":{"@id":"https:\/\/verticalagetechnologies.com\/#organization"},"image":{"@id":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt#primaryimage"},"thumbnailUrl":"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2020\/03\/image-13.png","articleSection":["Citrix","Microsoft"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt#respond"]}]},{"@type":"WebPage","@id":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt","url":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt","name":"Automate updating OS ISOs with OSDBuilder and MDT - Vertical Age Technologies, LLC","isPartOf":{"@id":"https:\/\/verticalagetechnologies.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt#primaryimage"},"image":{"@id":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt#primaryimage"},"thumbnailUrl":"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2020\/03\/image-13.png","datePublished":"2020-03-31T14:59:15+00:00","breadcrumb":{"@id":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt#primaryimage","url":"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2020\/03\/image-13.png","contentUrl":"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2020\/03\/image-13.png","width":622,"height":357},{"@type":"BreadcrumbList","@id":"https:\/\/verticalagetechnologies.com\/index.php\/2020\/03\/31\/automate-updating-os-isos-with-osdbuilder-and-mdt#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/verticalagetechnologies.com\/"},{"@type":"ListItem","position":2,"name":"Automate updating OS ISOs with OSDBuilder and MDT"}]},{"@type":"WebSite","@id":"https:\/\/verticalagetechnologies.com\/#website","url":"https:\/\/verticalagetechnologies.com\/","name":"Vertical Age Technologies, LLC","description":"A Blogging and Portfolio website on everything technology.","publisher":{"@id":"https:\/\/verticalagetechnologies.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/verticalagetechnologies.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/verticalagetechnologies.com\/#organization","name":"Vertical Age Technologies","url":"https:\/\/verticalagetechnologies.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/verticalagetechnologies.com\/#\/schema\/logo\/image\/","url":"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2015\/11\/VA-Green-Alpha.png","contentUrl":"https:\/\/verticalagetechnologies.com\/wp-content\/uploads\/2015\/11\/VA-Green-Alpha.png","width":1683,"height":462,"caption":"Vertical Age Technologies"},"image":{"@id":"https:\/\/verticalagetechnologies.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/steve_noel","https:\/\/www.linkedin.com\/in\/snoel\/"]},{"@type":"Person","@id":"https:\/\/verticalagetechnologies.com\/#\/schema\/person\/8770e41ed31650ba3b32a4e7482e5de6","name":"Steve Noel","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/8a54091a24f06514e9fa9b1702fdb589dced4bdf85d9ebced7ef6047b79a3ca3?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8a54091a24f06514e9fa9b1702fdb589dced4bdf85d9ebced7ef6047b79a3ca3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8a54091a24f06514e9fa9b1702fdb589dced4bdf85d9ebced7ef6047b79a3ca3?s=96&d=mm&r=g","caption":"Steve Noel"},"sameAs":["http:\/\/VerticalAge.com"]}]}},"_links":{"self":[{"href":"https:\/\/verticalagetechnologies.com\/index.php\/wp-json\/wp\/v2\/posts\/37829","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/verticalagetechnologies.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/verticalagetechnologies.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/verticalagetechnologies.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/verticalagetechnologies.com\/index.php\/wp-json\/wp\/v2\/comments?post=37829"}],"version-history":[{"count":15,"href":"https:\/\/verticalagetechnologies.com\/index.php\/wp-json\/wp\/v2\/posts\/37829\/revisions"}],"predecessor-version":[{"id":38818,"href":"https:\/\/verticalagetechnologies.com\/index.php\/wp-json\/wp\/v2\/posts\/37829\/revisions\/38818"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/verticalagetechnologies.com\/index.php\/wp-json\/wp\/v2\/media\/38656"}],"wp:attachment":[{"href":"https:\/\/verticalagetechnologies.com\/index.php\/wp-json\/wp\/v2\/media?parent=37829"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/verticalagetechnologies.com\/index.php\/wp-json\/wp\/v2\/categories?post=37829"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/verticalagetechnologies.com\/index.php\/wp-json\/wp\/v2\/tags?post=37829"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}