SlideShare a Scribd company logo
Italy VMUG UserCon – 14 November 2017
PowerCLI, che figata!
Short Practical Guide to make you a PowerCLI User
And no, I’m afraid this session will not be in Italian
Luc Dekens
• Systems Engineer
• Eurocontrol
• vExpert
• MVP
• Co-author PowerCLI Reference Ed 1 & 2
• Twitter @LucD22
• VMTN LucD
• Blog http://lucd.info
Agenda
• PowerCLI is cool!
• Quick tips on Getting Started
• Pitfalls and Common Errors
• How to advance
• Advanced functionality
• And since we all like a good story...
Chapter 1 – Meet the Junior Wizard
• Once upon a time, in a kingdom datacenter far way…
• A young girl, fresh from Wizard School, was employed as the Junior
Virtualisation Admin.
• The head Virtualisation Wizard had a first task for her:
• Give me an overview of our clusters and ESXi nodes
• Luckily she learned at Wizard School about Google, the crystal ball.
• After the incantation “vSphere cluster esxi report”, she saw images
appearing in the crystal ball...
Community
• The PowerCLI Community is a very active community
• There are tons of snippets available
• VMTN PowerCLI Community
• PowerCLI Community Repository on Github
• VMware{code} – VMware Sample Exchange
• Blogs
• Slack PowerCLI Channels
• Vmware{code}
• vExpert
• PowerShell
What is there?
• One-liners
• Snippets
• Functions
• Modules
Get-Cluster | Get-VMHost | Select-Object -Property Name,NumCpu,MemoryTotalGB
Get-Cluster | Get-VMHost | Select Name,NumCpu,MemoryTotalGB
gci . | epcsv report.csv -not -u


Zoom in
• PowerShell works with objects
• The pipeline concept
Get-Cluster | Get-VMHost | Select-Object -Property Name,NumCpu,MemoryTotalGB
Get-Cluster Get-VMHost
Cluster
$cluster = Get-Cluster
$esx = Get-VMHost -Location $cluster
foreach($vmhost in $esx){
Select-Object -InputObject $vmhost -Property Name,NumCpu,MemoryTotalGB
}

Zoom in further I
• Objects have
• Properties
• Methods
• Get-Member
• Format-Custom
Zoom in further II
• Format-Custom
• See the “Values”
• Nested properties
• ‘more’ DOS cmd
Code Snippet
• Search turns up a PowerCLI snippet
• What do you need?
• Windows machine with PowerShell installed
• PowerShell v5.1
• .Net
• Connectivity to the vCenter/ESXi node(s)/Appliance
• Mind the Firewall
What is PowerCLI?
• PowerCLI is a collection of modules
• Run on/in PowerShell (v5.1)
• Go for PS v5.1
• PowerCLI Core is a Fling (Mac/Linux)
• PowerShell Core v6.0
• .Net Core
• Access to several VMware products
• Installation
• From the PowerShell Gallery
• Install-Module
• Computer
• User
• $PSModulePath
• Auto-load
• PowerCLI Cmdlet Reference
PowerCLI has a past I
• 10th Anniversary
• From PSSnapin  Modules
• Currently 600+ cmdlets
• Covering more than vSphere
• Code you find, might be “old-ish”
• PSSnapin
• Less cmdlets
VMware PowerCLI
Nov
2006
PowerShell
v1 Beta
1.0 1.5
VMware Infrastructure Toolkit VMware vSphere PowerCLI
Nov
2007
Jul
2008
Jan
2009
May
2009
4.0
Jul
2010
4.1
Aug
2011
5.0
Sep
2012
5.1R1
Sep
2013
5.5R1
Sep
2014
5.8R1
Mar
2015
6.0R1
Mar
2016
6.5R16.3R1
Nov
2016
1.0U1 4.0U1 5.0.1 5.1R2 5.5R24.1U1 6.0R2
6.0R3
Apr
2017
6.5.1
6.5.2
Core Core
DeployAutomation DeployAutomation
ImageBuilder ImageBuilder
License License
Cloud Cloud
Vds Vds
Storage Storage
Cis.Core
HA
PCloud
SDK
vROps
VUM
Common
HorizonView
PowerCLI
StorageUtility
SRM
8 102 120 157 165 237 293 361 400 426 498 528 587 623
VMware PowerCLI
6.5.3
626
PowerCLI has a past II
How to run PowerCLI code I
• PowerShell prompt
• Execution Policy (Set-ExecutionPolicy)
• Connect to vSphere Server (Connect-VIServer)
• PowerCLI Configuration
• Certificates
• Warnings
• Paste snippet
• Run .ps1 file
• Integrated Environment
• ISE
• Visual Studio Code
How to run PowerCLI code II
• The .ps1 file
• Run from the prompt
• Don’t forget to “connect”
• Shortcut
• Schedule it
Visual Studio Code
Chapter 2 – Learning new tricks
• That went well!
• Our Junior Wizard got access to the Advanced Spell Books
• But as it goes, the Head Wizard had some new tasks
• Time to start reading those new spell books
• ... and give Google, the crystal ball, an extra polish
Expanding the Select I
• Calculated property = Hash table
• Name
• Expression  scriptblock
• Using .Net function
• Accessing the vSphere object
• Pipeline variable
Expanding the Select II
Get-Cluster -PipelineVariable cluster |
Get-VMHost |
Select @{N='vCenter';E={([System.Uri]$_.Client.Config.ServiceUrl).Host}},
@{N='Cluster';E={$cluster.Name}},
Name,
@{N='Version';E={"$($_.Version).$($_.Build)"}},
NumCpu,
@{N='MemoryTotalGB';E={[math]::Round($_.MemoryTotalGB,1)}},
TimeZone,
@{N='Power Mgmt Policy';E={
$_.ExtensionData.Config.PowerSystemInfo.CurrentPolicy.ShortName
}}
.Net objects vs vSphere objects I
• PowerCLI cmdlets produce .Net objects
• vSphere internally uses vSphere objects
• They are linked
1. ExtensionData
2. Get-View
3. Get-VIObjectByVIView
• vSphere Web Services API Reference
• Fixes missing functionality in cmdlets
.Net objects vs vSphere objects II
ExtensionData
Name
MoRef
.Net object vSphere object
Get-VM Get-View –ViewType VirtualMachine
Get-VIObjectByVIView –MoRef $vm.MoRef
Name
Read-only
Don’t forget PowerShell I
• Many useful cmdlets
• Exploration
• Get-Help
• Get-Command
• Get-Member
• Reporting
• Sort-Object
• Group-Object
• Measure-Object
Don’t forget PowerShell II
$entities = Get-Cluster | Get-VMHost
$stat = 'cpu.usage.average','mem.usage.average'
$start = (Get-Date).AddDays(-1)
Get-Stat -Entity $entities -Stat $stat -Start $start |
Group-Object -Property {$_.Entity.Name} | %{
New-Object -TypeName PSObject -Property ([ordered]@{
VMHost = $_.Name
StartTime = $_.Group | Sort-Object -Property Timestamp -Descending |
select -First 1 -ExpandProperty Timestamp
CPU = $_.Group | where{$_.MetricId -eq 'cpu.usage.average'} |
Measure-Object -Property Value -Average |
select @{N='Average';E={[math]::Round($_.Average,1)}} |
Select -ExpandProperty Average
Mem = $_.Group | where{$_.MetricId -eq 'mem.usage.average'} |
Measure-Object -Property Value -Average |
select @{N='Average';E={[math]::Round($_.Average,1)}} |
select -ExpandProperty average
})
} | Sort-Object -Property VMHost
1 2
3
4
Chapter 3 – Getting creative
• Our Junior Wizard became a Principal Wizard
• But she still was missing something in her job!
• She wanted to become creative, and use those “create” spells
• The Head Wizard went of to a Wizard Conference in Las Vegas
• ... now she had her chance!
• But how was she going to minimise the risk?
Use the Safe Guards I
• After the Get-phase, time to tackle Set- and New- cmdlets
• PowerShell comes with a number of safe guards, use them!
• WhatIf
• Verbose
• Try-Catch
• Make sure to automate your back out as well
• Snapshot
Use the Safe Guards II
Digging deep aka The API
• PowerCLI cmdlets have a 80/20 behaviour
• 80% of the use cases covered by cmdlets
• 20% use the API
• Get comfortable with the vSphere API
• Read up
• Practice, practice, practice!
• REST is there/coming
A simple API sample I
• ESXi node – CPU Power Management
• No cmdlet  vSphere Web Services API Reference
A simple API sample II
# Options are: static,dynamic,low,custom
$desiredPowerPolicy = "static"
Get-VMHost | %{
$powSys = Get-View $_.ExtensionData.ConfigManager.PowerSystem
$key = ($powSys.Capability.AvailablePolicy |
where {$_.ShortName -eq $desiredPowerPolicy}).Key
$powSys.ConfigurePowerPolicy($key)
}
It’s not always the API
• There is also Get-EsxCli
• Example: getting LAG information from a VDS
$lagInfo = foreach($vds in Get-VDSwitch){
$vds | Get-VMHost | %{
$esxcli = Get-EsxCli -VMHost $_
$vnic = $esxcli.network.vswitch.dvs.vmware.list() |
where{$_.Name -eq $vds.Name} | Select -ExpandProperty Uplinks
$esxcli.network.vswitch.dvs.vmware.lacp.config.get() |
where{$_.DVSName -eq $vds.Name} |
Select DVSName,LAGName,LAGID,
@{N='vmnic';E={($vnic | Sort-Object) -join '|'}}
}
}
$lagInfo | Sort-Object -Property LAGName -Unique
Chapter 4 - Mastery
• Our heroin is now ready to become a Master Wizard
• A wExpert, a much coveted title for wizards
• Since she learned so much from other wizards,
• … she now wants to share that knowledge.
• That would make her wizard career full circle!
From snippet to function I
$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$vmConfigSpec.changeTrackingEnabled = $true
Get-VM | %{
$vm.ExtensionData.ReconfigVM($vmConfigSpec)
}
• Snippet to enable CBT on all VMs
From snippet to function II
function Set-CBT
{
[cmdletbinding(SupportsShouldProcess = $true,ConfirmImpact='High')]
param(
[Parameter(Mandatory=$true,ValueFromPipeline)]
[VMware.VimAutomation.ViCore.Types.V1.Inventory.VirtualMachine[]]$VM
)
Begin
{
$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$vmConfigSpec.changeTrackingEnabled = $true
}
Process
{
$VM | ForEach-Object {
if ($PSCmdlet.ShouldProcess($_.Name))
{
$_.ExtensionData.ReconfigVM($vmConfigSpec)
}
}
}
}
From snippet to function III
Get-VMHost -PipelineVariable esx |
Get-ScsiLun -LunType disk |
Get-scsilunpath | Where {$_.state -eq “Dead”} |
Select @{N='VMHost';E={$esx.Name}},Name,ScsiCanonicalName,State
• Snippet to LUN path states
From snippet to function IV
function Get-ISeeDeadPaths{
[cmdletbinding(SupportsShouldProcess = $true,ConfirmImpact='Low')]
param(
[Parameter(Mandatory=$true,ValueFromPipeline)]
[VMware.VimAutomation.ViCore.Types.V1.Inventory.VMHost[]]$VMHost
)
Process
{
foreach($esx in $VMHost){
Get-ScsiLun -LunType disk -VmHost $esx |
Get-scsilunpath | Where {$_.state -eq “Dead”} | %{
New-Object PSObject -Property @{
VMHost = $esx.Name
Name = $_.Name
ScsiCanonicalName = $_.ScsiCanonicalName
State = $_.State
}
}
}
}
}
From function to advanced function
function Set-CBT
{
<#
.SYNOPSIS
Enable Chaged Block Tracking for a VM
.DESCRIPTION
Enables Change Block Tracking for a VM.
See KB1020128
.PARAMETER VM
The VM object
.EXAMPLE
Set-CBT -VM (Get-VM -Name MyVM)
.EXAMPLE
Get-VM | Set-CBT
.INPUTS
[VMware.VimAutomation.ViCore.Types.V1.Inventory.VirtualMachine[]]
.OUTPUTS
void
.NOTES
Author: me
History:
v1.1 19/08/2017 19:50 Added Help
v1.0 07/08/2017 13:10 Added pipeline support
v0.9 02/06/2017 15:30 Initial version
#>
[cmdletbinding(SupportsShouldProcess = $true,ConfirmImpact='High')]
param(
[Parameter(Mandatory=$true,ValueFromPipeline)]
[VMware.VimAutomation.ViCore.Types.V1.Inventory.VirtualMachine[]]$VM
)
From function to module
• Create a module
• .psm1 – collect all your functions
• .psd1 – manifest  New-ModuleManifest
• Share the module
• Local – company share
• World - PowerCLI Community Repository
Epilog – A Wizard’s Life
• No need to be clueless!
• Start slow, Rome wasn’t build in one day!
• Set yourself practical goals
• Learn as you go along
• Use the Community
• Ask questions
• Don’t reinvent the wheel, just steal!
• Contribute to the Community!
• PowerCLI Community Repository
• Report “features” through an SR
• Suggest PowerCLI Ideas
Q&A

More Related Content

What's hot

Slaying Sacred Cows: Deconstructing Dependency Injection
Slaying Sacred Cows: Deconstructing Dependency InjectionSlaying Sacred Cows: Deconstructing Dependency Injection
Slaying Sacred Cows: Deconstructing Dependency Injection
Tomer Gabel
 
Node.js Workshop - Sela SDP 2015
Node.js Workshop  - Sela SDP 2015Node.js Workshop  - Sela SDP 2015
Node.js Workshop - Sela SDP 2015
Nir Noy
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not Java
Chris Adamson
 
Node Architecture and Getting Started with Express
Node Architecture and Getting Started with ExpressNode Architecture and Getting Started with Express
Node Architecture and Getting Started with Express
jguerrero999
 
Mongo DB in gaming industry
Mongo DB in gaming industryMongo DB in gaming industry
Mongo DB in gaming industryDmitry Makarchuk
 
10 minutes fun with Cloud API comparison
10 minutes fun with Cloud API comparison10 minutes fun with Cloud API comparison
10 minutes fun with Cloud API comparison
Laurent Cerveau
 
Elements for an iOS Backend
Elements for an iOS BackendElements for an iOS Backend
Elements for an iOS Backend
Laurent Cerveau
 
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディングXitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
scalaconfjp
 
Drupalcon cph
Drupalcon cphDrupalcon cph
Drupalcon cph
cyberswat
 
Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talk
Aarti Parikh
 
Scaling Hibernate with Terracotta
Scaling Hibernate with TerracottaScaling Hibernate with Terracotta
Scaling Hibernate with Terracotta
Alex Miller
 
Vert.x – The problem of real-time data binding
Vert.x – The problem of real-time data bindingVert.x – The problem of real-time data binding
Vert.x – The problem of real-time data binding
Alex Derkach
 
How to Test Asynchronous Code (v2)
How to Test Asynchronous Code (v2)How to Test Asynchronous Code (v2)
How to Test Asynchronous Code (v2)
Felix Geisendörfer
 
Apache ZooKeeper
Apache ZooKeeperApache ZooKeeper
Apache ZooKeeper
Scott Leberknight
 
Test like a_boss
Test like a_bossTest like a_boss
Test like a_boss
Giuseppe Maxia
 
Comet with node.js and V8
Comet with node.js and V8Comet with node.js and V8
Comet with node.js and V8
amix3k
 
Node.js Enterprise Middleware
Node.js Enterprise MiddlewareNode.js Enterprise Middleware
Node.js Enterprise MiddlewareBehrad Zari
 
Carlos Conde : AWS Game Days - TIAD Paris
Carlos Conde : AWS Game Days - TIAD ParisCarlos Conde : AWS Game Days - TIAD Paris
Carlos Conde : AWS Game Days - TIAD Paris
The Incredible Automation Day
 
Node.js, toy or power tool?
Node.js, toy or power tool?Node.js, toy or power tool?
Node.js, toy or power tool?Ovidiu Dimulescu
 

What's hot (20)

Slaying Sacred Cows: Deconstructing Dependency Injection
Slaying Sacred Cows: Deconstructing Dependency InjectionSlaying Sacred Cows: Deconstructing Dependency Injection
Slaying Sacred Cows: Deconstructing Dependency Injection
 
Node.js Workshop - Sela SDP 2015
Node.js Workshop  - Sela SDP 2015Node.js Workshop  - Sela SDP 2015
Node.js Workshop - Sela SDP 2015
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not Java
 
Node Architecture and Getting Started with Express
Node Architecture and Getting Started with ExpressNode Architecture and Getting Started with Express
Node Architecture and Getting Started with Express
 
Mongo DB in gaming industry
Mongo DB in gaming industryMongo DB in gaming industry
Mongo DB in gaming industry
 
10 minutes fun with Cloud API comparison
10 minutes fun with Cloud API comparison10 minutes fun with Cloud API comparison
10 minutes fun with Cloud API comparison
 
Node.js code tracing
Node.js code tracingNode.js code tracing
Node.js code tracing
 
Elements for an iOS Backend
Elements for an iOS BackendElements for an iOS Backend
Elements for an iOS Backend
 
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディングXitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
 
Drupalcon cph
Drupalcon cphDrupalcon cph
Drupalcon cph
 
Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talk
 
Scaling Hibernate with Terracotta
Scaling Hibernate with TerracottaScaling Hibernate with Terracotta
Scaling Hibernate with Terracotta
 
Vert.x – The problem of real-time data binding
Vert.x – The problem of real-time data bindingVert.x – The problem of real-time data binding
Vert.x – The problem of real-time data binding
 
How to Test Asynchronous Code (v2)
How to Test Asynchronous Code (v2)How to Test Asynchronous Code (v2)
How to Test Asynchronous Code (v2)
 
Apache ZooKeeper
Apache ZooKeeperApache ZooKeeper
Apache ZooKeeper
 
Test like a_boss
Test like a_bossTest like a_boss
Test like a_boss
 
Comet with node.js and V8
Comet with node.js and V8Comet with node.js and V8
Comet with node.js and V8
 
Node.js Enterprise Middleware
Node.js Enterprise MiddlewareNode.js Enterprise Middleware
Node.js Enterprise Middleware
 
Carlos Conde : AWS Game Days - TIAD Paris
Carlos Conde : AWS Game Days - TIAD ParisCarlos Conde : AWS Game Days - TIAD Paris
Carlos Conde : AWS Game Days - TIAD Paris
 
Node.js, toy or power tool?
Node.js, toy or power tool?Node.js, toy or power tool?
Node.js, toy or power tool?
 

Similar to Luc Dekens - Italian vmug usercon

Puppet and Apache CloudStack
Puppet and Apache CloudStackPuppet and Apache CloudStack
Puppet and Apache CloudStack
Puppet
 
VMworld 2013: PowerCLI Best Practices - A Deep Dive
VMworld 2013: PowerCLI Best Practices - A Deep DiveVMworld 2013: PowerCLI Best Practices - A Deep Dive
VMworld 2013: PowerCLI Best Practices - A Deep Dive
VMworld
 
Puppetpreso
PuppetpresoPuppetpreso
Puppetpresoke4qqq
 
Small Python Tools for Software Release Engineering
Small Python Tools for Software Release EngineeringSmall Python Tools for Software Release Engineering
Small Python Tools for Software Release Engineering
pycontw
 
CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...
CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...
CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...
smn-automate
 
Harmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and PuppetHarmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and Puppet
Achieve Internet
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
CodeFest
 
On the Edge Systems Administration with Golang
On the Edge Systems Administration with GolangOn the Edge Systems Administration with Golang
On the Edge Systems Administration with Golang
Chris McEniry
 
Replatforming Legacy Packaged Applications: Block-by-Block with Minecraft
Replatforming Legacy Packaged Applications: Block-by-Block with MinecraftReplatforming Legacy Packaged Applications: Block-by-Block with Minecraft
Replatforming Legacy Packaged Applications: Block-by-Block with Minecraft
VMware Tanzu
 
DevCloud - Setup and Demo on Apache CloudStack
DevCloud - Setup and Demo on Apache CloudStack DevCloud - Setup and Demo on Apache CloudStack
DevCloud - Setup and Demo on Apache CloudStack
buildacloud
 
Fiware cloud developers week brussels
Fiware cloud developers week brusselsFiware cloud developers week brussels
Fiware cloud developers week brussels
Fernando Lopez Aguilar
 
PowerShell User Group Hamburg - PowerCLI
PowerShell User Group Hamburg - PowerCLIPowerShell User Group Hamburg - PowerCLI
PowerShell User Group Hamburg - PowerCLI
Markus Kraus
 
OpenNebulaConf 2014 - Puppet and OpenNebula - David Lutterkort
OpenNebulaConf 2014 - Puppet and OpenNebula - David LutterkortOpenNebulaConf 2014 - Puppet and OpenNebula - David Lutterkort
OpenNebulaConf 2014 - Puppet and OpenNebula - David LutterkortOpenNebula Project
 
OpenNebula Conf 2014 | Puppet and OpenNebula - David Lutterkort
OpenNebula Conf 2014 | Puppet and OpenNebula - David LutterkortOpenNebula Conf 2014 | Puppet and OpenNebula - David Lutterkort
OpenNebula Conf 2014 | Puppet and OpenNebula - David Lutterkort
NETWAYS
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
Suresh Kumar
 
Ansible: How to Get More Sleep and Require Less Coffee
Ansible: How to Get More Sleep and Require Less CoffeeAnsible: How to Get More Sleep and Require Less Coffee
Ansible: How to Get More Sleep and Require Less Coffee
Sarah Z
 
Julien Simon "Scaling ML from 0 to millions of users"
Julien Simon "Scaling ML from 0 to millions of users"Julien Simon "Scaling ML from 0 to millions of users"
Julien Simon "Scaling ML from 0 to millions of users"
Fwdays
 
OpenSource ToolChain for the Hybrid Cloud
OpenSource ToolChain for the Hybrid CloudOpenSource ToolChain for the Hybrid Cloud
OpenSource ToolChain for the Hybrid Cloud
Isaac Christoffersen
 
Our Puppet Story (Linuxtag 2014)
Our Puppet Story (Linuxtag 2014)Our Puppet Story (Linuxtag 2014)
Our Puppet Story (Linuxtag 2014)
DECK36
 
What's New in PowerCLI 5.0
What's New in PowerCLI 5.0What's New in PowerCLI 5.0
What's New in PowerCLI 5.0
jonathanmedd
 

Similar to Luc Dekens - Italian vmug usercon (20)

Puppet and Apache CloudStack
Puppet and Apache CloudStackPuppet and Apache CloudStack
Puppet and Apache CloudStack
 
VMworld 2013: PowerCLI Best Practices - A Deep Dive
VMworld 2013: PowerCLI Best Practices - A Deep DiveVMworld 2013: PowerCLI Best Practices - A Deep Dive
VMworld 2013: PowerCLI Best Practices - A Deep Dive
 
Puppetpreso
PuppetpresoPuppetpreso
Puppetpreso
 
Small Python Tools for Software Release Engineering
Small Python Tools for Software Release EngineeringSmall Python Tools for Software Release Engineering
Small Python Tools for Software Release Engineering
 
CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...
CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...
CocoaHeads PDX 2014 01 23 : CoreData and iCloud Improvements iOS7 / OSX Maver...
 
Harmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and PuppetHarmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and Puppet
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
On the Edge Systems Administration with Golang
On the Edge Systems Administration with GolangOn the Edge Systems Administration with Golang
On the Edge Systems Administration with Golang
 
Replatforming Legacy Packaged Applications: Block-by-Block with Minecraft
Replatforming Legacy Packaged Applications: Block-by-Block with MinecraftReplatforming Legacy Packaged Applications: Block-by-Block with Minecraft
Replatforming Legacy Packaged Applications: Block-by-Block with Minecraft
 
DevCloud - Setup and Demo on Apache CloudStack
DevCloud - Setup and Demo on Apache CloudStack DevCloud - Setup and Demo on Apache CloudStack
DevCloud - Setup and Demo on Apache CloudStack
 
Fiware cloud developers week brussels
Fiware cloud developers week brusselsFiware cloud developers week brussels
Fiware cloud developers week brussels
 
PowerShell User Group Hamburg - PowerCLI
PowerShell User Group Hamburg - PowerCLIPowerShell User Group Hamburg - PowerCLI
PowerShell User Group Hamburg - PowerCLI
 
OpenNebulaConf 2014 - Puppet and OpenNebula - David Lutterkort
OpenNebulaConf 2014 - Puppet and OpenNebula - David LutterkortOpenNebulaConf 2014 - Puppet and OpenNebula - David Lutterkort
OpenNebulaConf 2014 - Puppet and OpenNebula - David Lutterkort
 
OpenNebula Conf 2014 | Puppet and OpenNebula - David Lutterkort
OpenNebula Conf 2014 | Puppet and OpenNebula - David LutterkortOpenNebula Conf 2014 | Puppet and OpenNebula - David Lutterkort
OpenNebula Conf 2014 | Puppet and OpenNebula - David Lutterkort
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Ansible: How to Get More Sleep and Require Less Coffee
Ansible: How to Get More Sleep and Require Less CoffeeAnsible: How to Get More Sleep and Require Less Coffee
Ansible: How to Get More Sleep and Require Less Coffee
 
Julien Simon "Scaling ML from 0 to millions of users"
Julien Simon "Scaling ML from 0 to millions of users"Julien Simon "Scaling ML from 0 to millions of users"
Julien Simon "Scaling ML from 0 to millions of users"
 
OpenSource ToolChain for the Hybrid Cloud
OpenSource ToolChain for the Hybrid CloudOpenSource ToolChain for the Hybrid Cloud
OpenSource ToolChain for the Hybrid Cloud
 
Our Puppet Story (Linuxtag 2014)
Our Puppet Story (Linuxtag 2014)Our Puppet Story (Linuxtag 2014)
Our Puppet Story (Linuxtag 2014)
 
What's New in PowerCLI 5.0
What's New in PowerCLI 5.0What's New in PowerCLI 5.0
What's New in PowerCLI 5.0
 

More from VMUG IT

04 vmugit aprile_2018_raff_poltronieri
04 vmugit aprile_2018_raff_poltronieri04 vmugit aprile_2018_raff_poltronieri
04 vmugit aprile_2018_raff_poltronieri
VMUG IT
 
03 vmugit aprile_2018_veeam
03 vmugit aprile_2018_veeam03 vmugit aprile_2018_veeam
03 vmugit aprile_2018_veeam
VMUG IT
 
02 vmugit aprile_2018_il_restodelcarlino
02 vmugit aprile_2018_il_restodelcarlino02 vmugit aprile_2018_il_restodelcarlino
02 vmugit aprile_2018_il_restodelcarlino
VMUG IT
 
01 vmugit aprile_2018_bologna_benvenuto
01 vmugit aprile_2018_bologna_benvenuto01 vmugit aprile_2018_bologna_benvenuto
01 vmugit aprile_2018_bologna_benvenuto
VMUG IT
 
07 vmugit aprile_2018_massimiliano_moschini
07 vmugit aprile_2018_massimiliano_moschini07 vmugit aprile_2018_massimiliano_moschini
07 vmugit aprile_2018_massimiliano_moschini
VMUG IT
 
06 vmugit aprile_2018_alessandro_tinivelli
06 vmugit aprile_2018_alessandro_tinivelli06 vmugit aprile_2018_alessandro_tinivelli
06 vmugit aprile_2018_alessandro_tinivelli
VMUG IT
 
05 vmugit aprile_2018_7_layers
05 vmugit aprile_2018_7_layers05 vmugit aprile_2018_7_layers
05 vmugit aprile_2018_7_layers
VMUG IT
 
07 - VMUGIT - Lecce 2018 - Antonio Gentile, Fortinet
07 - VMUGIT - Lecce 2018 - Antonio Gentile, Fortinet07 - VMUGIT - Lecce 2018 - Antonio Gentile, Fortinet
07 - VMUGIT - Lecce 2018 - Antonio Gentile, Fortinet
VMUG IT
 
06 - VMUGIT - Lecce 2018 - Rodolfo Rotondo, VMware
06 - VMUGIT - Lecce 2018 - Rodolfo Rotondo, VMware06 - VMUGIT - Lecce 2018 - Rodolfo Rotondo, VMware
06 - VMUGIT - Lecce 2018 - Rodolfo Rotondo, VMware
VMUG IT
 
05 - VMUGIT - Lecce 2018 - Raff Poltronieri, CloudItalia
05 - VMUGIT - Lecce 2018 - Raff Poltronieri, CloudItalia05 - VMUGIT - Lecce 2018 - Raff Poltronieri, CloudItalia
05 - VMUGIT - Lecce 2018 - Raff Poltronieri, CloudItalia
VMUG IT
 
04 - VMUGIT - Lecce 2018 - Giampiero Petrosi, Rubrik
04 - VMUGIT - Lecce 2018 - Giampiero Petrosi, Rubrik04 - VMUGIT - Lecce 2018 - Giampiero Petrosi, Rubrik
04 - VMUGIT - Lecce 2018 - Giampiero Petrosi, Rubrik
VMUG IT
 
03 - VMUGIT - Lecce 2018 - Massimiliano Mortillaro, Tech Unplugged
03 - VMUGIT - Lecce 2018 - Massimiliano Mortillaro, Tech Unplugged03 - VMUGIT - Lecce 2018 - Massimiliano Mortillaro, Tech Unplugged
03 - VMUGIT - Lecce 2018 - Massimiliano Mortillaro, Tech Unplugged
VMUG IT
 
02 - VMUGIT - Lecce 2018 - Enrico Signoretti, OpenIO
02 - VMUGIT - Lecce 2018 - Enrico Signoretti, OpenIO02 - VMUGIT - Lecce 2018 - Enrico Signoretti, OpenIO
02 - VMUGIT - Lecce 2018 - Enrico Signoretti, OpenIO
VMUG IT
 
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
VMUG IT
 
00 - VMUGIT - Lecce 2018 - Intro
00 - VMUGIT - Lecce 2018 - Intro00 - VMUGIT - Lecce 2018 - Intro
00 - VMUGIT - Lecce 2018 - Intro
VMUG IT
 
Luca dell'oca - italian vmug usercon 2017
Luca dell'oca - italian vmug usercon 2017 Luca dell'oca - italian vmug usercon 2017
Luca dell'oca - italian vmug usercon 2017
VMUG IT
 
Gianni Resti
Gianni Resti  Gianni Resti
Gianni Resti
VMUG IT
 
Frank Denneman keynote
Frank Denneman keynoteFrank Denneman keynote
Frank Denneman keynote
VMUG IT
 
Vmug 2017 Guido Frabotti
Vmug 2017 Guido FrabottiVmug 2017 Guido Frabotti
Vmug 2017 Guido Frabotti
VMUG IT
 
Claudio Panerai - Achab
Claudio Panerai - Achab Claudio Panerai - Achab
Claudio Panerai - Achab
VMUG IT
 

More from VMUG IT (20)

04 vmugit aprile_2018_raff_poltronieri
04 vmugit aprile_2018_raff_poltronieri04 vmugit aprile_2018_raff_poltronieri
04 vmugit aprile_2018_raff_poltronieri
 
03 vmugit aprile_2018_veeam
03 vmugit aprile_2018_veeam03 vmugit aprile_2018_veeam
03 vmugit aprile_2018_veeam
 
02 vmugit aprile_2018_il_restodelcarlino
02 vmugit aprile_2018_il_restodelcarlino02 vmugit aprile_2018_il_restodelcarlino
02 vmugit aprile_2018_il_restodelcarlino
 
01 vmugit aprile_2018_bologna_benvenuto
01 vmugit aprile_2018_bologna_benvenuto01 vmugit aprile_2018_bologna_benvenuto
01 vmugit aprile_2018_bologna_benvenuto
 
07 vmugit aprile_2018_massimiliano_moschini
07 vmugit aprile_2018_massimiliano_moschini07 vmugit aprile_2018_massimiliano_moschini
07 vmugit aprile_2018_massimiliano_moschini
 
06 vmugit aprile_2018_alessandro_tinivelli
06 vmugit aprile_2018_alessandro_tinivelli06 vmugit aprile_2018_alessandro_tinivelli
06 vmugit aprile_2018_alessandro_tinivelli
 
05 vmugit aprile_2018_7_layers
05 vmugit aprile_2018_7_layers05 vmugit aprile_2018_7_layers
05 vmugit aprile_2018_7_layers
 
07 - VMUGIT - Lecce 2018 - Antonio Gentile, Fortinet
07 - VMUGIT - Lecce 2018 - Antonio Gentile, Fortinet07 - VMUGIT - Lecce 2018 - Antonio Gentile, Fortinet
07 - VMUGIT - Lecce 2018 - Antonio Gentile, Fortinet
 
06 - VMUGIT - Lecce 2018 - Rodolfo Rotondo, VMware
06 - VMUGIT - Lecce 2018 - Rodolfo Rotondo, VMware06 - VMUGIT - Lecce 2018 - Rodolfo Rotondo, VMware
06 - VMUGIT - Lecce 2018 - Rodolfo Rotondo, VMware
 
05 - VMUGIT - Lecce 2018 - Raff Poltronieri, CloudItalia
05 - VMUGIT - Lecce 2018 - Raff Poltronieri, CloudItalia05 - VMUGIT - Lecce 2018 - Raff Poltronieri, CloudItalia
05 - VMUGIT - Lecce 2018 - Raff Poltronieri, CloudItalia
 
04 - VMUGIT - Lecce 2018 - Giampiero Petrosi, Rubrik
04 - VMUGIT - Lecce 2018 - Giampiero Petrosi, Rubrik04 - VMUGIT - Lecce 2018 - Giampiero Petrosi, Rubrik
04 - VMUGIT - Lecce 2018 - Giampiero Petrosi, Rubrik
 
03 - VMUGIT - Lecce 2018 - Massimiliano Mortillaro, Tech Unplugged
03 - VMUGIT - Lecce 2018 - Massimiliano Mortillaro, Tech Unplugged03 - VMUGIT - Lecce 2018 - Massimiliano Mortillaro, Tech Unplugged
03 - VMUGIT - Lecce 2018 - Massimiliano Mortillaro, Tech Unplugged
 
02 - VMUGIT - Lecce 2018 - Enrico Signoretti, OpenIO
02 - VMUGIT - Lecce 2018 - Enrico Signoretti, OpenIO02 - VMUGIT - Lecce 2018 - Enrico Signoretti, OpenIO
02 - VMUGIT - Lecce 2018 - Enrico Signoretti, OpenIO
 
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
 
00 - VMUGIT - Lecce 2018 - Intro
00 - VMUGIT - Lecce 2018 - Intro00 - VMUGIT - Lecce 2018 - Intro
00 - VMUGIT - Lecce 2018 - Intro
 
Luca dell'oca - italian vmug usercon 2017
Luca dell'oca - italian vmug usercon 2017 Luca dell'oca - italian vmug usercon 2017
Luca dell'oca - italian vmug usercon 2017
 
Gianni Resti
Gianni Resti  Gianni Resti
Gianni Resti
 
Frank Denneman keynote
Frank Denneman keynoteFrank Denneman keynote
Frank Denneman keynote
 
Vmug 2017 Guido Frabotti
Vmug 2017 Guido FrabottiVmug 2017 Guido Frabotti
Vmug 2017 Guido Frabotti
 
Claudio Panerai - Achab
Claudio Panerai - Achab Claudio Panerai - Achab
Claudio Panerai - Achab
 

Recently uploaded

AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Fwdays
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 

Recently uploaded (20)

AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 

Luc Dekens - Italian vmug usercon

  • 1. Italy VMUG UserCon – 14 November 2017
  • 2.
  • 3. PowerCLI, che figata! Short Practical Guide to make you a PowerCLI User And no, I’m afraid this session will not be in Italian
  • 4. Luc Dekens • Systems Engineer • Eurocontrol • vExpert • MVP • Co-author PowerCLI Reference Ed 1 & 2 • Twitter @LucD22 • VMTN LucD • Blog http://lucd.info
  • 5. Agenda • PowerCLI is cool! • Quick tips on Getting Started • Pitfalls and Common Errors • How to advance • Advanced functionality • And since we all like a good story...
  • 6. Chapter 1 – Meet the Junior Wizard • Once upon a time, in a kingdom datacenter far way… • A young girl, fresh from Wizard School, was employed as the Junior Virtualisation Admin. • The head Virtualisation Wizard had a first task for her: • Give me an overview of our clusters and ESXi nodes • Luckily she learned at Wizard School about Google, the crystal ball. • After the incantation “vSphere cluster esxi report”, she saw images appearing in the crystal ball...
  • 7. Community • The PowerCLI Community is a very active community • There are tons of snippets available • VMTN PowerCLI Community • PowerCLI Community Repository on Github • VMware{code} – VMware Sample Exchange • Blogs • Slack PowerCLI Channels • Vmware{code} • vExpert • PowerShell
  • 8. What is there? • One-liners • Snippets • Functions • Modules Get-Cluster | Get-VMHost | Select-Object -Property Name,NumCpu,MemoryTotalGB Get-Cluster | Get-VMHost | Select Name,NumCpu,MemoryTotalGB gci . | epcsv report.csv -not -u  
  • 9. Zoom in • PowerShell works with objects • The pipeline concept Get-Cluster | Get-VMHost | Select-Object -Property Name,NumCpu,MemoryTotalGB Get-Cluster Get-VMHost Cluster $cluster = Get-Cluster $esx = Get-VMHost -Location $cluster foreach($vmhost in $esx){ Select-Object -InputObject $vmhost -Property Name,NumCpu,MemoryTotalGB } 
  • 10. Zoom in further I • Objects have • Properties • Methods • Get-Member • Format-Custom
  • 11. Zoom in further II • Format-Custom • See the “Values” • Nested properties • ‘more’ DOS cmd
  • 12. Code Snippet • Search turns up a PowerCLI snippet • What do you need? • Windows machine with PowerShell installed • PowerShell v5.1 • .Net • Connectivity to the vCenter/ESXi node(s)/Appliance • Mind the Firewall
  • 13. What is PowerCLI? • PowerCLI is a collection of modules • Run on/in PowerShell (v5.1) • Go for PS v5.1 • PowerCLI Core is a Fling (Mac/Linux) • PowerShell Core v6.0 • .Net Core • Access to several VMware products • Installation • From the PowerShell Gallery • Install-Module • Computer • User • $PSModulePath • Auto-load • PowerCLI Cmdlet Reference
  • 14. PowerCLI has a past I • 10th Anniversary • From PSSnapin  Modules • Currently 600+ cmdlets • Covering more than vSphere • Code you find, might be “old-ish” • PSSnapin • Less cmdlets
  • 15. VMware PowerCLI Nov 2006 PowerShell v1 Beta 1.0 1.5 VMware Infrastructure Toolkit VMware vSphere PowerCLI Nov 2007 Jul 2008 Jan 2009 May 2009 4.0 Jul 2010 4.1 Aug 2011 5.0 Sep 2012 5.1R1 Sep 2013 5.5R1 Sep 2014 5.8R1 Mar 2015 6.0R1 Mar 2016 6.5R16.3R1 Nov 2016 1.0U1 4.0U1 5.0.1 5.1R2 5.5R24.1U1 6.0R2 6.0R3 Apr 2017 6.5.1 6.5.2 Core Core DeployAutomation DeployAutomation ImageBuilder ImageBuilder License License Cloud Cloud Vds Vds Storage Storage Cis.Core HA PCloud SDK vROps VUM Common HorizonView PowerCLI StorageUtility SRM 8 102 120 157 165 237 293 361 400 426 498 528 587 623 VMware PowerCLI 6.5.3 626 PowerCLI has a past II
  • 16. How to run PowerCLI code I • PowerShell prompt • Execution Policy (Set-ExecutionPolicy) • Connect to vSphere Server (Connect-VIServer) • PowerCLI Configuration • Certificates • Warnings • Paste snippet • Run .ps1 file • Integrated Environment • ISE • Visual Studio Code
  • 17. How to run PowerCLI code II • The .ps1 file • Run from the prompt • Don’t forget to “connect” • Shortcut • Schedule it
  • 19. Chapter 2 – Learning new tricks • That went well! • Our Junior Wizard got access to the Advanced Spell Books • But as it goes, the Head Wizard had some new tasks • Time to start reading those new spell books • ... and give Google, the crystal ball, an extra polish
  • 20. Expanding the Select I • Calculated property = Hash table • Name • Expression  scriptblock • Using .Net function • Accessing the vSphere object • Pipeline variable
  • 21. Expanding the Select II Get-Cluster -PipelineVariable cluster | Get-VMHost | Select @{N='vCenter';E={([System.Uri]$_.Client.Config.ServiceUrl).Host}}, @{N='Cluster';E={$cluster.Name}}, Name, @{N='Version';E={"$($_.Version).$($_.Build)"}}, NumCpu, @{N='MemoryTotalGB';E={[math]::Round($_.MemoryTotalGB,1)}}, TimeZone, @{N='Power Mgmt Policy';E={ $_.ExtensionData.Config.PowerSystemInfo.CurrentPolicy.ShortName }}
  • 22. .Net objects vs vSphere objects I • PowerCLI cmdlets produce .Net objects • vSphere internally uses vSphere objects • They are linked 1. ExtensionData 2. Get-View 3. Get-VIObjectByVIView • vSphere Web Services API Reference • Fixes missing functionality in cmdlets
  • 23. .Net objects vs vSphere objects II ExtensionData Name MoRef .Net object vSphere object Get-VM Get-View –ViewType VirtualMachine Get-VIObjectByVIView –MoRef $vm.MoRef Name Read-only
  • 24. Don’t forget PowerShell I • Many useful cmdlets • Exploration • Get-Help • Get-Command • Get-Member • Reporting • Sort-Object • Group-Object • Measure-Object
  • 25. Don’t forget PowerShell II $entities = Get-Cluster | Get-VMHost $stat = 'cpu.usage.average','mem.usage.average' $start = (Get-Date).AddDays(-1) Get-Stat -Entity $entities -Stat $stat -Start $start | Group-Object -Property {$_.Entity.Name} | %{ New-Object -TypeName PSObject -Property ([ordered]@{ VMHost = $_.Name StartTime = $_.Group | Sort-Object -Property Timestamp -Descending | select -First 1 -ExpandProperty Timestamp CPU = $_.Group | where{$_.MetricId -eq 'cpu.usage.average'} | Measure-Object -Property Value -Average | select @{N='Average';E={[math]::Round($_.Average,1)}} | Select -ExpandProperty Average Mem = $_.Group | where{$_.MetricId -eq 'mem.usage.average'} | Measure-Object -Property Value -Average | select @{N='Average';E={[math]::Round($_.Average,1)}} | select -ExpandProperty average }) } | Sort-Object -Property VMHost 1 2 3 4
  • 26. Chapter 3 – Getting creative • Our Junior Wizard became a Principal Wizard • But she still was missing something in her job! • She wanted to become creative, and use those “create” spells • The Head Wizard went of to a Wizard Conference in Las Vegas • ... now she had her chance! • But how was she going to minimise the risk?
  • 27. Use the Safe Guards I • After the Get-phase, time to tackle Set- and New- cmdlets • PowerShell comes with a number of safe guards, use them! • WhatIf • Verbose • Try-Catch • Make sure to automate your back out as well • Snapshot
  • 28. Use the Safe Guards II
  • 29. Digging deep aka The API • PowerCLI cmdlets have a 80/20 behaviour • 80% of the use cases covered by cmdlets • 20% use the API • Get comfortable with the vSphere API • Read up • Practice, practice, practice! • REST is there/coming
  • 30. A simple API sample I • ESXi node – CPU Power Management • No cmdlet  vSphere Web Services API Reference
  • 31. A simple API sample II # Options are: static,dynamic,low,custom $desiredPowerPolicy = "static" Get-VMHost | %{ $powSys = Get-View $_.ExtensionData.ConfigManager.PowerSystem $key = ($powSys.Capability.AvailablePolicy | where {$_.ShortName -eq $desiredPowerPolicy}).Key $powSys.ConfigurePowerPolicy($key) }
  • 32. It’s not always the API • There is also Get-EsxCli • Example: getting LAG information from a VDS $lagInfo = foreach($vds in Get-VDSwitch){ $vds | Get-VMHost | %{ $esxcli = Get-EsxCli -VMHost $_ $vnic = $esxcli.network.vswitch.dvs.vmware.list() | where{$_.Name -eq $vds.Name} | Select -ExpandProperty Uplinks $esxcli.network.vswitch.dvs.vmware.lacp.config.get() | where{$_.DVSName -eq $vds.Name} | Select DVSName,LAGName,LAGID, @{N='vmnic';E={($vnic | Sort-Object) -join '|'}} } } $lagInfo | Sort-Object -Property LAGName -Unique
  • 33. Chapter 4 - Mastery • Our heroin is now ready to become a Master Wizard • A wExpert, a much coveted title for wizards • Since she learned so much from other wizards, • … she now wants to share that knowledge. • That would make her wizard career full circle!
  • 34. From snippet to function I $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec $vmConfigSpec.changeTrackingEnabled = $true Get-VM | %{ $vm.ExtensionData.ReconfigVM($vmConfigSpec) } • Snippet to enable CBT on all VMs
  • 35. From snippet to function II function Set-CBT { [cmdletbinding(SupportsShouldProcess = $true,ConfirmImpact='High')] param( [Parameter(Mandatory=$true,ValueFromPipeline)] [VMware.VimAutomation.ViCore.Types.V1.Inventory.VirtualMachine[]]$VM ) Begin { $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec $vmConfigSpec.changeTrackingEnabled = $true } Process { $VM | ForEach-Object { if ($PSCmdlet.ShouldProcess($_.Name)) { $_.ExtensionData.ReconfigVM($vmConfigSpec) } } } }
  • 36. From snippet to function III Get-VMHost -PipelineVariable esx | Get-ScsiLun -LunType disk | Get-scsilunpath | Where {$_.state -eq “Dead”} | Select @{N='VMHost';E={$esx.Name}},Name,ScsiCanonicalName,State • Snippet to LUN path states
  • 37. From snippet to function IV function Get-ISeeDeadPaths{ [cmdletbinding(SupportsShouldProcess = $true,ConfirmImpact='Low')] param( [Parameter(Mandatory=$true,ValueFromPipeline)] [VMware.VimAutomation.ViCore.Types.V1.Inventory.VMHost[]]$VMHost ) Process { foreach($esx in $VMHost){ Get-ScsiLun -LunType disk -VmHost $esx | Get-scsilunpath | Where {$_.state -eq “Dead”} | %{ New-Object PSObject -Property @{ VMHost = $esx.Name Name = $_.Name ScsiCanonicalName = $_.ScsiCanonicalName State = $_.State } } } } }
  • 38. From function to advanced function function Set-CBT { <# .SYNOPSIS Enable Chaged Block Tracking for a VM .DESCRIPTION Enables Change Block Tracking for a VM. See KB1020128 .PARAMETER VM The VM object .EXAMPLE Set-CBT -VM (Get-VM -Name MyVM) .EXAMPLE Get-VM | Set-CBT .INPUTS [VMware.VimAutomation.ViCore.Types.V1.Inventory.VirtualMachine[]] .OUTPUTS void .NOTES Author: me History: v1.1 19/08/2017 19:50 Added Help v1.0 07/08/2017 13:10 Added pipeline support v0.9 02/06/2017 15:30 Initial version #> [cmdletbinding(SupportsShouldProcess = $true,ConfirmImpact='High')] param( [Parameter(Mandatory=$true,ValueFromPipeline)] [VMware.VimAutomation.ViCore.Types.V1.Inventory.VirtualMachine[]]$VM )
  • 39. From function to module • Create a module • .psm1 – collect all your functions • .psd1 – manifest  New-ModuleManifest • Share the module • Local – company share • World - PowerCLI Community Repository
  • 40. Epilog – A Wizard’s Life • No need to be clueless! • Start slow, Rome wasn’t build in one day! • Set yourself practical goals • Learn as you go along • Use the Community • Ask questions • Don’t reinvent the wheel, just steal! • Contribute to the Community! • PowerCLI Community Repository • Report “features” through an SR • Suggest PowerCLI Ideas
  • 41. Q&A