Merge remote-tracking branch 'refs/remotes/vmware/master'

This commit is contained in:
Matt Frey committed 2017-06-13 23:08:21 -05:00
commit 0990bc0372
20 files changed
+256

No files matched your search

View File
Whitespace-only changes.
+51
View File
@@ -0,0 +1,51 @@
# PowerShell Studio Files
*.temppoint.*
*.psproj.psbuild
*.psbuild
#VS Code Files
*.vscode
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk
# =========================
# Operating System Files
# =========================
# OSX
# =========================
.DS_Store
.AppleDouble
.LSOverride
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+97
View File
@@ -0,0 +1,97 @@
<#
Script name: esxi-image-comparator.ps1
Last update: 24 May 2017
Author: Eric Gray, @eric_gray
Description: Compare contents (VIBs) of multiple VMware ESXi image profiles.
Dependencies: PowerCLI Image Builder (VMware.ImageBuilder,VMware.VimAutomation.Core)
#>
param(
[switch]$ShowAllVIBs=$false,
[switch]$HideDates=$false,
[switch]$Interactive=$false,
[switch]$Grid=$false,
[string]$ProfileInclude,
[string]$ProfileExclude
)
$profileList = Get-EsxImageProfile | sort -Property Name
if ($ProfileInclude) {
$profileList = $profileList | ? Name -Match $ProfileInclude
}
if ($ProfileExclude) {
$profileList = $profileList | ? Name -NotMatch $ProfileExclude
}
if ($profileList.Count -eq 0) {
Write-Host "No ESXi image profiles available in current session."
Write-Host "Use Add-EsxSoftwareDepot for each depot zip bundle you would like to compare."
exit 1
}
if ($Interactive) {
$keep = @()
Write-Host "Found the following profiles:" -ForegroundColor Yellow
$profileList | % { write-host $_.Name }
if ($profileList.Count -gt 7) {
Write-Host "Found $($profileList.Count) profiles!" -ForegroundColor Yellow
Write-Host "Note: List filtering is possible through -ProfileInclude / -ProfileExclude" -ForegroundColor DarkGreen
}
write-host "`nType 'y' next to each profile to compare..." -ForegroundColor Yellow
foreach ($profile in $profileList) {
$want = Read-Host -Prompt $profile.Name
if ($want.StartsWith("y") ) {
$keep += $profile
}
}
$profileList = $keep
}
# go thru each profile and build a hash of the vib name and hash of profile name + version
$diffResults = @{}
foreach ($profile in $profileList ) {
foreach ($vib in $profile.VibList) {
$vibValue = $vib.Version
if (! $HideDates) {
$vibValue += " "+ $vib.CreationDate.ToShortDateString()
}
$diffResults.($vib.name) += @{$profile.name = $vibValue}
}
}
# create an object that will neatly output as CSV or table
$outputTable=@()
foreach ($row in $diffResults.keys | sort) {
$vibRow = new-object PSObject
$vibRow | add-member -membertype NoteProperty -name "VIB" -Value $row
$valueCounter = @{}
foreach ($profileName in $profileList.name) {
#populate this hash to decide if all profiles have same version of VIB
$valueCounter.($diffResults.$row.$profileName) = 1
$vibRow | add-member -membertype NoteProperty -name $profileName -Value $diffResults.$row.$profileName
}
if ($valueCounter.Count -gt 1 -or $ShowAllVIBs) {
$outputTable += $vibRow
}
}
# useful for debugging
#$diffResults | ConvertTo-Json
#$outputTable|Export-Csv -Path .\image-diff-results.csv -NoTypeInformation
if ($Grid) {
$outputTable | Out-GridView -Title "VMware ESXi Image Profile Comparator"
} else {
$outputTable
}
+108
View File
@@ -0,0 +1,108 @@
<#
Script name: esxi-image-creator.ps1
Last update: 24 May 2017
Author: Eric Gray, @eric_gray
Description: Create a VMware ESXi image profile based on
one or more depots and offline driver bundles.
Dependencies: PowerCLI Image Builder (VMware.ImageBuilder,VMware.VimAutomation.Core)
#>
param(
[switch]$NewestDate = $false,
[switch]$WriteZip = $false,
[switch]$WriteISO = $false,
[switch]$LeaveCurrentDepotsMounted = $false,
[string]$NewProfileName = "Custom Image $(Get-Date -Format "yyyyMMddhhmm")",
[ValidateNotNullOrEmpty()]
[ValidateSet('VMwareCertified','VMwareAccepted','PartnerSupported','CommunitySupported')]
[string]$Acceptance = "VMwareCertified",
[string[]]$Files = "*.zip"
)
#### Specify optional image fine-tuning here ####
# comma-separated list (array) of VIBs to exclude
$removeVibs = @("tools-light")
# force specific VIB version to be included, when more than one version is present
# e.g. "net-enic"="2.1.2.71-1OEM.550.0.0.1331820"
$overrideVibs = @{
# "net-enic"="2.1.2.71-1OEM.550.0.0.1331820",
}
#### end of optional fine-tuning ####
# may be desirable to manually mount an online depot in advance, such as for HPE
# e.g. Add-EsxSoftwareDepot http://vibsdepot.hpe.com/index-ecli-650.xml
if (! $LeaveCurrentDepotsMounted) {
Get-EsxSoftwareDepot | Remove-EsxSoftwareDepot
}
foreach ($depot in Get-ChildItem $Files) {
if ($depot.Name.EndsWith(".zip") ) {
Add-EsxSoftwareDepot $depot.FullName
} else {
Write-Host "Not a zip depot:" $depot.Name
}
}
if ((Get-EsxImageProfile).count -eq 0) {
write-host "No image profiles found in the selected files"
exit 1
}
# either use the native -Newest switch, or try to find latest VIBs by date (NewestDate)
if ($NewestDate) {
$pkgsAll = Get-EsxSoftwarePackage | sort -Property Name,CreationDate -Descending
$pkgsNewestDate=@()
foreach ($pkg in $pkgsAll) {
if ($pkgsNewestDate.GetEnumerator().name -notcontains $pkg.Name ) {
$pkgsNewestDate += $pkg
}
}
$pkgs = $pkgsNewestDate
} else {
$pkgs = Get-ESXSoftwarePackage -Newest
}
# rebuild the package array according to manual fine-tuning
if ($removeVibs) {
Write-Host "`nThe following VIBs will not be included in ${NewProfileName}:" -ForegroundColor Yellow
$removeVibs
$pkgs = $pkgs | ? name -NotIn $removeVibs
}
foreach ($override in $overrideVibs.keys) {
# check that the override exists, then remove existing and add override
$tmpOver = Get-EsxSoftwarePackage -Name $override -Version $overrideVibs.$override
if ($tmpOver) {
$pkgs = $pkgs | ? name -NotIn $tmpOver.name
$pkgs += $tmpOver
} else {
Write-host "Did not find:" $override $overrideVibs.$override -ForegroundColor Yellow
}
}
try {
New-EsxImageProfile -NewProfile $NewProfileName -SoftwarePackage $pkgs `
-Vendor Custom -AcceptanceLevel $Acceptance -Description "Made with esxi-image-creator.ps1" `
-ErrorAction Stop -ErrorVariable CreationError | Out-Null
}
catch {
Write-Host "Custom image profile $NewProfileName not created." -ForegroundColor Yellow
$CreationError
exit 1
}
Write-Host "`nFinished creating $NewProfileName" -ForegroundColor Yellow
if ($WriteZip) {
Write-Host "Creating zip bundle..." -ForegroundColor Green
Export-EsxImageProfile -ImageProfile $NewProfileName -ExportToBundle -FilePath .\${NewProfileName}.zip -Force
}
if ($WriteISO) {
Write-Host "Creating ISO image..." -ForegroundColor Green
Export-EsxImageProfile -ImageProfile $NewProfileName -ExportToIso -FilePath .\${NewProfileName}.iso -Force
}