Monday, September 10, 2018

PowerCLI Reference commands

PowerCLI

This is a list of PowerCLI bits I have picked up along the way.  90% of these were found via Google, I apologize for not having credits for each. Most are simple one-liners that perform particular tasks.  It is typically easy to insert these bits into a larger scripts that loop through hosts, target specific VMs or just link them together to run multiple commands at once.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
# Add PowerCLI Core snapin
If (!(Get-PSSnapin -name VMware.VimAutomation.Core -ErrorAction SilentlyContinue)) {
    Add-PSSnapin VMware.VimAutomation.Core}
 
# Add PowerCLI vCD snapin
If (!(Get-PSSnapin -name VMware.VimAutomation.Cloud -ErrorAction SilentlyContinue)) {
    Add-PSSnapin VMware.VimAutomation.Cloud}
 
# Add PowerCLI VDS snapin
If (!(Get-PSSnapin -name VMware.VimAutomation.VDS -ErrorAction SilentlyContinue)) {
    Add-PSSnapin VMware.VimAutomation.VDS}
 
# Connect to vCenter
Connect-VIServer vcenternameorip
# Disconnect from vCenter
Disconnect-VIServer vcenternameorip -Confirm:$False
 
# Connect to vCD
Connect-CIServer my.vcd.url
# Disconnect from vCD
Disconnect-CIServer my.vcd.url -Confirm:$False
 
# Connected VI Servers
$DefaultVIServers
# Number of Connected VI Servers
$DefaultVIServers.Count
 
# PowerCli Version
Get-PowerCLIVersion
 
# PowerCLI Configuration
Get-PowerCLIConfiguration
 
# VMHosts
# Change ESXi root password (or any other local user)
$VMHosts = Get-VMHost
ForEach ($VMHost in $VMHosts)
{
    $HostName = $VMHost.Name
    Connect-VIServer $HostName -User root -password P@ssw0rd
    Set-VMHostAccount -UserAccount root -password N3wPassword
    Disconnect-VIServer -Server $HostName -Confirm:$False
}
 
#Check Lockdown mode status
Get-VMHost | Select Name, @{Name="LockdownModeEnabled";Expression={($_).Extensiondata.Config.adminDisabled}} | ft -auto
 
#Disable Lockdown mode
Get-VMHost | %{($_ | get-view).ExitLockdownMode()}
 
#Enable Lockdown mode
Get-VMHost | %{($_ | get-view).EnterLockdownMode()}
 
# Start ESXi SSH Service
Get-VMHost | Foreach {Start-VMHostService -HostService ($_ | Get-VMHostService | Where { $_.Key -eq "TSM-SSH"} )}
 
# Stop ESXi SSH Service
Get-VMHost | Foreach {Stop-VMHostService -HostService ($_ | Get-VMHostService | Where { $_.Key -eq "TSM-SSH"} ) -Confirm:$false}
 
# View SSH Service state
Get-VMHost | Get-VMHostService | Where { $_.Key -eq "TSM-SSH" } | Select VMHost, Label, Policy, Running | ft -auto
 
#Enable SSH Server firewall exception
Get-VMHost | Get-VMHostFirewallException | Where {$_.Name -eq "SSH Server"} | Set-VMHostFirewallException -Enabled:$true
 
# Sets remote syslog server
Get-VMHost | Set-VMHostSysLogServer -SysLogServer "udp://yoursysogserver:514"
 
# Set Hostd logging level to info (default is verbose)
Get-VMHost | Get-AdvancedSetting -Name Config.HostAgent.log.level | Set-AdvancedSetting -Value "info" -Confirm:$false
 
# Set Vpxa logging level to info (default is verbose)(must be connected to VC)
Get-VMHost | Get-AdvancedSetting -Name Vpx.Vpxa.config.log.level | Set-AdvancedSetting -Value "info" -Confirm:$false
 
# Reset syslog service
$esxcli = Get-EsxCli -VMHost servername
$esxcli.system.syslog.reload()
 
# Sets ESXi syslog server firewall exception
Get-VMHost | Get-VMHostFirewallException |?{$_.Name -eq 'syslog'} | Set-VMHostFirewallException -Enabled:$true
 
# Backup ESXi Host Config
Get-VMHost MyESXiHost | Get-VMHostFirmware -BackupConfiguration -DestinationPath “F:\”
 
# Restore ESXi Host Config
Get-VMHost MyESXiHost | Set-VMHost -State Maintenance | Set-VMHostFirmware -Restore -SourcePath “F:\”
 
# Reset ESXi Host to defaults
Get-VMHost MyESXiHost | Set-VMHostFirmware -ResetToDefaults
 
# Gather Log Bundle from Host
Get-VMHost MyESXiHost | Get-Log -Bundle -DestinationPath “F:\”
 
# Gather Individual Logs
Get-VMHost MyESXiHost | Get-Log hostd | Select -ExpandProperty Entries | Out-File “F:\hostd.log”
Get-VMHost MyESXiHost | Get-Log vpxa | Select -ExpandProperty Entries | Out-File “F:\vpxa.log”
 
# Get the time on all ESXi hosts
Get-VMHost | Select Name,@{Name="Time";Expression={(get-view $_.ExtensionData.configManager.DateTimeSystem).QueryDateTime()}}
 
# Set the time on all ESXi hosts to the PowerCLI host's time
Get-VMHost | %{(Get-View $_.ExtensionData.configManager.DateTimeSystem).UpdateDateTime((Get-Date -format u)) }
 
# Rescan HBA Adapters
Foreach ($esx in Get-VMhost -Location ClusterName | sort Name) { $esx | Get-VMHostStorage -RescanAllHBA -rescanVMFS -refresh }
 
# Retrieve ntp servers
Get-VMHost | Select Name, @{N="NTPServer";E={$_ | Get-VMHostNtpServer}}, @{N="ServiceRunning";E={(Get-VmHostService -VMHost $_ | Where-Object {$_.key -eq "ntpd"}).Running}}
 
# Replace ntp servers on hosts
$oldntpservers = "192.168.0.1","192.168.0.2"
$newntpservers = "192.168.0.20","192.168.0.21"
Foreach($vmhost in Get-VMHost){
    #stop ntpd service
    $vmhost|Get-VMHostService |?{$_.key -eq "ntpd"}|Stop-VMHostService -Confirm:$false
    #remove ntpservers
    $vmhost|Remove-VMHostNtpServer -NtpServer $oldntpservers -Confirm:$false
    #add new ntpservers
    $vmhost|Add-VmHostNtpServer -NtpServer $newntpservers
    #start ntpd service
    $vmhost|Get-VMHostService |?{$_.key -eq "ntpd"}|Start-VMHostService
}
 
# Configure ntp service to start and stop with host
Get-VMHost | Get-VMHostService | ?{$_.key -eq "ntpd"} | Set-VMHostService -Policy "on" -confirm:$false
 
# Change DNS servers, domain name and search suffix
Get-VMHost | Get-VMHostNetwork | Set-VMHostNetwork -DnsAddress [DNS1 IP address],[DNS2 IP address] -Domain [Domain name] -SearchDomain [Search domain name]
 
# Enter Maintenance Mode
Get-VMHost | Set-VMHost -State Maintenance
 
#Add hosts to domain
Get-VMHost | Get-VMHostAuthentication | Set-VMHostAuthentication -Domain domain -User domainuser -Password password -JoinDomain -Confirm:$false
 
#Remove hosts from domain
Get-VMHost | Get-VMHostAuthentication | Set-VMHostAuthentication -LeaveDomain -Confirm:$false
 
#Check host domain status
Get-VMHost | Get-VMHostAuthentication | Select VMHost, DomainMembershipStatus, Domain | ft -auto
 
# Disconnect and Remove from VC
Get-VMHost | Set-VMHost-State Disconnected -Confirm:$false | Remove-VMHost -Confirm:$false
 
# Add into VC
Add-VMHost -Name $VMHost -Location $Location -Credential $cred -Force -Confirm:$false
 
# Join a cluster by moving an ESX host from one location to the cluster.
Move-Inventory -Item (Get-VMHost -Name esxHost) -Destination (Get-Cluster -Name clusterName)
 
 
 
# VM Stuff
# Get VM Information, Cluster, Host, Datastore
Get-VM | Select Name, @{N=”Cluster”;E={Get-Cluster -VM $_}},@{N=”ESX Host”;E={Get-VMHost -VM $_}},@{N=”Datastore”;E={Get-Datastore -VM $_}}
 
# Grab powered on Windows VMs in a particular folder
Get-Folder "projects" | Get-VM | Where-Object {$_.Guest.OSFullName -like "*Windows*" -and $_.PowerState -eq "PoweredOn"} | Sort Name
 
# Get VMs with CPU Reservations:
Get-VM | Get-VMResourceConfiguration | Where {$_.CpuReservationMhz -ne 0} | Select VM,CpuReservationMhz
 
# Get VMs with Memory Reservations:
Get-VM | Get-VMResourceConfiguration | Where {$_.MemReservationMB -ne 0} | Select VM,MemReservationMB
 
# Reset Memory resource limit to Unlimited
Get-VM | Get-VMResourceConfiguration | Where-Object {$_.MemLimitMB -ne "-1"} | Set-VMResourceConfiguration -MemLimitMB $null
 
# Reset CPU resource limit to Unlimited
Get-VM | Get-VMResourceConfiguration | Where-Object {$_.CpuLimitMhz -ne "-1"} | Set-VMResourceConfiguration -CPULimitMhz $null
 
# Reset both Memory and CPU resource limits to Unlimited (slow)
Get-VM | Get-VMResourceConfiguration | Set-VMResourceConfiguration -MemLimitMB $null -CpuLimitMhz $null
 
# Get Running VMs without VMware Tools Installed:
Get-View -ViewType “VirtualMachine” -Property Guest,name  -filter @{“Guest.ToolsStatus”=”toolsNotInstalled”;”Guest.GuestState”=”running”} | Select Name
 
# VMs Created Recently:
Get-VIEvent -maxsamples 10000 | Where {$_.Gettype().Name -eq “VmCreatedEvent”} | Select createdTime, UserName, FullFormattedMessage
 
# VMs Removed Recently:
Get-VIEvent -maxsamples 10000 | Where {$_.Gettype().Name -eq “VmRemovedEvent”} | Select createdTime, UserName, FullFormattedMessage
 
# List the last 10 VMs created, cloned or imported
Get-VIEvent -maxsamples 10000 |where {$_.Gettype().Name-eq "VmCreatedEvent" -or $_.Gettype().Name-eq "VmBeingClonedEvent" -or $_.Gettype().Name-eq "VmBeingDeployedEvent"} |Sort CreatedTime -Descending |Select CreatedTime, UserName,FullformattedMessage -First 10
 
# List last 5 VMs removed
Get-VIEvent -maxsamples 10000 | where {$_.Gettype().Name -eq "VmRemovedEvent"} | Sort CreatedTime -Descending | Select CreatedTime, UserName, FullformattedMessage -First 19
 
# List of the VM’s created over the last 14 days
Get-VIEvent -maxsamples 10000 -Start (Get-Date).AddDays(-14) | where {$_.Gettype().Name-eq "VmCreatedEvent" -or $_.Gettype().Name-eq "VmBeingClonedEvent" -or $_.Gettype().Name-eq "VmBeingDeployedEvent"} |Sort CreatedTime -Descending |Select CreatedTime, UserName,FullformattedMessage
 
# List of the VMs removed over the last 14 days
Get-VIEvent -maxsamples 10000 -Start (Get-Date).AddDays(-14) |where {$_.Gettype().Name-eq "VmRemovedEvent"} |Sort CreatedTime -Descending |Select CreatedTime, UserName,FullformattedMessage
 
# VMs with more than 2 vCPUs:
Get-VM | Where {$_.NumCPU -gt 2} | Select Name, NumCPU
 
# Check for invalid of inaccessible VMs:
Get-View -ViewType VirtualMachine | Where {-not $_.Config.Template} | Where{$_.Runtime.ConnectionState -eq “invalid” -or $_.Runtime.ConnectionState -eq “inaccessible”} | Select Name
 
# vMotion VM
Move-VM vm_name -Destination (Get-VMHost esxi_hostname)
 
# Storage vMotion VM
Get-VM vm_name | Move-VM -Datastore (Get-Datastore datastore_name)
 
# Create multiple new VMs from a template
$destCluster = Get-Cluster -Name Cluster01
$destDatastore = Get-DatastoreCluster -Name Cluster_Datastore
$destFolder = foldername
$sourceTemplate = Get-Template -Name W2K12_STD
1..6 | Foreach {New-VM -Name test0$_ -ResourcePool $destCluster -Location $destFolder -Template $sourceTemplate -Datastore $destDatastore -RunAsync}
 
 
 
# Storage
# Bulk storage moves
Get-VM -Datastore <SourceDatastore1> | Move-VM -Datastore <TargetDatastore> -runasync
 
# Delete all Snapshots with Certain Name:
Get-VM | Get-Snapshot | Where { $_.Name.Contains(“Consolidate”) } | Remove-Snapshot
 
# List all Snapshots:
Get-VM | Get-Snapshot | Select VM,Name,Description,Created
 
# List all RDM disks
Get-VM | Get-HardDisk -DiskType "RawPhysical","RawVirtual" | Select Parent,Name,DiskType,ScsiCanonicalName,DeviceName
 
# Search datastores for less than x free space
Get-Datastore | Where-Object {$_.freespaceMB -lt 100000}
Get-Datastore | Where-Object {$_.freespaceGB -lt 500 -and $_.Name -notlike "*localstorage*"}
 
# # of VMs per Datastore
Get-Datastore | Select Name, @{N="NumVM";E={@($_ | Get-VM).Count}} | Sort Name
 
# Mount datastore to psdrive
New-PSDrive -name "mounteddatastore" -Root \ -PSProvider VimDatastore -Datastore (Get-Datastore $datastore)
 
# Copy files to mounted datastore
Copy-Datastoreitem $patchLocation + $patch -Destination mounteddatastore:
 
# Delete file on mounted datastore
del mounteddatastore:$patch
 
# Unmount datastore from psdrive
Remove-PSDrive -name "mounteddatastore" -PSProvider VimDatastore
 
# Reload inaccessable VMs after a NFS/iSCSI outage
Get-View -ViewType VirtualMachine | ?{$_.Runtime.ConnectionState -eq "invalid" -or $_.Runtime.ConnectionState -eq "inaccessible"} | %{$_.reload()}
 
# Get Host HBA WWNs
Function Get-VMHostHbaWWN {
    param( $VMHost )
    $EsxHostHba = get-vmhosthba -VMHost $VMHost
    foreach( $hba in $EsxHostHba ){
        $WWN = "{0:x}" -f $hba.PortWorldWideName
        $outObj = New-Object PSObject
        $outObj | Add-Member -MemberType NoteProperty -Name Name -Value $VMHost
        $outObj | Add-Member -MemberType NoteProperty -Name WWNDec -Value $hba.PortWorldWideName
        $outObj | Add-Member -MemberType NoteProperty -Name WWNHex -Value $WWN
        $outObj | Add-Member -MemberType NoteProperty -Name Device -Value $hba.Device
        $outObj | Add-Member -MemberType NoteProperty -Name Type -Value $hba.Type
        $outObj | Add-Member -MemberType NoteProperty -Name Model -Value $hba.Model
        $outObj | Add-Member -MemberType NoteProperty -Name Status -Value $hba.Status
        $outObj
    }
}
 
 
 
# Networking
# Add Port Group “VLAN 500” with VLAN tag 500 to vSwitch1 on all hosts in a Cluster
Foreach ($esx in Get-VMHost -Location ClusterName) { $esx | Get-VirtualSwitch -Name vSwitch1 | New-VirtualPortGroup -Name "VLAN500" -VlanId 500 }
 
# Backup each vNetwork Distributed Switch not including the port groups
export-vdswitch $switch -Withoutportgroups -Description “Backup of $switch without port groups” -Destination “c:\vSphere\$switch.without_portgroups.$date.zip“
 
# Backup each vNetwork Distributed Switch including the port groups
export-vdswitch $switch -Description “Backup of $switch with port groups” -Destination “c:\vSphere\$switch.with_portgroups.$date.zip“
 
# Backup each port group individually
get-vdswitch $switch | Get-VDPortgroup | foreach { export-vdportgroup -vdportgroup $_ -Description “Backup of port group $($_.name)” -destination “c:\vSphere\$($_.name).portgroup.$date.zip“}
 
# Swing VMs from one port group to another
get-vm | get-networkadapter | where-object { $_.networkname -like "OldPortGroup" } | set-networkadapter -networkname "NewPortGroup" -Confirm:$false
 
 
 
# vCenter
# Gather vCenter Logons
Get-VIEvent -MaxSamples 100000 | ?{($_ -is [VMware.Vim.UserLoginSessionEvent]) -or ($_ -is [VMware.Vim.UserLogoutSessionEvent])} | %{
if ($_ -is [VMware.Vim.UserLoginSessionEvent]) {
  $strLoginOrLogout = "logged in"; $strSourceIP = $_.IpAddress
}
  else {
  $strLoginOrLogout = "logged out"; $strSourceIP = $null
  }
New-Object -TypeName PSObject -Property @{
UserName = $_.UserName
SourceIP = $strSourceIP
Time = $_.CreatedTime
Action = $strLoginOrLogout
}
} | Select UserName,SourceIP,Time,Action

No comments:

Post a Comment

Vmware NSX SSL creation 

Using OpenSSL for NSX Manager SSL import: Creates CSR and 4096 bit KEY Creating NSX 6.4.2 SSL    openssl req -out nsxcert.csr -newkey rsa:40...