Merge remote-tracking branch 'refs/remotes/vmware/master'
This commit is contained in:
202
Modules/Backup-VCSA.psm1
Normal file
202
Modules/Backup-VCSA.psm1
Normal 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
70
Scripts/AutomaticVMFSUnmap.ps1
Executable 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
30
Scripts/ESXInstallDate.ps1
Executable 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
41
Scripts/ESXInstalledVIBs.ps1
Executable 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
65
Scripts/SecureBoot.ps1
Executable 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
|
||||
}
|
||||
@@ -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
29
Scripts/vSphereLogins.ps1
Executable 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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user