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

This commit is contained in:
mycloudrevolution
2016-12-05 12:48:19 +01:00
7 changed files with 449 additions and 15 deletions

202
Modules/Backup-VCSA.psm1 Normal file
View File

@@ -0,0 +1,202 @@
Function Backup-VCSAToFile {
<#
.NOTES
===========================================================================
Created by: Brian Graf
Date: October 30, 2016
Organization: VMware
Blog: www.vtagion.com
Twitter: @vBrianGraf
===========================================================================
.SYNOPSIS
This function will allow you to create a full or partial backup of your
VCSA appliance. (vSphere 6.5 and higher)
.DESCRIPTION
Use this function to backup your VCSA to a remote location
.EXAMPLE
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword = "VMw@re123"
$Comment = "First API Backup"
$LocationType = "FTP"
$location = "10.144.99.5/vcsabackup-$((Get-Date).ToString('yyyy-MM-dd-hh-mm'))"
$LocationUser = "admin"
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$locationPassword = "VMw@re123"
PS C:\> Backup-VCSAToFile -BackupPassword $BackupPassword -LocationType $LocationType -Location $location -LocationUser $LocationUser -LocationPassword $locationPassword -Comment "This is a demo" -ShowProgress -FullBackup
.NOTES
Credit goes to @AlanRenouf for sharing the base of this function with me which I was able to take and make more robust as well as add in progress indicators
You must be connected to the CisService for this to work, if you are not connected, the function will prompt you for your credentials
If a -LocationType is not chosen, the function will default to FTP.
The destination location for a backup must be an empty folder (easiest to use the get-date cmdlet in the location)
-ShowProgress will give you a progressbar as well as updates in the console
-SeatBackup will only backup the config whereas -Fullbackup grabs the historical data as well
#>
param (
[Parameter(ParameterSetName=FullBackup)]
[switch]$FullBackup,
[Parameter(ParameterSetName=SeatBackup)]
[switch]$SeatBackup,
[ValidateSet('FTPS', 'HTTP', 'SCP', 'HTTPS', 'FTP')]
$LocationType = "FTP",
$Location,
$LocationUser,
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$LocationPassword,
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword,
$Comment = "Backup job",
[switch]$ShowProgress
)
Begin {
if (!($global:DefaultCisServers)){
[System.Windows.Forms.MessageBox]::Show("It appears you have not created a connection to the CisServer. You will now be prompted to enter your vCenter credentials to continue" , "Connect to CisServer") | out-null
$Connection = Connect-CisServer $global:DefaultVIServer
} else {
$Connection = $global:DefaultCisServers
}
if ($FullBackup) {$parts = @("common","seat")}
if ($SeatBackup) {$parts = @("seat")}
}
Process{
$BackupAPI = Get-CisService com.vmware.appliance.recovery.backup.job
$CreateSpec = $BackupAPI.Help.create.piece.CreateExample()
$CreateSpec.parts = $parts
$CreateSpec.backup_password = $BackupPassword
$CreateSpec.location_type = $LocationType
$CreateSpec.location = $Location
$CreateSpec.location_user = $LocationUser
$CreateSpec.location_password = $LocationPassword
$CreateSpec.comment = $Comment
try {
$BackupJob = $BackupAPI.create($CreateSpec)
}
catch {
Write-Error $Error[0].exception.Message
}
If ($ShowProgress){
do {
$BackupAPI.get("$($BackupJob.ID)") | select id, progress, state
$progress = ($BackupAPI.get("$($BackupJob.ID)").progress)
Write-Progress -Activity "Backing up VCSA" -Status $BackupAPI.get("$($BackupJob.ID)").state -PercentComplete ($BackupAPI.get("$($BackupJob.ID)").progress) -CurrentOperation "$progress% Complete"
start-sleep -seconds 5
} until ($BackupAPI.get("$($BackupJob.ID)").progress -eq 100 -or $BackupAPI.get("$($BackupJob.ID)").state -ne "INPROGRESS")
$BackupAPI.get("$($BackupJob.ID)") | select id, progress, state
}
Else {
$BackupJob | select id, progress, state
}
}
End {}
}
Function Get-VCSABackupJobs {
<#
.NOTES
===========================================================================
Created by: Brian Graf
Date: October 30, 2016
Organization: VMware
Blog: www.vtagion.com
Twitter: @vBrianGraf
===========================================================================
.SYNOPSIS
Get-VCSABackupJobs returns a list of all backup jobs VCSA has ever performed (vSphere 6.5 and higher)
.DESCRIPTION
Get-VCSABackupJobs returns a list of all backup jobs VCSA has ever performed
.EXAMPLE
PS C:\> Get-VCSABackupJobs
.NOTES
The values returned are read as follows:
YYYYMMDD-hhmmss-vcsabuildnumber
You can pipe the results of this function into the Get-VCSABackupStatus function
Get-VCSABackupJobs | select -First 1 | Get-VCSABackupStatus <- Most recent backup
#>
param (
[switch]$ShowNewest
)
Begin {
if (!($global:DefaultCisServers)){
[System.Windows.Forms.MessageBox]::Show("It appears you have not created a connection to the CisServer. You will now be prompted to enter your vCenter credentials to continue" , "Connect to CisServer") | out-null
$Connection = Connect-CisServer $global:DefaultVIServer
} else {
$Connection = $global:DefaultCisServers
}
}
Process{
$BackupAPI = Get-CisService com.vmware.appliance.recovery.backup.job
try {
if ($ShowNewest) {
$results = $BackupAPI.list()
$results[0]
} else {
$BackupAPI.list()
}
}
catch {
Write-Error $Error[0].exception.Message
}
}
End {}
}
Function Get-VCSABackupStatus {
<#
.NOTES
===========================================================================
Created by: Brian Graf
Date: October 30, 2016
Organization: VMware
Blog: www.vtagion.com
Twitter: @vBrianGraf
===========================================================================
.SYNOPSIS
Returns the ID, Progress, and State of a VCSA backup (vSphere 6.5 and higher)
.DESCRIPTION
Returns the ID, Progress, and State of a VCSA backup
.EXAMPLE
PS C:\> $backups = Get-VCSABackupJobs
$backups[0] | Get-VCSABackupStatus
.NOTES
The BackupID can be piped in from the Get-VCSABackupJobs function and can return multiple job statuses
#>
Param (
[parameter(ValueFromPipeline=$True)]
[string[]]$BackupID
)
Begin {
if (!($global:DefaultCisServers)){
[System.Windows.Forms.MessageBox]::Show("It appears you have not created a connection to the CisServer. You will now be prompted to enter your vCenter credentials to continue" , "Connect to CisServer") | out-null
$Connection = Connect-CisServer $global:DefaultVIServer
} else {
$Connection = $global:DefaultCisServers
}
$BackupAPI = Get-CisService com.vmware.appliance.recovery.backup.job
}
Process{
foreach ($id in $BackupID) {
$BackupAPI.get("$id") | select id, progress, state
}
}
End {}
}

70
Scripts/AutomaticVMFSUnmap.ps1 Executable file
View File

@@ -0,0 +1,70 @@
<#
.SYNOPSIS Retrieve the current VMFS Unmap priority for VMFS 6 datastore
.NOTES Author: William Lam
.NOTES Site: www.virtuallyghetto.com
.NOTES Reference: http://www.virtuallyghetto.com/2016/10/configure-new-automatic-space-reclamation-vmfs-unmap-using-vsphere-6-5-apis.html
.PARAMETER Datastore
VMFS 6 Datastore to enable or disable VMFS Unamp
.EXAMPLE
Get-Datastore "mini-local-datastore-hdd" | Get-VMFSUnmap
#>
Function Get-VMFSUnmap {
param(
[Parameter(
Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)
]
[VMware.VimAutomation.ViCore.Impl.V1.DatastoreManagement.DatastoreImpl]$Datastore
)
$datastoreInfo = $Datastore.ExtensionData.Info
if($datastoreInfo -is [VMware.Vim.VmfsDatastoreInfo] -and $datastoreInfo.Vmfs.MajorVersion -eq 6) {
$datastoreInfo.Vmfs | select Name, UnmapPriority, UnmapGranularity
} else {
Write-Host "Not a VMFS Datastore and/or VMFS version is not 6.0"
}
}
<#
.SYNOPSIS Configure the VMFS Unmap priority for VMFS 6 datastore
.NOTES Author: William Lam
.NOTES Site: www.virtuallyghetto.com
.NOTES Reference: http://www.virtuallyghetto.com/2016/10/configure-new-automatic-space-reclamation-vmfs-unmap-using-vsphere-6-5-apis.html
.PARAMETER Datastore
VMFS 6 Datastore to enable or disable VMFS Unamp
.EXAMPLE
Get-Datastore "mini-local-datastore-hdd" | Set-VMFSUnmap -Enabled $true
.EXAMPLE
Get-Datastore "mini-local-datastore-hdd" | Set-VMFSUnmap -Enabled $false
#>
Function Set-VMFSUnmap {
param(
[Parameter(
Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)
]
[VMware.VimAutomation.ViCore.Impl.V1.DatastoreManagement.DatastoreImpl]$Datastore,
[String]$Enabled
)
$vmhostView = ($Datastore | Get-VMHost).ExtensionData
$storageSystem = Get-View $vmhostView.ConfigManager.StorageSystem
if($Enabled -eq $true) {
$enableUNMAP = "low"
$reconfigMessage = "Enabling Automatic VMFS Unmap for $Datastore"
} else {
$enableUNMAP = "none"
$reconfigMessage = "Disabling Automatic VMFS Unmap for $Datastore"
}
$uuid = $datastore.ExtensionData.Info.Vmfs.Uuid
Write-Host "$reconfigMessage ..."
$storageSystem.UpdateVmfsUnmapPriority($uuid,$enableUNMAP)
}

30
Scripts/ESXInstallDate.ps1 Executable file
View File

@@ -0,0 +1,30 @@
<#
.SYNOPSIS Retrieve the installation date of an ESXi host
.NOTES Author: William Lam
.NOTES Site: www.virtuallyghetto.com
.NOTES Reference: http://www.virtuallyghetto.com/2016/10/super-easy-way-of-getting-esxi-installation-date-in-vsphere-6-5.html
.PARAMETER Vmhost
ESXi host to query installation date
.EXAMPLE
Get-Vmhost "mini" | Get-ESXInstallDate
#>
Function Get-ESXInstallDate {
param(
[Parameter(
Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)
]
[VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl]$Vmhost
)
if($Vmhost.Version -eq "6.5.0") {
$imageManager = Get-View ($Vmhost.ExtensionData.ConfigManager.ImageConfigManager)
$installDate = $imageManager.installDate()
Write-Host "$Vmhost was installed on $installDate"
} else {
Write-Host "ESXi must be running 6.5"
}
}

41
Scripts/ESXInstalledVIBs.ps1 Executable file
View File

@@ -0,0 +1,41 @@
<#
.SYNOPSIS Retrieve the installation date of an ESXi host
.NOTES Author: William Lam
.NOTES Site: www.virtuallyghetto.com
.PARAMETER Vmhost
ESXi host to query installed ESXi VIBs
.EXAMPLE
Get-ESXInstalledVibs -Vmhost (Get-Vmhost "mini")
.EXAMPLE
Get-ESXInstalledVibs -Vmhost (Get-Vmhost "mini") -vibname vsan
#>
Function Get-ESXInstalledVibs {
param(
[Parameter(
Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)
]
[VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl]$Vmhost,
[Parameter(
Mandatory=$false,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)
]
[String]$vibname=""
)
$imageManager = Get-View ($Vmhost.ExtensionData.ConfigManager.ImageConfigManager)
$vibs = $imageManager.fetchSoftwarePackages()
foreach ($vib in $vibs) {
if($vibname -ne "") {
if($vib.name -eq $vibname) {
return $vib | select Name, Version, Vendor, CreationDate, Summary
}
} else {
$vib | select Name, Version, Vendor, CreationDate, Summary
}
}
}

65
Scripts/SecureBoot.ps1 Executable file
View File

@@ -0,0 +1,65 @@
Function Get-SecureBoot {
<#
.SYNOPSIS Query Seure Boot setting for a VM in vSphere 6.5
.NOTES Author: William Lam
.NOTES Site: www.virtuallyghetto.com
.PARAMETER Vm
VM to query Secure Boot setting
.EXAMPLE
Get-VM -Name Windows10 | Get-SecureBoot
#>
param(
[Parameter(
Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)
]
[VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl]$Vm
)
$secureBootSetting = if ($vm.ExtensionData.Config.BootOptions.EfiSecureBootEnabled) { "enabled" } else { "disabled" }
Write-Host "Secure Boot is" $secureBootSetting
}
Function Set-SecureBoot {
<#
.SYNOPSIS Enable/Disable Seure Boot setting for a VM in vSphere 6.5
.NOTES Author: William Lam
.NOTES Site: www.virtuallyghetto.com
.PARAMETER Vm
VM to enable/disable Secure Boot
.EXAMPLE
Get-VM -Name Windows10 | Set-SecureBoot -Enabled
.EXAMPLE
Get-VM -Name Windows10 | Set-SecureBoot -Disabled
#>
param(
[Parameter(
Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)
]
[VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl]$Vm,
[Switch]$Enabled,
[Switch]$Disabled
)
if($Enabled) {
$secureBootSetting = $true
$reconfigMessage = "Enabling Secure Boot for $Vm"
}
if($Disabled) {
$secureBootSetting = $false
$reconfigMessage = "Disabling Secure Boot for $Vm"
}
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$bootOptions = New-Object VMware.Vim.VirtualMachineBootOptions
$bootOptions.EfiSecureBootEnabled = $secureBootSetting
$spec.BootOptions = $bootOptions
Write-Host "`n$reconfigMessage ..."
$task = $vm.ExtensionData.ReconfigVM_Task($spec)
$task1 = Get-Task -Id ("Task-$($task.value)")
$task1 | Wait-Task | Out-Null
}

View File

@@ -1,6 +1,3 @@
Connect-VIServer vc-l-01a.corp.local -User administrator@vsphere.local -Password VMware1!
Connect-OMServer vrops.corp1.local -User admin -Password VMware1!
function Enable-OMMaintenance {
<#
.NOTES
@@ -96,21 +93,21 @@ function Disable-OMMaintenance {
}
}
Write-Host "Enable a single host as being in maintenance mode for 1 minute"
Enable-OMMaintenance -Resource ESX-01a* -MaintenanceTime 1
#Write-Host "Enable a single host as being in maintenance mode for 1 minute"
#Enable-OMMaintenance -Resource ESX-01a* -MaintenanceTime 1
Write-Host "List All Host Resources and their state"
Get-OMResource ESX-* | Select Name, State | FT
#Write-Host "List All Host Resources and their state"
#Get-OMResource ESX-* | Select Name, State | FT
Write-Host "Set All VMs with a name as backup as being in maintenance mode for 20 minutes"
Get-VM backup* | Enable-OMMaintenance -MaintenanceTime 20
#Write-Host "Set All VMs with a name as backup as being in maintenance mode for 20 minutes"
#Get-VM backup* | Enable-OMMaintenance -MaintenanceTime 20
Write-Host "List All Backup VM Resources and their state"
Get-VM backup* | Get-OMResource | Select Name, State | FT
#Write-Host "List All Backup VM Resources and their state"
#Get-VM backup* | Get-OMResource | Select Name, State | FT
Write-Host "Disable maintenance mode for all VMs with a name as backup as we have completed our scheduled work"
Get-VM backup* | Disable-OMMaintenance
#Write-Host "Disable maintenance mode for all VMs with a name as backup as we have completed our scheduled work"
#Get-VM backup* | Disable-OMMaintenance
Write-Host "List All VM Resources and their state"
Get-VM backup* | Get-OMResource | Select Name, State | FT
#Write-Host "List All VM Resources and their state"
#Get-VM backup* | Get-OMResource | Select Name, State | FT

29
Scripts/vSphereLogins.ps1 Executable file
View File

@@ -0,0 +1,29 @@
Function Get-vSphereLogins {
<#
.SYNOPSIS Retrieve information for all currently logged in vSphere Sessions (excluding current session)
.NOTES Author: William Lam
.NOTES Site: www.virtuallyghetto.com
.REFERENCE Blog: http://www.virtuallyghetto.com/2016/11/an-update-on-how-to-retrieve-useful-information-from-a-vsphere-login.html
.EXAMPLE
Get-vSphereLogins
#>
if($DefaultVIServers -eq $null) {
Write-Host "Error: Please connect to your vSphere environment"
exit
}
# Using the first connection
$VCConnection = $DefaultVIServers[0]
$sessionManager = Get-View ($VCConnection.ExtensionData.Content.SessionManager)
# Store current session key
$currentSessionKey = $sessionManager.CurrentSession.Key
foreach ($session in $sessionManager.SessionList) {
# Ignore vpxd-extension logins as well as the current session
if($session.UserName -notmatch "vpxd-extension" -and $session.key -ne $currentSessionKey) {
$session | Select Username, IpAddress, UserAgent, @{"Name"="APICount";Expression={$Session.CallCount}}, LoginTime
}
}
}