Here are samples files and links I demonstrated during The Ultimate Event II roadshow that took place during September 22 – 26, 2014.
Scripts from Mikael's demos are found here: http://deploymentbunny.com/2014/09/25/sample-files-and-links-from-the-ultimate-event-ii-roadshow/
Session 01
Client health and troubleshooting
How to get SMART data from Windows 8.1 machines using PowerShell
# Show Disk Health Get-Disk 0 | Get-StorageReliabilityCounter
The xperf and xbootmgr commands used in the Windows Performance Toolkit demo.
xperf -profiles Xperf –start perf!GeneralProfiles.InBuffer xperf –stop perf!GeneralProfiles.InBuffer C:\Demo\trace.etl Xperf trace.etl xbootmgr -trace boot
PowerShell commands to read reliability history information was gathered from the following posts:
https://www.myotherpcisacloud.com/post/2012/01/09/Using-Powershell-to-Monitor-Windows-Reliability-Data.aspx (by Ryan Ries)
http://technet.microsoft.com/en-us/magazine/dd535685.aspx (by Jason Leznek)
Session 03
The script that exported task sequences was gathered from the following post:
http://trevorsullivan.net/2010/05/13/exporting-configmgr-task-sequences (by Trevor Sullivan)
The script that imported task sequences was gathered from the following post:
http://www.david-obrien.net/2012/09/29/how-to-backup-restore-your-tasksequenceconfiguration-manager-2012-and-powershell (by David O’Brien)
The New-TaskSequence.ps1 script that created native task sequence in ConfigMgr 2012 was gathered (and then modified a bit) from the following post:
http://www.jamesbannanit.com/2014/09/create-an-os-deployment-task-sequence-in-configuration-manager-2012-with-powershell (by James Bannan)
Here is the modified script:
Import-Module (Join-Path $(Split-Path $env:SMS_ADMIN_UI_PATH) ConfigurationManager.psd1) cd PS1: # Define Configuration Manager variables $CMSiteCode = 'PS1' $CMSiteServer = 'CM01.corp.viamonstra.com' $CMNameSpace = "root\SMS\site_$CMSiteCode" $Password = 'P@ssw0rd' $DomainPassword = ConvertTo-SecureString -AsPlainText $Password -Force $LocalAdminPassword = ConvertTo-SecureString -AsPlainText $Password -Force # 1.0 Get Deployment Objects $BootImageID = (Get-CMBootImage -Name 'Zero Touch WinPE 5.0 x64').PackageID $OSImageID = (Get-CMOperatingSystemImage -Name 'Windows 8.1 Enterprise x64').PackageID $ClientPackageID = (Get-CMPackage -Name 'ConfigMgr Client with Hotfixes').PackageID # 1.1 Create Task Sequence New-CMTaskSequence -InstallOperatingSystemImageOption ` -TaskSequenceName 'Deploy Windows 8.1 x64 Enterprise' ` -BootImagePackageId $BootImageID ` -OperatingSystemImagePackageId $OSImageID ` -OperatingSystemImageIndex '1' ` -ClientPackagePackageId $ClientPackageID ` -JoinDomain DomainType ` -DomainName 'corp.viamonstra.com' ` -DomainAccount 'VIAMONSTRA\CM_JD' ` -DomainPassword $DomainPassword ` -DomainOrganizationUnit 'LDAP://OU=Workstations,DC=corp,DC=viamonstra,DC=com' ` -PartitionAndFormatTarget $true ` -LocalAdminPassword $LocalAdminPassword New-CMTaskSequence -InstallOperatingSystemImageOption -BootImagePackageId "PS100007" -TaskSequenceName "InstallOStask01" -OperatingSystemImagePackageId "PS100006" -OperatingSystemImageIndex "1" -JoinDomain WorkgroupType -WorkgroupName "ViaMonstra" -UserStateMigrationToolPackageID "PS100001"
The New-MDTProductionDS.ps1 script to build a deployment share in MDT 2013.
<# Script name: Created: 2013-12-16 Version: 1.2 Author Mikael Nystrom and Johan Arwidmark Homepage: http://www.deploymentfundamentals.com Disclaimer: This script is provided "AS IS" with no warranties, confers no rights and is not supported by the authors or DeploymentArtist. Author - Mikael Nystrom Twitter: @mikael_nystrom Blog : http://deploymentbunny.com Author - Johan Arwidmark Twitter: @jarwidmark Blog : http://deploymentresearch.com #> # Check for elevation If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(` [Security.Principal.WindowsBuiltInRole] "Administrator")) { Write-Warning "Oupps, you need to run this script from an elevated PowerShell prompt!`nPlease start the PowerShell prompt as an Administrator and re-run the script." Write-Warning "Aborting script..." Break } #Set Variables $ComputerName = $Env:COMPUTERNAME $RootDrive = "C:" # Validation, verify that we have all files, and that the deployment share doesnt exist already if (!(Test-Path -Path "$RootDrive\Setup\MDTProduction")) {Write-Warning "Could not find MDT Production sample files, aborting...";Break} if (!(Test-Path -Path "$RootDrive\Setup\Downloads\Application Import\Install - HP Service Pack - x86-x64")) {Write-Warning "Could not find HP Service Pack, aborting...";Break} if (!(Test-Path -Path "$RootDrive\Setup\Drivers\Windows Server 2012 R2\Proliant ML350p Gen8")) {Write-Warning "Could not find Windows Server 2012 R2 drivers, aborting...";Break} if (!(Test-Path -Path "$RootDrive\Setup\Drivers\WinPE x64")) {Write-Warning "Could not find WinPE drivers, aborting...";Break} if (!(Test-Path -Path "$RootDrive\MDTBuildLab\Captures\REFWS2012R2-001.wim")) {Write-Warning "Could not find REFWS2012R2-001.wim, aborting...";Break} if (!(Test-Path -Path "$RootDrive\MDTBuildLab\Operating Systems\WS2012R2\setup.exe")) {Write-Warning "Could not find Windows Server 2012 R2 setup files, aborting...";Break} # Validation, verify that the deployment share doesnt exist already $MDTProductionShareExist = Get-SmbShare | Where-Object -Property Name -Like -Value 'MDTProduction$' If ($MDTProductionShareExist.Name -eq 'MDTProduction$'){Write-Warning "MDTProduction$ share already exist, aborting...";Break} if (Test-Path -Path "$RootDrive\MDTProduction") {Write-Warning "$RootDrive\MDTProduction already exist, aborting...";Break} # Validation, verify that the PSDrive doesnt exist already if (Test-Path -Path "DS002:") {Write-Warning "DS002: PSDrive already exist, aborting...";Break} # Create the MDT Production Deployment Share root folder New-Item -Path $RootDrive\MDTProduction -ItemType directory # Create the MDT Production Deployment Share Import-Module "$RootDrive\Program Files\Microsoft Deployment Toolkit\bin\MicrosoftDeploymentToolkit.psd1" new-PSDrive -Name "DS002" -PSProvider "MDTProvider" -Root "$RootDrive\MDTProduction" -Description "MDT Production" -NetworkPath "\\$ComputerName\MDTProduction$" | add-MDTPersistentDrive New-SmbShare –Name MDTProduction$ –Path "$RootDrive\MDTProduction" –ChangeAccess EVERYONE #Create Logical Folder Structure New-Item -Path "DS002:\Operating Systems" -enable "True" -Name "Windows Server 2012 R2" -Comments "" -ItemType "folder" New-Item -Path "DS002:\Task Sequences" -enable "True" -Name "Windows Server 2012 R2" -Comments "" -ItemType "folder" New-Item -Path "DS002:\Applications" -enable "True" -Name "HP" -Comments "" -ItemType "folder" New-Item -Path "DS002:\Out-of-Box Drivers" -enable "True" -Name "WinPE x64" -Comments "" -ItemType "folder" New-Item -Path "DS002:\Out-of-Box Drivers" -enable "True" -Name "Windows Server 2012 R2" -Comments "" -ItemType "folder" New-Item -Path "DS002:\Out-of-Box Drivers\Windows Server 2012 R2" -enable "True" -Name "Proliant ML350p Gen8" -Comments "" -ItemType "folder" #Update ControlFiles Copy-Item "$RootDrive\Setup\MDTProduction\Control\Bootstrap.ini" "$RootDrive\MDTProduction\Control" -Force Copy-Item "$RootDrive\Setup\MDTProduction\Control\CustomSettings.ini" "$RootDrive\MDTProduction\Control" -Force #Import Applications Import-MDTApplication -Path "DS002:\Applications\HP" -enable "True" -Name "Install - HP Service Pack - x86-x64" -ShortName "Install - HP Service Pack - x86-x64" -Version "" -Publisher "" -Language "" -CommandLine "cscript.exe Install-HPServicePackx86x64.wsf" -WorkingDirectory ".\Applications\Install - HP Service Pack - x86-x64" -ApplicationSourcePath "$RootDrive\Setup\Downloads\Application Import\Install - HP Service Pack - x86-x64" -DestinationFolder "Install - HP Service Pack - x86-x64" #Import Drivers for OS Import-MDTDriver -Path "DS002:\Out-of-Box Drivers\Windows Server 2012 R2\Proliant ML350p Gen8" -SourcePath "$RootDrive\Setup\Drivers\Windows Server 2012 R2\Proliant ML350p Gen8" #Import Drivers for WinPE Import-MDTDriver -Path "DS002:\Out-of-Box Drivers\WinPE x64" -SourcePath "$RootDrive\Setup\Drivers\WinPE x64" #Import Custom Image Import-MDTOperatingSystem -Path "DS002:\Operating Systems\Windows Server 2012 R2" -SourceFile "$RootDrive\MDTBuildLab\Captures\REFWS2012R2-001.wim" -DestinationFolder "WS2012R2" -SetupPath "$RootDrive\MDTBuildLab\Operating Systems\WS2012R2" $ImageName = Get-ChildItem -Path 'DS002:\Operating Systems\Windows Server 2012 R2' | Where-Object -Property ImageFile -Like -Value '*REFWS2012R2-001.wim' $ImageLabel = $ImageName.Name Rename-Item -Path "DS002:\Operating Systems\Windows Server 2012 R2\$ImageLabel" -NewName 'Windows Server 2012 R2 Standard' #Create WinPE Selection Profile New-Item -Path "DS002:\Selection Profiles" -enable "True" -Name "WinPE x64" -Comments "" -Definition "" -ReadOnly "False" #Create TaskSequence Import-MDTTaskSequence -Path "DS002:\Task Sequences\Windows Server 2012 R2" -Name "Windows Server 2012 R2 Standard" -Template "Server.xml" -Comments "Production deployment" -ID "WS2012R2-001" -Version "1.0" -OperatingSystemPath "DS002:\Operating Systems\Windows Server 2012 R2\Windows Server 2012 R2 Standard" -FullName "ViaMonstra" -OrgName "ViaMonstra" -HomePage "about:blank" #Configure DeploymentShare Set-ItemProperty -Path DS002: -Name SupportX86 -Value 'False' Set-ItemProperty -Path DS002: -Name Boot.x64.ScratchSpace -Value '512' Set-ItemProperty -Path DS002: -Name Boot.x64.IncludeAllDrivers -Value 'True' Set-ItemProperty -Path DS002: -Name Boot.x64.SelectionProfile -Value 'WinPE x64' Set-ItemProperty -Path DS002: -Name Boot.x64.LiteTouchWIMDescription -Value 'MDT Production x64' Set-ItemProperty -Path DS002: -Name Boot.x64.LiteTouchISOName -Value 'MDT Production x64.iso' #Update DeploymentShare Update-MDTDeploymentShare -Path "DS002:"
d
More ...