Menu

Virtual Geek

Tales from real IT system administrators world and non-production environment

Create and configure VMWare vSphere VSAN cluster step by step

January 16, 2018 03:09PM

VMware vSAN is a Hyper-Converged storage (Software Defined Storage) solutions with a vSphere-native, high-performance architecture. With software defined storage, it has opened new opportunities to new skills. With vSAN we can use local disk and create highly available, scalable, high performance datastores for vSphere infrastructure. Benefit of using local disk is there low latency and in the VSAN data is replicated with other Host disks.

Below are the system requirements for VMware virtual SAN, 
Hardware Host
     • 1GB NIC; 10GB NIC recommended
     • SATA/SAS HBA or RAID controller
     • At least one flash caching device and one persistent storage disk (flash or HDD) for each capacity-contributing node
Cluster Size
     • Min. 2 hosts – Max. 64 hosts
VMware HCL guide
     • Certified vSAN Ready server and it is on Hardware Compatibility List
Software
     • VMware vSphere 6.5 EP02 (any edition)
     • VMware vSphere with Operations Management 6.1 (any edition)
     • VMware vCloud Suite 6.0 (any edition updated with 6.5)
     • VMware vCenter Server 6.5

I have tested vSAN on Vmware workstation, you can follow my earlier article to Emulate HDD as SSD flash disk on Esxi and VMware workstation.

I am using default option to build vSAN for this demo, In the vSAN, There is a limitation of a 2 or 3 host cluster configuration, you can bear only one host failure by cluster setting option of host failure to tolerate 1. VMware vSAN keeps each of the 2 necessary copies of VM data on distinct esxi hosts. The witness object is on a third host. As there are low number of esxi server in the cluster, you might see following limitation in the cluster. When a esxi host goes down, vSAN cannot rebuild Virtual Machine data on another esxi server to safeguard against another failure. Another thing if a Esxi is put onto enter maintenance mode, vSAN cannot reprotect evacuated data. Data is uncovered to a possible catastrophe while the host is in maintenance mode. Make sure for production you are configuring proper redundancy and choosing proper options for the VSAN.

vmware vsphere vsan, virtual san, disk group, ssd, hdd, flash disk, cache tier, capacity tier, vsan datastore, vmkernel, esxi cluster, aggregated disks storage

In my environment I am running vcenter server 6.5, 3 esxi server version 6.5. Each esxi host has 2 x 10 GB disk for vSAN, out of one is SSD for cache tier and another is HDD for capacity tier. Make sure for production you use hardware or esxi host listed on VMware HCL, there are also certified VSAN ready nodes available. Before starting configuration one of the prerequisite is disable vSphere HA (high availability). Select the cluster, on the configure tab in the right, expand services and select vSphere Availability, click Edit. Again on vSphere Availability uncheck box on Turn on vSphere HA.

vmware vsphere web client, edit cluster setting turn on vsphere ha, proactive HA, configure vsan cluster, virtual san, vsphere availability

Another configuration is I have configured new VMKernel adapter port with vSAN services configured and enabled on the virtual switch. Make sure you are atleast using 10 Gig network adpater for vSAN network traffic.

vmware vsphere web client esxi, vcloud, vmware kernel adapters networking virtual switches, vmk, vsan network, dvswitch, virtual san, vsan datastore enabled

Below Services, there is vSAN option, expand it, and on the General view, you will find vSAN is Turned OFF. Press Configure button. 

VMware vSphere web client, Vmware Cluster, vSan, virtual san vSan is turned off, configure vsan, storage datastore, storage defined network

It opened the Configure vSAN wizard. Under the vSAN capabilities there are several services and options, select them how you want your vSAN cluster to work. 

Enabling or disabling deduplication and compression, requires a rolling reformt of all disks in the VSAN cluster, Depending on the amount of data stored, this might take a long time. vSAN alterations disk layout on each disk group of the cluster. To achieve this change, vSAN evacuates data from the disk group, removes the disk group, and recreates it with a new layout format that provisions deduplication and compression.

vSAN encryption needs an external Key Management Server (KMS), the vCenter Server, ESXi server. vCenter Server asks encryption keys from an outer KMS. The KMS produces and provisions the keys, and vCenter Server acquires the key IDs from the KMS and issues them to the ESXi servers.

A fault domain typically mentions to a group of hardware devices that would be impacted by an outage, I am using normal cluster without Fault domain or stretched cluster. Click next to proceed.

vmware vsphere web client, cluster, configure vSAN, fault domains, stretched cluster, datastore, storage encyption Deduplication and compression, vSan Capabilities

On the Network validation, check the existing vSAN network settings on all the hosts in the cluster. Make sure you have created configured one vmkernel adapter portgroup on each esxi host with vSAN option enabled. I have already configured this, Configuration will validate settings and Everything is green here..

vmware vsphere web client, configure vSan, network validation vmk, vsan network vmkernel vsan enabled, traffic, vsan datastores storage

On the Claim disks, select the disks to contribute to the vSAN datastore, Select which disks should be claimed for chache and which for capacity in the vSAN cluster. The disks below are grouped by model and size or by host. The recommended selection has been made based on the available devices in your environment. The number of capacity disks must be greater than or equal to the number of cache disks claimed per host.

vmware vsphere web client, configure vsan, claim disks, vsan datastores, flash ssd disk, solid state drive, hard disk drive, capactity tier, cache tier, HDD.png

Here you can make your disk appear as flash or HDD as shown in the icon. Next Select cache tier and capacity tier selecting from drop down box.
How many disks can a single esxi server add to VSAN?
     Maximum 5 diskgroup
Individually disk group needs at least 1 SDD and 1 HDD at a minimum and 7 HDDs at a maximum
     HDD count maximum per esxi host = 5 x 7 = 35
     SSD count maximum per esxi host = 5 x 1 = 5

vmware vsphere web client, esxi, disk model, serial number, claim disks, capacity tier, hdd, ssd chache tier, flash disk, vsan datastores

On the ready to complete review your settings selection before finishing the wizard. All the configured settings are listed her, click finish.

vmware vsphere vsan cluster. ready to complete, deduplication and compression, encryption, storage, capacity catche storage datastores, fault domains and streched cluster

Next check your recent tasks, Updating vSAN configuration starts based on provided information.

vmware vsphere web client vsan recent tasks, update vsan configuration, reconfigure vsan cluster.png

Check the configuration on Disk Management under vSAN. Each esxi server is listed and disks is mounted under disk groups.

vmware vsphere web client, configure vsan cluster, disk management, disk groups, connected and mounted, type hybrid, vsan datastore, ssd hdd flash cache capacity tier, configuration

Verify datastores, There is single vsanDatastore listed. It is ready to move VMs.

vmware vsphere web client, cluster vsan configuration datastores view, vsan datastore, vmfs, vsan, storage cluster

Verify Configuration Assist in vSAN, for me it is showing errors because I am not using certified hardware and warning and errors are expected.

vmware vsphere web client, vsan configuration, configuration assist, retest, vsan cluster datastore, hardware compatibility, vsan HCL

In the last enable vSphere HA.

Useful Articles
Emulate HDD as SSD flash disk on Esxi and VMware workstation
PART 1 : INSTALLING ESXI ON VMWARE WORKSTATION HOME LAB
PART 2 : CONFIGURING ESXI ON VMWARE WORKSTATION HOME LAB
PART 1 : BUILDING AND BUYING GUIDE IDEAS FOR VMWARE LAB
POWERCLI - CREATE DATACENTER AND ADD ESXI HOST IN VCENTER

Emulate HDD as SSD flash disk on Esxi and VMware workstation

January 14, 2018 09:03PM

I was required (emulated) virtual fake SSD in VMware workstation for few demos and testing purpose. I am already using SSD on my system, If vmdks are kept on the Solid state drives, VMs detects vmdk disks as SSD/Flash disk, but if you don't have SSD, it can be easily emulated with a trick configuration, but doing so performance is the same as HDD.

PART 6 : CONFIGURE VMWARE WORKSTATION TO SAVE SSD SPACE AND TIME
Create and configure VMWare vSphere VSAN cluster step by step

I have attached multiple disks on esxi server, in the Esxi on the Configure tab >> Storage Devices settings, all the local and remote disks are listed. Here see the disk drive type, it can be changed selecting it, by clicking button HDD to flash. Doing this will mark normal HDD as Flash disk and HDD button will change as F.

Warning: Marking HDD disks as flash disk could deteriorate the performance of datastores and services that use them. Mark disks as flash disks only if you are certain that those disks are flash disks.

VMware vSphere web client, configure storage devices local disk HDD and SSD flash disk type parallel scsi.png

For esxi server doesn't require much setting, but If you require fake emulated SSD in Microsoft windows Server OS, It can be done with a modifying (adding) configuration to VM vmx file. First I want to show here, I have one disk (C:) already on SSD and other (E:) HDD, I can get same information using PowerShell command Get-PhysicalDisk. Hard disk drive is shown as Unspecified.

Microsoft windows server 2016 defrag optimize drives, hard disk drive and solid drive, powershell get-physicaldisk change set hdd as ssd flash

First poweroff Virtual Machine, open VMX file in notepad and identify scsi disk location, here my second disk is 10 GB and it is located as scsi0:1. Add a new line scsi0:1.virtualSSD = 1 and save it. Power on virtual machine.

vmware workstation virtual machine settings, vm vmx configuration file SSD, HDD, disk drive, fake emulate virtual ssd, vmdk, scsi, hard disk drive, solid state drive

Once powered on VM, Verify the same in defrag on windows system or check it using Windows Powershell command.

vmware esxi, vsphere workstation, Microsoft windows server 2016 defrag optimize drives, change hard disk drive and solid drive, powershell get-physicaldisk change set hdd as ssd flash, Select-Object.png

The above steps I configured can be used on Esxi vm (Virtual machines) as well, Make sure VM is powered off before configuration. Right click VM and select Edit settings. In the VM Options tab expand Advanced, click Edit configuration in Configuration Parameters. In the wizard add Name and value, Power on VM to view SSD changes.

vmware vsphere microsoft windows server, vm virtual machines edit settings, configuration parameters, edit configuration parameters, scsi virtualssd poweroff on vm

Useful Articles for home lab
PART 1 : BUILDING AND BUYING GUIDE IDEAS FOR VMWARE LAB
PART 2 : BUILDING AND HARDWARE BUYING GUIDE IDEAS FOR VMWARE LAB
PART 3 : MY VSPHERE LAB CONFIGURATION ON VMWARE WORKSTATION
PART 4 : CONFIGURING VMWARE WORKSTATION NETWORKING IN HOME LAB
PART 5 : CONFIGURING STORAGE IN VMWare WORKSTATION FOR OPTIMAL SPEED
PART 6 : CONFIGURE VMWARE WORKSTATION TO SAVE SSD SPACE AND TIME
PART 7 : CREATING NESTED VMWARE ESXI SERVER VM IN HOMELAB ON VMWARE WORKSTATION
PART 8 : CPU COOLING SOLUTION FOR MY HOME LAB ON VMWARE WORKSTATION

Configuring a vCenter PSC Single sign-on Active directory Integrated windows authentication

January 14, 2018 02:16PM

In my one of the earlier article I shown ADDING AND CONFIGURING VMWARE VSPHERE VCENTER SSO ACTIVE DIRECTORY AS LDAP SERVER, That was one of the security best practices, Here I am going to perform the same task but will use Active directory integrated windows authentication way instead. For this few more steps need to configured on vCenter server. First step is vCenter server need to join into Active directory. Login onto vCenter server, click home icon button.

1. Under Administration, click System Configuration icon.
2. Click vCenter server in the Navigator.
3. On the right side, choose Manage tab.
4. In the Settings from list select Active Directory.
5. Click Join button.
6. Type Domain name, User name and password (user must have permissions to join computers in AD). After pressing ok, reboot the vCenter node manually to apply these changes.

Once server is restarted, check domain shows active directory name successfully.
Deploy install VCSA (vCenter server appliance 6.5) on VMWare Workstation

vmware vsphere web client psc sso single sign-on, system configuration, management join appliance to active directory, Nodes and services, domain, Organizational unit

Next start configuring vSphere PSC SSO. these steps are as same as joining computer into domain.
1. Click home button on the top.
2. Choose Administration to open advanced PSC (Platform services controller) settings.
3. In the navigator, click configuration.
4. On the right hand side, click the Identity sources,
5. Click + plus button to open Add identity Source wizard.
6. On the Identity source wizard, keep default in Select identity source type and keep checked 'Active Directory (Integrated Windows Authentication)' option.

vmware vsphere web client, administration configuration sso psc, Platform services controller, identity sources, Active Directory, integrated windows authentication

Next steps are self explanatory, Provide Active directory domain name (Keep checked use machine account - The above configured account - join vCenter server into domain). On Ready to complete, validate settings and click Finish.

vmware vsphere web client, add identity sources, domain name, service principal name spn, psc platform services controller, sso- single sign on

Active directory domain can be seen added in identity Sources, Make it default by clicking world icon with right side arrow.

vmware vsphere web client, sso, psc, platform service controller, single sign on, configuration identity sources, certificates, saml service providers, policies, Active directory configuration default domain

Here I am configuring extra steps and adding Active directory domain user in administrators group on SSO. 
1. Click Users and Groups in the Navigator pane.
2. In the Groups tab, select Administrators group.
3. Click Add Group members button, This opens Add Principals wizard.
4. In the Add Principals Wizard, type user or Group name,
5. Click Add button, this will shown on users text box.1
6. Click Ok.
7. In the Group Members you will see, user is added in the list, now this user can perform administrative task on SSO.

vmware vsphere web client home, psc, platform services controller sso users and groups configuration, administration, add group members, administrators.png

Next permissions can be assigned on Roles and Global permissions, or vCenter object and entities.

How does this help me to improve forensic insights with Audit-Quality Recording enhanced Logging, Collect logs about user activities so that IT teams can understand who did what, when, and where in the incident of a security threat or irregularity. Check task and event information to view complete information. As below screenshot I can clearly check and audit exactly what changes has been done by whom. This is very good from troubleshooting issues perspective. To see the demo, I have logged in with AD user. and performed some task, which I can monitor in Tasks and Events.

vmware vsphere vcenter 6.5 esxi, enhanced logging, tasks and events, monitor log who changed what

Userful Articles
VMWARE SECURITY BEST PRACTICES: POWERCLI ENABLE OR DISABLE ESXI SSH
vSphere ESXi security best practices: Time configuration - (NTP) Network Time Protocol
Configure syslog on VMware ESXi hosts: VMware best practices

Copy Files with PowerShell Remoting WINRM Protocol

January 11, 2018 12:21PM

Microsoft Powershell psremoting is just not limited to remoting into computers, it can also use to copy files over winrm protocol to remote system the same way, you use files are copied on traditional SMB protocol. This requires some psremoting configuration using POWERSHELL PS REMOTING BETWEEN COMPUTERS. To show everything from scratch I have listed my files using dir command from local folder and remote computer folder. I will copy one of the ISO file to remote server.

PS remoting is session based so I will create a new session first. whoami command shows the current logged in user, Session is created with same account, If another username or password need to use, provide parameter -Credential (Get-Credential) with below command.
$PSSession = New-PSSession -ComputerName Server01 

And next command will copy the file remotely over winrm protocol, it will take some time depending on the size of file to copy and will show copy progress. File once copied verify it with dir again that file exist on remote folder.
Copy-Item -Path .\Router.iso -Destination c:\temp -ToSession $PSSession

Once everything is  verified, close and remove session using
Remove-PSSession $PSSession

Microsoft windows Powershell, winrm, wsman, dir, get-childitem, new-pssession, whoami, remove-pssession, copy-item psremoting, enable psremoting

Useful Articles
Different ways to bypass Powershell execution policy :.ps1 cannot be loaded because running scripts is disabled
Installing, importing and using any module in powershell
GUI - SETUP AND CONFIGURE POWERSHELL WEB ACCESS SERVER (GATEWAY)

Generate random password GUI using powershell

January 6, 2018 11:08PM

I had one of the requirement to write Strong Random Password Generator :Microsoft Powershell earlier but it was completely command line based, and the applications users who were using it, due to non-technical background were not able to execute it correctly, So the team who requested the script wanted it in GUI form (Graphical user Interface) so it can be easily used by anyone buy running just EXE file. I have little expertise on .net objects, but with the help of http://poshgui.org and Powershell Studio trial version I was able to convert my original script to GUI very easily and less time.

I am using System.Security.Cryptography.RNGCryptoServiceProvider entropy as mentioned in earlier article to generate true random password.

powershell generate strong random password gui, graphical user interface, get-random, cryptography, rng, generator.png

Once EXE or ps1 is run it shows above GUI form, After clicking related buttons, Password is shown on the tool and copied to clipboard, use Ctrl+V to paste. It also detects other things if you didn't put numeric integer input in the text boxes.

For .EXE don't need to follow articles, They are related to .PS1 files.
Different ways to bypass Powershell execution policy :.ps1 cannot be loaded because running scripts is disabled
Powershell Trick : Execute or run any file as a script file

Download ps1 script New-RandomPasswordGUI.ps1, Available in exe executable format in the zip New-RandomPasswordGUI.zip. This script is also available on Github.

  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
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
<#
    .NOTES
    --------------------------------------------------------------------------------
     Code generated by:  https://poshgui.com/ and Powershell studio
     Generated on:       12/27/2017 2:57 AM
     Generated by:       vKunal (http://vcloud-lab.com)
     Tested on :         Windows 8.1, 10, Powershell v5
    --------------------------------------------------------------------------------
    .DESCRIPTION
        GUI script generated using https://poshgui.com/ and Powershell studio
#>


function New-RandomPasswordGUI {

	[void][reflection.assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089')
	[void][reflection.assembly]::Load('System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089')
	[void][reflection.assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')

	[System.Windows.Forms.Application]::EnableVisualStyles()
	$formGenerateRandomPasswo = New-Object 'System.Windows.Forms.Form'
	$ErrorMessage = New-Object 'System.Windows.Forms.Label'
	$MessageResult = New-Object 'System.Windows.Forms.Label'
	$linklabelHttpvcloudlabcom = New-Object 'System.Windows.Forms.LinkLabel'
	$Result = New-Object 'System.Windows.Forms.Label'
	$NumberTextBox = New-Object 'System.Windows.Forms.TextBox'
	$SymbolTextBox = New-Object 'System.Windows.Forms.TextBox'
	$SmallTextBox = New-Object 'System.Windows.Forms.TextBox'
	$CapitalTextbox = New-Object 'System.Windows.Forms.TextBox'
	$checkboxNumber = New-Object 'System.Windows.Forms.CheckBox'
	$checkboxSymbol = New-Object 'System.Windows.Forms.CheckBox'
	$checkboxSmallNumber = New-Object 'System.Windows.Forms.CheckBox'
	$checkboxCapitalNumber = New-Object 'System.Windows.Forms.CheckBox'
	$GeneratePassword12 = New-Object 'System.Windows.Forms.Button'
	$groupbox1 = New-Object 'System.Windows.Forms.GroupBox'
	$SecondRadioButton = New-Object 'System.Windows.Forms.RadioButton'
	$groupbox2 = New-Object 'System.Windows.Forms.GroupBox'
	$labelPasswordLength = New-Object 'System.Windows.Forms.Label'
	$FirstRadioButton = New-Object 'System.Windows.Forms.RadioButton'
	$PasswordLength = New-Object 'System.Windows.Forms.TextBox'
	$InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState'

	$formGenerateRandomPasswo_Load={
		$ErrorMessage.Text = $null
		$MessageResult.Text = $null
		
		$FirstRadioButton.Checked = $true
		$PasswordLength.Text = 12
		
		#Disable make your own password
		$checkboxCapitalNumber.Enabled = $false
		$checkboxSmallNumber.Enabled = $false
		$checkboxNumber.Enabled = $false
		$checkboxSymbol.Enabled = $false
		
		$CapitalTextbox.Enabled = $false
		$SmallTextBox.Enabled = $false
		$SymbolTextBox.Enabled = $false
		$NumberTextBox.Enabled = $false
	}
	
	$GeneratePassword12_Click={
		
		$RandomOption = @()
		$CompletePassword = @()
		
		$CompleteSmallPassword = @()
		$CompleteCapitalPassword = @()
		$CompleteSymbolPassword = @()
		$CompleteNumberPassword = @()
		
		#table
		$JSon = @"
    [
        {"SrNo":  "1","Number":  "33","Character":  "!","Phonetic":  "Exclamation point","Type":  "Symbol"},
        {"SrNo":  "2","Number":  "34","Character":  "\"","Phonetic":  "Double quotes","Type":  "Symbol"},
        {"SrNo":  "3","Number":  "35","Character":  "#","Phonetic":  "Hash sign","Type":  "Symbol"},
        {"SrNo":  "4","Number":  "36","Character":  "$","Phonetic":  "Dollar sign","Type":  "Symbol"},
        {"SrNo":  "5","Number":  "37","Character":  "%","Phonetic":  "Percent sign","Type":  "Symbol"},
        {"SrNo":  "6","Number":  "38","Character":  "&","Phonetic":  "Ampersand","Type":  "Symbol"},
        {"SrNo":  "7","Number":  "39","Character":  "'","Phonetic":  "Single quote","Type":  "Symbol"},
        {"SrNo":  "8","Number":  "40","Character":  "(","Phonetic":  "Opening parenthesis","Type":  "Symbol"},
        {"SrNo":  "9","Number":  "41","Character":  ")","Phonetic":  "Closing parenthesis","Type":  "Symbol"},
        {"SrNo":  "10","Number":  "42","Character":  "*","Phonetic":  "Asterisk","Type":  "Symbol"},
        {"SrNo":  "11","Number":  "43","Character":  "+","Phonetic":  "Plus sign","Type":  "Symbol"},
        {"SrNo":  "12","Number":  "44","Character":  ",","Phonetic":  "Comma","Type":  "Symbol"},
        {"SrNo":  "13","Number":  "45","Character":  "-","Phonetic":  "Minus sign -Hyphen","Type":  "Symbol"},
        {"SrNo":  "14","Number":  "46","Character":  ".","Phonetic":  "Period","Type":  "Symbol"},
        {"SrNo":  "15","Number":  "47","Character":  "/","Phonetic":  "Slash","Type":  "Symbol"},
        {"SrNo":  "16","Number":  "58","Character":  ":","Phonetic":  "Colon","Type":  "Symbol"},
        {"SrNo":  "17","Number":  "59","Character":  ";","Phonetic":  "SemiColon","Type":  "Symbol"},
        {"SrNo":  "18","Number":  "60","Character":  "<","Phonetic":  "Less than sign","Type":  "Symbol"},
        {"SrNo":  "19","Number":  "61","Character":  "=","Phonetic":  "Equal sign","Type":  "Symbol"},
        {"SrNo":  "20","Number":  "62","Character":  ">","Phonetic":  "Greater than sign","Type":  "Symbol"},
        {"SrNo":  "21","Number":  "63","Character":  "?","Phonetic":  "Question mark","Type":  "Symbol"},
        {"SrNo":  "22","Number":  "64","Character":  "@","Phonetic":  "At symbol","Type":  "Symbol"},
        {"SrNo":  "23","Number":  "91","Character":  "[","Phonetic":  "Opening bracket","Type":  "Symbol"},
        {"SrNo":  "24","Number":  "92","Character":  "\\","Phonetic":  "Backslash","Type":  "Symbol"},
        {"SrNo":  "25","Number":  "93","Character":  "]","Phonetic":  "Closing bracket","Type":  "Symbol"},
        {"SrNo":  "26","Number":  "94","Character":  "^","Phonetic":  "Caret - circumflex","Type":  "Symbol"},
        {"SrNo":  "27","Number":  "95","Character":  "_","Phonetic":  "Underscore","Type":  "Symbol"},
        {"SrNo":  "29","Number":  "123","Character":  "{","Phonetic":  "Opening brace","Type":  "Symbol"},
        {"SrNo":  "30","Number":  "124","Character":  "|","Phonetic":  "Vertical bar","Type":  "Symbol"},
        {"SrNo":  "31","Number":  "125","Character":  "}","Phonetic":  "Closing brace","Type":  "Symbol"},
        {"SrNo":  "32","Number":  "126","Character":  "~","Phonetic":  "Equivalency sign - Tilde","Type":  "Symbol"},
        {"SrNo":  "33","Number":  "65","Character":  "A","Phonetic":  "Alpha ","Type":  "Capital Letter"},
        {"SrNo":  "34","Number":  "66","Character":  "B","Phonetic":  "Bravo ","Type":  "Capital Letter"},
        {"SrNo":  "35","Number":  "67","Character":  "C","Phonetic":  "Charlie ","Type":  "Capital Letter"},
        {"SrNo":  "36","Number":  "68","Character":  "D","Phonetic":  "Delta ","Type":  "Capital Letter"},
        {"SrNo":  "37","Number":  "69","Character":  "E","Phonetic":  "Echo ","Type":  "Capital Letter"},
        {"SrNo":  "38","Number":  "70","Character":  "F","Phonetic":  "Foxtrot ","Type":  "Capital Letter"},
        {"SrNo":  "39","Number":  "71","Character":  "G","Phonetic":  "Golf ","Type":  "Capital Letter"},
        {"SrNo":  "40","Number":  "72","Character":  "H","Phonetic":  "Hotel ","Type":  "Capital Letter"},
        {"SrNo":  "41","Number":  "73","Character":  "I","Phonetic":  "India ","Type":  "Capital Letter"},
        {"SrNo":  "42","Number":  "74","Character":  "J","Phonetic":  "Juliet ","Type":  "Capital Letter"},
        {"SrNo":  "43","Number":  "75","Character":  "K","Phonetic":  "Kilo ","Type":  "Capital Letter"},
        {"SrNo":  "44","Number":  "76","Character":  "L","Phonetic":  "Lima ","Type":  "Capital Letter"},
        {"SrNo":  "45","Number":  "77","Character":  "M","Phonetic":  "Mike ","Type":  "Capital Letter"},
        {"SrNo":  "46","Number":  "78","Character":  "N","Phonetic":  "November ","Type":  "Capital Letter"},
        {"SrNo":  "47","Number":  "79","Character":  "O","Phonetic":  "Oscar ","Type":  "Capital Letter"},
        {"SrNo":  "48","Number":  "80","Character":  "P","Phonetic":  "Papa ","Type":  "Capital Letter"},
        {"SrNo":  "49","Number":  "81","Character":  "Q","Phonetic":  "Quebec ","Type":  "Capital Letter"},
        {"SrNo":  "50","Number":  "82","Character":  "R","Phonetic":  "Romeo ","Type":  "Capital Letter"},
        {"SrNo":  "51","Number":  "83","Character":  "S","Phonetic":  "Sierra ","Type":  "Capital Letter"},
        {"SrNo":  "52","Number":  "84","Character":  "T","Phonetic":  "Tango ","Type":  "Capital Letter"},
        {"SrNo":  "53","Number":  "85","Character":  "U","Phonetic":  "Uniform ","Type":  "Capital Letter"},
        {"SrNo":  "54","Number":  "86","Character":  "V","Phonetic":  "Victor ","Type":  "Capital Letter"},
        {"SrNo":  "55","Number":  "87","Character":  "W","Phonetic":  "Whiskey ","Type":  "Capital Letter"},
        {"SrNo":  "56","Number":  "88","Character":  "X","Phonetic":  "X-Ray ","Type":  "Capital Letter"},
        {"SrNo":  "57","Number":  "89","Character":  "Y","Phonetic":  "Yankee ","Type":  "Capital Letter"},
        {"SrNo":  "58","Number":  "90","Character":  "Z","Phonetic":  "Zulu ","Type":  "Capital Letter"},
        {"SrNo":  "59","Number":  "97","Character":  "a","Phonetic":  "Alpha ","Type":  "Small Letter"},
        {"SrNo":  "60","Number":  "98","Character":  "b","Phonetic":  "Bravo ","Type":  "Small Letter"},
        {"SrNo":  "61","Number":  "99","Character":  "c","Phonetic":  "Charlie ","Type":  "Small Letter"},
        {"SrNo":  "62","Number":  "100","Character":  "d","Phonetic":  "Delta ","Type":  "Small Letter"},
        {"SrNo":  "63","Number":  "101","Character":  "e","Phonetic":  "Echo ","Type":  "Small Letter"},
        {"SrNo":  "64","Number":  "102","Character":  "f","Phonetic":  "Foxtrot ","Type":  "Small Letter"},
        {"SrNo":  "65","Number":  "103","Character":  "g","Phonetic":  "Golf ","Type":  "Small Letter"},
        {"SrNo":  "66","Number":  "104","Character":  "h","Phonetic":  "Hotel ","Type":  "Small Letter"},
        {"SrNo":  "67","Number":  "105","Character":  "i","Phonetic":  "India ","Type":  "Small Letter"},
        {"SrNo":  "68","Number":  "106","Character":  "j","Phonetic":  "Juliet ","Type":  "Small Letter"},
        {"SrNo":  "69","Number":  "107","Character":  "k","Phonetic":  "Kilo ","Type":  "Small Letter"},
        {"SrNo":  "70","Number":  "108","Character":  "l","Phonetic":  "Lima ","Type":  "Small Letter"},
        {"SrNo":  "71","Number":  "109","Character":  "m","Phonetic":  "Mike ","Type":  "Small Letter"},
        {"SrNo":  "72","Number":  "110","Character":  "n","Phonetic":  "November ","Type":  "Small Letter"},
        {"SrNo":  "73","Number":  "111","Character":  "o","Phonetic":  "Oscar ","Type":  "Small Letter"},
        {"SrNo":  "74","Number":  "112","Character":  "p","Phonetic":  "Papa ","Type":  "Small Letter"},
        {"SrNo":  "75","Number":  "113","Character":  "q","Phonetic":  "Quebec ","Type":  "Small Letter"},
        {"SrNo":  "76","Number":  "114","Character":  "r","Phonetic":  "Romeo ","Type":  "Small Letter"},
        {"SrNo":  "77","Number":  "115","Character":  "s","Phonetic":  "Sierra ","Type":  "Small Letter"},
        {"SrNo":  "78","Number":  "116","Character":  "t","Phonetic":  "Tango ","Type":  "Small Letter"},
        {"SrNo":  "79","Number":  "117","Character":  "u","Phonetic":  "Uniform ","Type":  "Small Letter"},
        {"SrNo":  "80","Number":  "118","Character":  "v","Phonetic":  "Victor ","Type":  "Small Letter"},
        {"SrNo":  "81","Number":  "119","Character":  "w","Phonetic":  "Whiskey ","Type":  "Small Letter"},
        {"SrNo":  "82","Number":  "120","Character":  "x","Phonetic":  "X-Ray ","Type":  "Small Letter"},
        {"SrNo":  "83","Number":  "121","Character":  "y","Phonetic":  "Yankee ","Type":  "Small Letter"},
        {"SrNo":  "84","Number":  "122","Character":  "z","Phonetic":  "Zulu ","Type":  "Small Letter"},
        {"SrNo":  "85","Number":  "48","Character":  "0","Phonetic":  "Zero","Type":  "Number"},
        {"SrNo":  "86","Number":  "49","Character":  "1","Phonetic":  "One","Type":  "Number"},
        {"SrNo":  "87","Number":  "50","Character":  "2","Phonetic":  "Two","Type":  "Number"},
        {"SrNo":  "88","Number":  "51","Character":  "3","Phonetic":  "Three","Type":  "Number"},
        {"SrNo":  "89","Number":  "52","Character":  "4","Phonetic":  "Four","Type":  "Number"},
        {"SrNo":  "90","Number":  "53","Character":  "5","Phonetic":  "Five","Type":  "Number"},
        {"SrNo":  "91","Number":  "54","Character":  "6","Phonetic":  "Six","Type":  "Number"},
        {"SrNo":  "92","Number":  "55","Character":  "7","Phonetic":  "Seven","Type":  "Number"},
        {"SrNo":  "93","Number":  "56","Character":  "8","Phonetic":  "Eight","Type":  "Number"},
        {"SrNo":  "94","Number":  "57","Character":  "9","Phonetic":  "Nine","Type":  "Number"}
    ]
"@
		
		#Excluded Characters
		#{"SrNo":  "28","Number":  "96","Character":  "`","Phonetic":  "Grave accent","Type":  "Symbol"},
		
		#System.Security.Cryptography.RNGCryptoServiceProvider
		function Get-Rng
		{
			$RandomBytes = New-Object -TypeName "System.Byte[]" 4
			$Random = New-Object -TypeName "System.Security.Cryptography.RNGCryptoServiceProvider"
			$Random.GetBytes($RandomBytes)
			[BitConverter]::ToInt32($RandomBytes, 0)
		} #function Get-Rng	
		
		#tables
		$AlphbatesTable = $JSon | ConvertFrom-Json
		$SymbolTable = $AlphbatesTable | Where-Object { $_.Type -eq 'Symbol' }
		$CapitalLetterTable = $AlphbatesTable | Where-Object { $_.Type -eq 'Capital Letter' }
		$SmallLetterTable = $AlphbatesTable | Where-Object { $_.Type -eq 'Small Letter' }
		$NumberTable = $AlphbatesTable | Where-Object { $_.Type -eq 'Number' }
		
		#-or ($CapitalTextbox.Text -is [int]) -or ($SmallTextBox.Text -is [int]) -or ($SymbolTextBox.Text -is [int]) -or ($NumberTextBox -is [int])
		
		if (($FirstRadioButton.Checked -eq $true) -and ($SecondRadioButton.Checked -eq $false))
		{
			$ErrorMessage.Text = $null
			if ($PasswordLength.Text -match '[0-9]')
			{
				for ($i = 1; $i -le $PasswordLength.Text; $i++)
				{
					$DefaultUniqueNumber = Get-Rng
					$PasswordHash = Get-Random -InputObject $AlphbatesTable -SetSeed $DefaultUniqueNumber
					$CompletePassword += $PasswordHash.Character
					$CompletePassword = $CompletePassword -join ''
				} #for ($i = 1; $i -le $PasswordLength; $i++)
				$ErrorMessage.Text = $null
			}
			else
			{
				$ErrorMessage.Text = "Type valid number in the Password Length Textbox"
			}
		}
		else
		{
			if ($SmallTextBox -ne 0 -and $SmallTextBox.Text -match '[0-9]' -and $checkboxSmallNumber.Checked -eq $true)
			{
				for ($sm = 1; $sm -le $SmallTextBox.Text; $sm++)
				{
					$SmallUniqueNumber = Get-Rng
					$CompleteSmallPassword += Get-Random -InputObject $SmallLetterTable -SetSeed $SmallUniqueNumber
				} #for ($sm = 1; $sm -le $SmallLetter; $sm++)
			} #if ($SmallLetter -ne 0)
			
			if ($CapitalTextBox -ne 0 -and $CapitalTextbox.Text -match '[0-9]' -and $checkboxCapitalNumber.Checked -eq $true)
			{
				for ($c = 1; $c -le $CapitalTextBox.Text; $c++)
				{
					$CapitalUniqueNumber = Get-Rng
					$CompleteCapitalPassword += Get-Random -InputObject $CapitalLetterTable -SetSeed $CapitalUniqueNumber
				} #for ($s = 1; $s -le $CapitalLetter; $s++)
				
			} #if ($CapitalLetter -ne 0)
		
			if ($NumberTextBox -ne 0 -and $NumberTextBox.Text -match '[0-9]' -and $checkboxNumber.Checked -eq $true)
			{
				for ($N = 1; $N -le $NumberTextBox.Text; $N++)
				{
					$NumberUniqueNumber = Get-Rng
					$CompleteNumberPassword += Get-Random -InputObject $NumberTable -SetSeed $NumberUniqueNumber
				} #for ($s = 1; $s -le $Number; $s++)
			} #if ($Number -ne 0)
			
			if ($SymbolTextBox -ne 0 -and $SymbolTextBox.Text -match '[0-9]' -and $checkboxSymbol.Checked -eq $true)
			{
				for ($sy = 1; $sy -le $SymbolTextBox.Text; $sy++)
				{
					$SymbolUniqueNumber = Get-Rng
					$CompleteSymbolPassword += Get-Random -InputObject $SymbolTable -SetSeed $SymbolUniqueNumber
				} #for ($sy = 1; $sy -le $Symbol; $sy++)
	
			} #if ($Symbol -ne 0)
			
			if ($CapitalTextbox.Text -match '[0-9]' -and $SmallTextBox.Text -match '[0-9]' -and $NumberTextBox.Text -match '[0-9]' -and $SymbolTextBox.Text -match '[0-9]')
			{
				$ErrorMessage.Text = $null
			}
			else
			{
				$ErrorMessage.Text = "There is invalid character in one of the Textbox, type number"
			}
	
			$RandomOption += $CompleteSmallPassword
			$RandomOption += $CompleteCapitalPassword
			$RandomOption += $CompleteNumberPassword
			$RandomOption += $CompleteSymbolPassword
			#$CompletePassword = $RandomOption | Sort-Object {Get-Random (Get-Rng)}
			$CompletePassword = $RandomOption | Select-Object *, @{ N = 'Sort'; E = { 1 .. 500 | Get-Random (Get-Rng) } } | Sort-Object -Property Sort
			$CompletePassword = $CompletePassword.Character -join ''
		}
		
		$Result.Text = $CompletePassword
		$Result.Text | clip
		$MessageResult.Text = 'Password copied on clipboard, use Ctrl+V to paste.'
	}
	
	$checkboxCapitalNumber_CheckedChanged={
		if ($checkboxCapitalNumber.Checked -eq $true)
		{
			$CapitalTextbox.Enabled = $true
		}
		else
		{
			$CapitalTextbox.Enabled = $false
		}
		
		if (($checkboxCapitalNumber.Checked -eq $false) -and
		($checkboxSmallNumber.Checked -eq $false) -and
		($checkboxNumber.Checked -eq $false) -and
		($checkboxSymbol.Checked -eq $false))
		{
			$FirstRadioButton.Checked = $true
			$secondRadioButton.Checked = $false
			$PasswordLength.Enabled = $true
			
			#Disable make your own password
			$checkboxCapitalNumber.Enabled = $false
			$checkboxSmallNumber.Enabled = $false
			$checkboxNumber.Enabled = $false
			$checkboxSymbol.Enabled = $false
			
			$CapitalTextbox.Enabled = $false
			$SmallTextBox.Enabled = $false
			$SymbolTextBox.Enabled = $false
			$NumberTextBox.Enabled = $false
		}
	}
	
	$checkboxNumber_CheckedChanged={
		if ($checkboxNumber.Checked -eq $true)
		{
			$NumberTextbox.Enabled = $true
		}
		else
		{
			$NumberTextbox.Enabled = $false
		}
		if (($checkboxCapitalNumber.Checked -eq $false) -and
			($checkboxSmallNumber.Checked -eq $false) -and
			($checkboxNumber.Checked -eq $false) -and
			($checkboxSymbol.Checked -eq $false))
		{
			$FirstRadioButton.Checked = $true
			$secondRadioButton.Checked = $false
			$PasswordLength.Enabled = $true
			
			#Disable make your own password
			$checkboxCapitalNumber.Enabled = $false
			$checkboxSmallNumber.Enabled = $false
			$checkboxNumber.Enabled = $false
			$checkboxSymbol.Enabled = $false
			
			$CapitalTextbox.Enabled = $false
			$SmallTextBox.Enabled = $false
			$SymbolTextBox.Enabled = $false
			$NumberTextBox.Enabled = $false
		}
	}
	
	$checkboxSmallNumber_CheckedChanged={
		if ($checkboxSmallNumber.Checked -eq $true)
		{
			$SmallTextbox.Enabled = $true
		}
		else
		{
			$SmallTextbox.Enabled = $false
		}
		
		if (($checkboxCapitalNumber.Checked -eq $false) -and
			($checkboxSmallNumber.Checked -eq $false) -and
			($checkboxNumber.Checked -eq $false) -and
			($checkboxSymbol.Checked -eq $false))
		{
			$FirstRadioButton.Checked = $true
			$secondRadioButton.Checked = $false
			$PasswordLength.Enabled = $true
			
			#Disable make your own password
			$checkboxCapitalNumber.Enabled = $false
			$checkboxSmallNumber.Enabled = $false
			$checkboxNumber.Enabled = $false
			$checkboxSymbol.Enabled = $false
			
			$CapitalTextbox.Enabled = $false
			$SmallTextBox.Enabled = $false
			$SymbolTextBox.Enabled = $false
			$NumberTextBox.Enabled = $false
		}
	}
	
	$checkboxSymbol_CheckedChanged={
		if ($checkboxSymbol.Checked -eq $true)
		{
			$SymbolTextbox.Enabled = $true
		}
		else
		{
			$SymbolTextbox.Enabled = $false
		}
		
		if (($checkboxCapitalNumber.Checked -eq $false) -and
			($checkboxSmallNumber.Checked -eq $false) -and
			($checkboxNumber.Checked -eq $false) -and
			($checkboxSymbol.Checked -eq $false))
		{
			$FirstRadioButton.Checked = $true
			$secondRadioButton.Checked = $false
			$PasswordLength.Enabled = $true
			
			#Disable make your own password
			$checkboxCapitalNumber.Enabled = $false
			$checkboxSmallNumber.Enabled = $false
			$checkboxNumber.Enabled = $false
			$checkboxSymbol.Enabled = $false
			
			$CapitalTextbox.Enabled = $false
			$SmallTextBox.Enabled = $false
			$SymbolTextBox.Enabled = $false
			$NumberTextBox.Enabled = $false
		}
	}
	
	$FirstRadioButton_CheckedChanged={
		$PasswordLength.Text = 12
		$FirstRadioButton.Checked -eq $true
		#Disable second groupbox and textbox
		if ($FirstRadioButton.Checked -eq $true)
		{
			$FirstRadioButton.Checked = $true
			#Enable password length
			$PasswordLength.Enabled = $true
			
			#Disable make your own password
			$SecondRadioButton.Checked = $false
					
			$SecondRadioButton.Checked = $false
			$checkboxCapitalNumber.Enabled = $false
			$checkboxSmallNumber.Enabled = $false
			$checkboxNumber.Enabled = $false
			$checkboxSymbol.Enabled = $false
			
			$CapitalTextbox.Enabled = $false
			$SmallTextBox.Enabled = $false
			$SymbolTextBox.Enabled = $false
			$NumberTextBox.Enabled = $false
		}
	}
	
	$SecondRadioButton_CheckedChanged={
		#Disable first groupbox and textbox
		if ($SecondRadioButton.Checked -eq $true)
		{
			$FirstRadioButton.Checked = $false
			$PasswordLength.Enabled = $false
			
			#Enable make your own password
			#$SecondRadioButton.Checked = $true
			
			$checkboxCapitalNumber.Enabled = $true
			$checkboxSmallNumber.Enabled = $true
			$checkboxNumber.Enabled = $true
			$checkboxSymbol.Enabled = $true
			
			$CapitalTextbox.Enabled = $true
			$SmallTextBox.Enabled = $true
			$SymbolTextBox.Enabled = $true
			$NumberTextBox.Enabled = $true
			
			#Enable checkboxes
			$checkboxCapitalNumber.Checked = $true
			$checkboxSmallNumber.Checked = $true
			$checkboxNumber.Checked = $true
			$checkboxSymbol.Checked = $true
			
			#Set make your own default value
			$CapitalTextbox.Text = 4
			$SmallTextbox.Text = 4
			$SymbolTextbox.Text = 2
			$NumberTextbox.Text = 2
		}
	}
	
	$Form_StateCorrection_Load=
	{
		$formGenerateRandomPasswo.WindowState = $InitialFormWindowState
	}
	
	$Form_Cleanup_FormClosed=
	{
		try
		{
			$Result.remove_Click($Result_Click)
			$NumberTextBox.remove_TextChanged($NumberTextBox_TextChanged)
			$SymbolTextBox.remove_TextChanged($SymbolTextBox_TextChanged)
			$SmallTextBox.remove_TextChanged($SmallTextBox_TextChanged)
			$CapitalTextbox.remove_TextChanged($CapitalTextbox_TextChanged)
			$checkboxNumber.remove_CheckedChanged($checkboxNumber_CheckedChanged)
			$checkboxSymbol.remove_CheckedChanged($checkboxSymbol_CheckedChanged)
			$checkboxSmallNumber.remove_CheckedChanged($checkboxSmallNumber_CheckedChanged)
			$checkboxCapitalNumber.remove_CheckedChanged($checkboxCapitalNumber_CheckedChanged)
			$GeneratePassword12.remove_Click($GeneratePassword12_Click)
			$SecondRadioButton.remove_CheckedChanged($SecondRadioButton_CheckedChanged)
			$groupbox1.remove_Enter($groupbox1_Enter)
			$FirstRadioButton.remove_CheckedChanged($FirstRadioButton_CheckedChanged)
			$PasswordLength.remove_TextChanged($PasswordLength_TextChanged)
			$formGenerateRandomPasswo.remove_Load($formGenerateRandomPasswo_Load)
			$formGenerateRandomPasswo.remove_Load($Form_StateCorrection_Load)
			$formGenerateRandomPasswo.remove_FormClosed($Form_Cleanup_FormClosed)
		}
		catch { Out-Null <# Prevent PSScriptAnalyzer warning #> }
	}

	$formGenerateRandomPasswo.SuspendLayout()
	$groupbox1.SuspendLayout()
	$groupbox2.SuspendLayout()

	$formGenerateRandomPasswo.Controls.Add($ErrorMessage)
	$formGenerateRandomPasswo.Controls.Add($MessageResult)
	$formGenerateRandomPasswo.Controls.Add($linklabelHttpvcloudlabcom)
	$formGenerateRandomPasswo.Controls.Add($Result)
	$formGenerateRandomPasswo.Controls.Add($NumberTextBox)
	$formGenerateRandomPasswo.Controls.Add($SymbolTextBox)
	$formGenerateRandomPasswo.Controls.Add($SmallTextBox)
	$formGenerateRandomPasswo.Controls.Add($CapitalTextbox)
	$formGenerateRandomPasswo.Controls.Add($checkboxNumber)
	$formGenerateRandomPasswo.Controls.Add($checkboxSymbol)
	$formGenerateRandomPasswo.Controls.Add($checkboxSmallNumber)
	$formGenerateRandomPasswo.Controls.Add($checkboxCapitalNumber)
	$formGenerateRandomPasswo.Controls.Add($GeneratePassword12)
	$formGenerateRandomPasswo.Controls.Add($groupbox1)
	$formGenerateRandomPasswo.Controls.Add($groupbox2)
	$formGenerateRandomPasswo.AutoScaleDimensions = '6, 13'
	$formGenerateRandomPasswo.AutoScaleMode = 'Font'
	$formGenerateRandomPasswo.ClientSize = '424, 337'
	$formGenerateRandomPasswo.Name = 'formGenerateRandomPasswo'
	$formGenerateRandomPasswo.Text = 'Generate Random Password Tool'
	$formGenerateRandomPasswo.add_Load($formGenerateRandomPasswo_Load)

	$ErrorMessage.AutoSize = $True
	$ErrorMessage.Font = 'Microsoft Sans Serif, 10pt'
	$ErrorMessage.ForeColor = 'Red'
	$ErrorMessage.Location = '12, 226'
	$ErrorMessage.Name = 'ErrorMessage'
	$ErrorMessage.Size = '101, 17'
	$ErrorMessage.TabIndex = 15
	$ErrorMessage.Text = 'Error Message'

	$MessageResult.AutoSize = $True
	$MessageResult.ForeColor = 'Red'
	$MessageResult.Location = '12, 298'
	$MessageResult.Name = 'MessageResult'
	$MessageResult.Size = '89, 13'
	$MessageResult.TabIndex = 14
	$MessageResult.Text = 'Friendly Message'

	$linklabelHttpvcloudlabcom.Location = '297, 298'
	$linklabelHttpvcloudlabcom.Name = 'linklabelHttpvcloudlabcom'
	$linklabelHttpvcloudlabcom.Size = '115, 20'
	$linklabelHttpvcloudlabcom.TabIndex = 13
	$linklabelHttpvcloudlabcom.TabStop = $True
	$linklabelHttpvcloudlabcom.Text = 'http://vcloud-lab.com'

	$Result.AutoSize = $True
	$Result.Font = 'Microsoft Sans Serif, 14pt'
	$Result.Location = '12, 259'
	$Result.Name = 'Result'
	$Result.Size = '230, 24'
	$Result.TabIndex = 10
	$Result.Text = 'Password will display here'
	$Result.add_Click($Result_Click)

	$NumberTextBox.Location = '301, 186'
	$NumberTextBox.Name = 'NumberTextBox'
	$NumberTextBox.Size = '45, 20'
	$NumberTextBox.TabIndex = 9
	$NumberTextBox.add_TextChanged($NumberTextBox_TextChanged)

	$SymbolTextBox.Location = '301, 156'
	$SymbolTextBox.Name = 'SymbolTextBox'
	$SymbolTextBox.Size = '45, 20'
	$SymbolTextBox.TabIndex = 8
	$SymbolTextBox.add_TextChanged($SymbolTextBox_TextChanged)

	$SmallTextBox.Location = '301, 126'
	$SmallTextBox.Name = 'SmallTextBox'
	$SmallTextBox.Size = '45, 20'
	$SmallTextBox.TabIndex = 7
	$SmallTextBox.add_TextChanged($SmallTextBox_TextChanged)

	$CapitalTextbox.Location = '301, 96'
	$CapitalTextbox.Name = 'CapitalTextbox'
	$CapitalTextbox.Size = '45, 20'
	$CapitalTextbox.TabIndex = 6
	$CapitalTextbox.add_TextChanged($CapitalTextbox_TextChanged)

	$checkboxNumber.Location = '191, 184'
	$checkboxNumber.Name = 'checkboxNumber'
	$checkboxNumber.Size = '104, 22'
	$checkboxNumber.TabIndex = 4
	$checkboxNumber.Text = 'Number'
	$checkboxNumber.UseVisualStyleBackColor = $True
	$checkboxNumber.add_CheckedChanged($checkboxNumber_CheckedChanged)

	$checkboxSymbol.Location = '191, 154'
	$checkboxSymbol.Name = 'checkboxSymbol'
	$checkboxSymbol.Size = '104, 22'
	$checkboxSymbol.TabIndex = 3
	$checkboxSymbol.Text = 'Symbol'
	$checkboxSymbol.UseVisualStyleBackColor = $True
	$checkboxSymbol.add_CheckedChanged($checkboxSymbol_CheckedChanged)

	$checkboxSmallNumber.Location = '191, 124'
	$checkboxSmallNumber.Name = 'checkboxSmallNumber'
	$checkboxSmallNumber.Size = '104, 22'
	$checkboxSmallNumber.TabIndex = 2
	$checkboxSmallNumber.Text = 'Small Number'
	$checkboxSmallNumber.UseVisualStyleBackColor = $True
	$checkboxSmallNumber.add_CheckedChanged($checkboxSmallNumber_CheckedChanged)

	$checkboxCapitalNumber.Location = '191, 94'
	$checkboxCapitalNumber.Name = 'checkboxCapitalNumber'
	$checkboxCapitalNumber.Size = '104, 22'
	$checkboxCapitalNumber.TabIndex = 1
	$checkboxCapitalNumber.Text = 'Capital Number'
	$checkboxCapitalNumber.UseVisualStyleBackColor = $True
	$checkboxCapitalNumber.add_CheckedChanged($checkboxCapitalNumber_CheckedChanged)

	$GeneratePassword12.Location = '12, 12'
	$GeneratePassword12.Name = 'GeneratePassword12'
	$GeneratePassword12.Size = '136, 23'
	$GeneratePassword12.TabIndex = 0
	$GeneratePassword12.Text = 'New-GeneratePassword'
	$GeneratePassword12.UseVisualStyleBackColor = $True
	$GeneratePassword12.add_Click($GeneratePassword12_Click)

	$groupbox1.Controls.Add($SecondRadioButton)
	$groupbox1.Location = '177, 12'
	$groupbox1.Name = 'groupbox1'
	$groupbox1.Size = '207, 207'
	$groupbox1.TabIndex = 11
	$groupbox1.TabStop = $False
	$groupbox1.Text = 'Make your own password'
	$groupbox1.add_Enter($groupbox1_Enter)

	$SecondRadioButton.Location = '14, 33'
	$SecondRadioButton.Name = 'SecondRadioButton'
	$SecondRadioButton.Size = '104, 24'
	$SecondRadioButton.TabIndex = 0
	$SecondRadioButton.TabStop = $True
	$SecondRadioButton.Text = 'Select your own'
	$SecondRadioButton.UseVisualStyleBackColor = $True
	$SecondRadioButton.add_CheckedChanged($SecondRadioButton_CheckedChanged)

	$groupbox2.Controls.Add($labelPasswordLength)
	$groupbox2.Controls.Add($FirstRadioButton)
	$groupbox2.Controls.Add($PasswordLength)
	$groupbox2.Location = '12, 61'
	$groupbox2.Name = 'groupbox2'
	$groupbox2.Size = '146, 158'
	$groupbox2.TabIndex = 12
	$groupbox2.TabStop = $False
	$groupbox2.Text = 'Default 12 length'

	$labelPasswordLength.AutoSize = $True
	$labelPasswordLength.Location = '6, 65'
	$labelPasswordLength.Name = 'labelPasswordLength'
	$labelPasswordLength.Size = '89, 13'
	$labelPasswordLength.TabIndex = 7
	$labelPasswordLength.Text = 'Password Length'

	$FirstRadioButton.Location = '6, 31'
	$FirstRadioButton.Name = 'FirstRadioButton'
	$FirstRadioButton.Size = '104, 24'
	$FirstRadioButton.TabIndex = 6
	$FirstRadioButton.TabStop = $True
	$FirstRadioButton.Text = 'Random'
	$FirstRadioButton.UseVisualStyleBackColor = $True
	$FirstRadioButton.add_CheckedChanged($FirstRadioButton_CheckedChanged)

	$PasswordLength.Location = '100, 61'
	$PasswordLength.Name = 'PasswordLength'
	$PasswordLength.Size = '40, 20'
	$PasswordLength.TabIndex = 5
	$PasswordLength.add_TextChanged($PasswordLength_TextChanged)
	$groupbox2.ResumeLayout()
	$groupbox1.ResumeLayout()
	$formGenerateRandomPasswo.ResumeLayout()

	$InitialFormWindowState = $formGenerateRandomPasswo.WindowState
	#Init the OnLoad event to correct the initial state of the form
	$formGenerateRandomPasswo.add_Load($Form_StateCorrection_Load)
	#Clean up the control events
	$formGenerateRandomPasswo.add_FormClosed($Form_Cleanup_FormClosed)
	#Show the Form
	return $formGenerateRandomPasswo.ShowDialog()

} #End Function

#Call the form
New-RandomPasswordGUI | Out-Null

Here is the Phonetic table with character type you can use to know your password.

SrNo ASCII  Charater Phonetic Character Type
1 33 ! Exclamation point Symbol
2 34 " Double quotes Symbol
3 35 # Hash sign Symbol
4 36 $ Dollar sign Symbol
5 37 % Percent sign Symbol
6 38 & Ampersand Symbol
7 39 ' Single quote Symbol
8 40 ( Opening parenthesis Symbol
9 41 ) Closing parenthesis Symbol
10 42 * Asterisk Symbol
11 43 + Plus sign Symbol
12 44 , Comma Symbol
13 45 - Minus sign -Hyphen Symbol
14 46 . Period Symbol
15 47 / Slash Symbol
16 58 : Colon Symbol
17 59 ; SemiColon Symbol
18 60 < Less than sign Symbol
19 61 = Equal sign Symbol
20 62 > Greater than sign Symbol
21 63 ? Question mark Symbol
22 64 @ At symbol Symbol
23 91 [ Opening bracket Symbol
24 92 \ Backslash Symbol
25 93 ] Closing bracket Symbol
26 94 ^ Caret - circumflex Symbol
27 95 _ Underscore Symbol
28 96 ` Grave accent Symbol
29 123 { Opening brace Symbol
30 124 | Vertical bar Symbol
31 125 } Closing brace Symbol
32 126 ~ Equivalency sign - Tilde Symbol
33 65 A Alpha  Capital Letter
34 66 B Bravo  Capital Letter
35 67 C Charlie  Capital Letter
36 68 D Delta  Capital Letter
37 69 E Echo  Capital Letter
38 70 F Foxtrot  Capital Letter
39 71 G Golf  Capital Letter
40 72 H Hotel  Capital Letter
41 73 I India  Capital Letter
42 74 J Juliet  Capital Letter
43 75 K Kilo  Capital Letter
44 76 L Lima  Capital Letter
45 77 M Mike  Capital Letter
46 78 N November  Capital Letter
47 79 O Oscar  Capital Letter
48 80 P Papa  Capital Letter
49 81 Q Quebec  Capital Letter
50 82 R Romeo  Capital Letter
51 83 S Sierra  Capital Letter
52 84 T Tango  Capital Letter
53 85 U Uniform  Capital Letter
54 86 V Victor  Capital Letter
55 87 W Whiskey  Capital Letter
56 88 X X-Ray  Capital Letter
57 89 Y Yankee  Capital Letter
58 90 Z Zulu  Capital Letter
59 97 a Alpha  Small Letter
60 98 b Bravo  Small Letter
61 99 c Charlie  Small Letter
62 100 d Delta  Small Letter
63 101 e Echo  Small Letter
64 102 f Foxtrot  Small Letter
65 103 g Golf  Small Letter
66 104 h Hotel  Small Letter
67 105 i India  Small Letter
68 106 j Juliet  Small Letter
69 107 k Kilo  Small Letter
70 108 l Lima  Small Letter
71 109 m Mike  Small Letter
72 110 n November  Small Letter
73 111 o Oscar  Small Letter
74 112 p Papa  Small Letter
75 113 q Quebec  Small Letter
76 114 r Romeo  Small Letter
77 115 s Sierra  Small Letter
78 116 t Tango  Small Letter
79 117 u Uniform  Small Letter
80 118 v Victor  Small Letter
81 119 w Whiskey  Small Letter
82 120 x X-Ray  Small Letter
83 121 y Yankee  Small Letter
84 122 z Zulu  Small Letter
85 48 0 Zero Number
86 49 1 One Number
87 50 2 Two Number
88 51 3 Three Number
89 52 4 Four Number
90 53 5 Five Number
91 54 6 Six Number
92 55 7 Seven Number
93 56 8 Eight Number
94 57 9 Nine Number

Useful articles
COOL POWERSHELL FREE ONLINE GUI GENERATOR TOOL, POSHGUI
POWERSHELL FUN SEND KEYS ON THE SCREEN
Microsoft Powershell generate random anything (Filename, TempPath, GUID, Password)

Reset ESXi root password using vCenter server: VMWare vSphere Web client

January 4, 2018 12:49PM

Recently I got assigned one of the VMware project, while taking handover I found esxi root passwords are not documented properly for the VMware infrastructure project, Luckily 40% Esxi host were joined into domain and I was able to reset password using Reset forgotten ESXi root password on Domain joined Esxi using vSphere web client and Powercli with few AD changes (group creation), Next thing was on the remaining server where servers are not in domain, there is second way to reset Esxi root password using vCenter host profiles (only the condition is Esxi server must be added to Vmware vCenter server (POWERCLI - CREATE DATACENTER AND ADD ESXI HOST IN VCENTER).

VMware Host Profiles accessible through VMware vCenter Server, it is kind of ESXi template, permits you to create typical configurations for VMware ESXi hosts and to automate compliance to these configurations, streamlining functioning management of across-the-board environments and dropping faults produced by mis-configurations.

To open host profile view on the VMware vSphere Web Client, click home icon, In the Operations and Policies choose Host Profiles.

Vmware vsphere vcenter web client, esxi, reset password, using vcenter, Host profiles configuration, forgot root password

My very first task is to create a standard profile from existing host. In the Host Profiles, On the right side, objects tab, click green + plus button - Extract profile from a host. In the Select Host, Click any of one esxi host. Go to next button.

vmware vsphere esxi client, vcenter server, host profiles, select host, extract profile from a host, reset esxi root password from vcenter, web client, configure forgotten esxi password

On the Name and Description wizard, Enter the meaningful name and description (optional) for the profile, on the last page Ready to complete page review settings and finish wizard.

You can list the newly created Reset_Root_Password ESXi under host profiles, right click on it and go to Edit Settings. On the Edit host profile page wizard, uncheck all the checkboxes on the options and only keep the check box on Security and Services \ Security Settings \ Security \ User Configuration \ root. Here on the Password section from drop down menu choose Fixed password configuration and type your password twice, finish the wizard.

vmware vsphere web client, reset esxi root password, edit host profiles, Security and services, User configuration, Fix password configuration password

Here again right click on the Reset_Root_Password host profile, click Attach/Detach Hosts and Clusters, In the Select Host/Clusters, choose cluster or ESXi server in the list, and hit Attach button and you will see the corresponding entity is moved from left to right. There are no configurable item on the Customize hosts, leave it unchecked and it says none of the hosts require additional customizations.

Vmware vsphere web client, reset esxi root password using vcenter, host profiles, Attach detach hosts and clusters, select esxi host, customize host

You can use same actions and wizard by selecting ESXi host or cluster, right click server, from the context menu select Host profiles and you will see same related menu. From Host and clusters view I will remediate esxi server.

vmware vsphere web client esxi, vcenter, host profiles, host and clusters view, extract host profile, attach, remedite, change, detach, check compliance, reset host customizations, export host profile

Another wizard launches and here esxi host is already selected for remediate, Review the remediation tasks that will be executed on the hosts below once the wizard is complete. To see if the selected hosts are ready for remediation and how it will affect them use "Pre-check Remediation". The operation might take more than a minute. After clicking the button State/Tasks from Not checked to Green icon with Ready to remediate. 

vmware vsphere web client, remediate hosts based on host profile, select hosts, esxi, and cluster

When tested One thing to be note, This task reseting root password, doesn't require reboot or host need to be put into maintenance mode.

Rebooting Hosts: Some hosts might require a reboot to complete the remediation process. If you wish to manually reboot hosts at the end of the process deselect the checkbox.

vmware vsphere web client, esxi, vcenter, remediate hosts based on host profile, pre-check remediation, reset root password, ready to remediate host profile

Once you apply host configurations, Pre-check Remediation all the task are listed in the recent tasks and can be viewed, they are successfully applied with no error and without reboot. To verify I used putty to SSH to view if new reseted password is working. VMWARE SECURITY BEST PRACTICES: POWERCLI ENABLE OR DISABLE ESXI SSH

vmware vsphere web client, recent tasks, batch apply host configuration, pre-check remeditation, check host customization status, host profiles esxi, vcenter, test and confirm reset root password with ssh.png

Useful Articles
INSTALLING AND CONFIGURING ESXI EMBEDDED WEB CLIENT
ESXI VIB SOFTWARE INSTALLATION ERROR
ESXI 6.5 UPGRADE INSTALLATION AND UI HTML WEB CLIENT

Powershell Active Directory: Show treeview of nested Group members downstream hierarchy

January 3, 2018 01:29PM

This script is second part of my earlier article Powershell Active Directory: Show treeview of User or Group memberof hierarchy, earlier was showing upstream tree view of nested MemberOf groups. After writing the first script I got another requirement to show treeview in reverse order, Group members hierarchy in downstream order from Members tab. To write this script I have made very few changes to my earlier script.

Active directory domain controller, powershell, dsa.msc, users and computers, members tab, fetch group, ad group

To use it use cmdlet .\Show-ADGroupTreeViewMembers -GroupName Administrators. This only accept GroupName parameter, It shows only groups in tree, It will not show Users as there could be hundred to thousand user account in the branches as it will make little hard if you want to troubleshoot nested group permissions.

Related articles
Different ways to bypass Powershell execution policy :.ps1 cannot be loaded because running scripts is disabled
POWERSHELL: INSTALLING AND CONFIGURING ACTIVE DIRECTORY

Microsoft windows powershell, active directory domain controller, module, get-adgroup, get-aduser, get-adgroupmember, members, memberof, select-object, where-object, show-adgrouptreeviewmembers,.png

This script can be downloaded from GitHub as well as from here.

 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
#
function Show-ADGroupTreeViewMembers {
#requires -version 4
<#
.SYNOPSIS
    Show DownStream tree view hierarchy of members groups recursively of a Active Directory Group.
.DESCRIPTION
    The Show-ADGroupTreeViewMembers list all nested group list of a AD user. It requires only valid parameter AD username, 
.PARAMETER GroupName
    Prompts you valid active directory Group name. You can use first character as an alias, If information is not provided it provides 'Domain Admins' group information.
.INPUTS
    Microsoft.ActiveDirectory.Management.ADGroup
.OUTPUTS
    Microsoft.ActiveDirectory.Management.ADGroup
    Microsoft.ActiveDirectory.Management.ADuser
.NOTES
    Version:        2.0
    Author:         Kunal Udapi
    Creation Date:  10 September 2017
    Purpose/Change: Get the nested downstream group info of member
    Useful URLs: http://vcloud-lab.com
.EXAMPLE
    PS C:\>.\Show-ADGroupTreeViewMembers -GroupName 'Administrators'

    This list all the upstream memberof group of a Group.
#>

[CmdletBinding(SupportsShouldProcess=$True,
    ConfirmImpact='Medium',
    HelpURI='http://vcloud-lab.com')]
Param
(
    [parameter(Position=0, ValueFromPipelineByPropertyName=$true, ValueFromPipeline=$true, HelpMessage='Type valid AD Group')]
    [alias('Group')]
    [String]$GroupName = 'Domain Admins',
    [parameter(DontShow=$True)]
    [alias('U')]
    $UpperValue = [System.Int32]::MaxValue,
    [parameter(DontShow=$True)]
    [alias('L')]
    $LowerValue = 2
)
    begin {
        if (!(Get-Module Activedirectory)) {
            try {
                Import-Module ActiveDirectory -ErrorAction Stop 
            }
            catch {
                Write-Host -Object "ActiveDirectory Module didn't find, Please install it and try again" -BackgroundColor DarkRed
                Break
            }
        }
        try {
            $Group =  Get-ADGroup $GroupName -Properties members -ErrorAction Stop 
            $Members = $Group | Select-Object -ExpandProperty members 
            $rootname = $Group.Name
        }
        catch {
            Write-Host -Object "`'$GroupName`' groupname doesn't exist in Active Directory, Please try again." -BackgroundColor DarkRed
            $result = 'Break'
            Break
        }
    }
    Process {
        $Minus = $LowerValue - 2
        $Spaces = " " * $Minus
        $Lines = "__"
        "{0}{1}{2}{3}" -f $Spaces, '|', $Lines, $rootname        
        $LowerValue++
        $LowerValue++
        if ($LowerValue -le $UpperValue) {
            foreach ($member in $Members) {
                try {
                    $UpperGroup = Get-ADGroup $member -Properties Members, Memberof -ErrorAction Stop
                }
                catch {
                    Continue
                }
                #$LowerGroup = $UpperGroup |
                $LowerGroup = $UpperGroup | Get-ADGroupMember
                $LoopCheck = $UpperGroup.memberof | ForEach-Object {$_ -contains $lowerGroup.distinguishedName}
                if ($LoopCheck -Contains $True) {
                    $rootname = $UpperGroup.Name
                    Write-Host "Loop found on $($UpperGroup.Name), Skipping..." -BackgroundColor DarkRed
                    Continue
                }
                #"xxx $($LowerGroup.name)"
                #$Member
                #"--- $($UpperGroup.Name) `n"
                Show-ADGroupTreeViewMembers -GroupName $member -LowerValue $LowerValue -UpperValue $UpperValue
            } #foreach ($member in $MemberOf) {
        }
    } #Process
}

  Show-ADGroupTreeViewMembers -GroupName Administrators

Useful Articles
Powershell one liner: Create multiple user accounts
Active Directory Powershell: Create bulk users from CSV file
Active Directory Powershell: Aduser A value for the attribute was not in the acceptable range of values
Powershell Active Directory: ADGroup Managedby - Checkbox Manager can update membership list

Strong Random Password Generator :Microsoft Powershell

January 2, 2018 03:57PM

This is my first article in the starting of year 2018, I have taken and re-written it from my earlier post. This script is written completely from scratch. This generates very strong random password. It randomize a chooses each password character using .net class object System.Security.Cryptography.RNGCryptoServiceProvider, which I have explained in Microsoft Powershell generate random anything (Filename, TempPath, GUID, Password)

Keeping Password unique and randomized is one of the best practices for accounts or services and one of my team required script for same purpose.

Password is used from in built table using capital and small letters, symbols and numbers. This table is in Json table and coded in the script with Phonetic and type information. random character is used using for loop and get-random with combination of RNG. Copy paste the code in ps1 file, once executed, it shows 12 length unique password, and the corresponding table with the password character phonetics.

You can select your own character length with parameter as below. You can see the password below table, It can be easily copy paste.
.\New-RandomPassword.ps1 -PasswordLength 15

Windows Microsoft Password, Get-Random, password generator, Cryptography.RNGCryptoServiceProvider, select object, hashtable, json, select-object, new password, strong, variable

In the next example, you might require password of your choice with own length count for each letter, symbol and number. If you don't use any of one of the parameter the length is counted as zero and those characters are excluded in the random password.
.\New-RandomPassword.ps1 -CapitalLetter 2 -SmallLetter 3 -Symbol 2 -Number 2

Windows Microsoft Password, Get-Random, password generator, Cryptography.RNGCryptoServiceProvider, select-object, hashtable, json, foreach, sort-object, select-object, out-string,new password, strong, variable.png

download files powershell scripts repository vcloud-lab.com  Download New-RandomPassword.ps1. This Script is also available on Github.

  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
#requires -version 4
<#
.SYNOPSIS
    This script Generates a random strong password.
.DESCRIPTION
    The New-RandomPassword generates a random strong password from mix of capital letters, small letters, symbols (Special Characters) and numbers, All the parameter only accept numeric values.
.PARAMETER PasswordLength
    PasswordLength parameter prompts for password length, If this parameter is not defined by default it creates 12 digit mix characters. This parameter cannot be used with other SmallLetter, Capitalletter, Symbol and Number.
.PARAMETER SmallLetter
    This syntax is optional and cannot be used with PasswordLength. If you use, for example 5 value, Password will include 5 random small letter characters (a-z) in the password.
.PARAMETER CapitalLetter
    This syntax is optional and cannot be used with PasswordLength. If you use for example 5 value, you will find 5 random capital letters (A-Z) in the password.
.PARAMETER Number
    By Default value is 0, and do not require to mention, If you use for example 2 value for this syntax, you will find 2 random numbers (0-9) in the password.
.PARAMETER Symbol
    By Default value is 0, and do not require to mention, If you use for example 2 value for this syntax, you will find 2 random numbers (! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ { | } ~) in the password.
.INPUTS
    [System.int]
.OUTPUTS
    [System.String]
    [System.Management.Automation.PSCustomObject]
.NOTES
    Script Version:        2.0
    Author:                Kunal Udapi
    Creation Date:         20 September 2017
    Purpose/Change:        Get windows office and OS licensing information.
    Useful URLs:           http://kunaludapi.blogspot.in/2013/11/generate-random-password-powershell.html
                           http://vcloud-lab.com/entries/powershell/microsoft-powershell-generate-random-anything-filename--temppath--guid--password-
    OS Version:            Windows 8.1
    Powershell Version:    Powershell V5.1 Desktop
.EXAMPLE
    PS C:\>.\New-RandomPassword.ps1

    It generated strong random 12 digit password with defination Character, Phonetic and character type
.EXAMPLE
    PS C:\>.\New-RandomPassword.ps1 -PasswordLength 6
    
    Character Phonetic        Type          
    --------- --------        ----          
    3         Three           Number        
    [         Opening bracket Symbol        
    6         Six             Number        
    4         Four            Number        
    w         Whiskey         Small Letter  
    D         Delta           Capital Letter


    3[64wD

    With the parameter passwordLength, it generates 6 digit random password as shown results.
.EXAMPLE
    PS C:\>.\New-RandomPassword.ps1 -SmallLetter 4 -CapitalLetter 4 -Number 2 -Symbol 2

    As per syntax and provided value, there will be 4 small letters, 4 capital letter , 2 numbers and 2 symbols special characters in the newly generated password.
#>

[CmdletBinding(SupportsShouldProcess=$True,
ConfirmImpact='Medium',
HelpURI='http://vcloud-lab.com',
DefaultParameterSetName='Default')]
Param (
    [parameter(ParameterSetName = 'Default', Position=0, Mandatory=$false, ValueFromPipelineByPropertyName=$True, ValueFromPipeline=$True)]
    [alias('length')]
    [int]$PasswordLength = 12,

    [parameter(ParameterSetName = 'Option', Position=0, ValueFromPipelineByPropertyName=$true)]
    [alias('LowerCase','Small')]
    [int]$SmallLetter = 0,
    [parameter(ParameterSetName = 'Option', Position=1, ValueFromPipelineByPropertyName=$true)]
    [alias('UpperCase','Capital')]
    [int]$CapitalLetter = 0,
    [parameter(ParameterSetName = 'Option', Position=2, ValueFromPipelineByPropertyName=$true)]
    [int]$Number = 0,
    [parameter(ParameterSetName = 'Option', Position=3, ValueFromPipelineByPropertyName=$true)]
    [alias('SpecialLetter')]
    [int]$Symbol = 0
)
Begin {    
    $RandomOption = @()
    $CompletePassword = @()
        
    $CompleteSmallPassword = @()
    $CompleteCapitalPassword = @()
    $CompleteSymbolPassword = @()
    $CompleteNumberPassword = @()
    #table
    $JSon = @"
    [
        {"SrNo":  "1","Number":  "33","Character":  "!","Phonetic":  "Exclamation point","Type":  "Symbol"},
        {"SrNo":  "2","Number":  "34","Character":  "\"","Phonetic":  "Double quotes","Type":  "Symbol"},
        {"SrNo":  "3","Number":  "35","Character":  "#","Phonetic":  "Hash sign","Type":  "Symbol"},
        {"SrNo":  "4","Number":  "36","Character":  "$","Phonetic":  "Dollar sign","Type":  "Symbol"},
        {"SrNo":  "5","Number":  "37","Character":  "%","Phonetic":  "Percent sign","Type":  "Symbol"},
        {"SrNo":  "6","Number":  "38","Character":  "&","Phonetic":  "Ampersand","Type":  "Symbol"},
        {"SrNo":  "7","Number":  "39","Character":  "'","Phonetic":  "Single quote","Type":  "Symbol"},
        {"SrNo":  "8","Number":  "40","Character":  "(","Phonetic":  "Opening parenthesis","Type":  "Symbol"},
        {"SrNo":  "9","Number":  "41","Character":  ")","Phonetic":  "Closing parenthesis","Type":  "Symbol"},
        {"SrNo":  "10","Number":  "42","Character":  "*","Phonetic":  "Asterisk","Type":  "Symbol"},
        {"SrNo":  "11","Number":  "43","Character":  "+","Phonetic":  "Plus sign","Type":  "Symbol"},
        {"SrNo":  "12","Number":  "44","Character":  ",","Phonetic":  "Comma","Type":  "Symbol"},
        {"SrNo":  "13","Number":  "45","Character":  "-","Phonetic":  "Minus sign -Hyphen","Type":  "Symbol"},
        {"SrNo":  "14","Number":  "46","Character":  ".","Phonetic":  "Period","Type":  "Symbol"},
        {"SrNo":  "15","Number":  "47","Character":  "/","Phonetic":  "Slash","Type":  "Symbol"},
        {"SrNo":  "16","Number":  "58","Character":  ":","Phonetic":  "Colon","Type":  "Symbol"},
        {"SrNo":  "17","Number":  "59","Character":  ";","Phonetic":  "SemiColon","Type":  "Symbol"},
        {"SrNo":  "18","Number":  "60","Character":  "<","Phonetic":  "Less than sign","Type":  "Symbol"},
        {"SrNo":  "19","Number":  "61","Character":  "=","Phonetic":  "Equal sign","Type":  "Symbol"},
        {"SrNo":  "20","Number":  "62","Character":  ">","Phonetic":  "Greater than sign","Type":  "Symbol"},
        {"SrNo":  "21","Number":  "63","Character":  "?","Phonetic":  "Question mark","Type":  "Symbol"},
        {"SrNo":  "22","Number":  "64","Character":  "@","Phonetic":  "At symbol","Type":  "Symbol"},
        {"SrNo":  "23","Number":  "91","Character":  "[","Phonetic":  "Opening bracket","Type":  "Symbol"},
        {"SrNo":  "24","Number":  "92","Character":  "\\","Phonetic":  "Backslash","Type":  "Symbol"},
        {"SrNo":  "25","Number":  "93","Character":  "]","Phonetic":  "Closing bracket","Type":  "Symbol"},
        {"SrNo":  "26","Number":  "94","Character":  "^","Phonetic":  "Caret - circumflex","Type":  "Symbol"},
        {"SrNo":  "27","Number":  "95","Character":  "_","Phonetic":  "Underscore","Type":  "Symbol"},
        {"SrNo":  "29","Number":  "123","Character":  "{","Phonetic":  "Opening brace","Type":  "Symbol"},
        {"SrNo":  "30","Number":  "124","Character":  "|","Phonetic":  "Vertical bar","Type":  "Symbol"},
        {"SrNo":  "31","Number":  "125","Character":  "}","Phonetic":  "Closing brace","Type":  "Symbol"},
        {"SrNo":  "32","Number":  "126","Character":  "~","Phonetic":  "Equivalency sign - Tilde","Type":  "Symbol"},
        {"SrNo":  "33","Number":  "65","Character":  "A","Phonetic":  "Alpha ","Type":  "Capital Letter"},
        {"SrNo":  "34","Number":  "66","Character":  "B","Phonetic":  "Bravo ","Type":  "Capital Letter"},
        {"SrNo":  "35","Number":  "67","Character":  "C","Phonetic":  "Charlie ","Type":  "Capital Letter"},
        {"SrNo":  "36","Number":  "68","Character":  "D","Phonetic":  "Delta ","Type":  "Capital Letter"},
        {"SrNo":  "37","Number":  "69","Character":  "E","Phonetic":  "Echo ","Type":  "Capital Letter"},
        {"SrNo":  "38","Number":  "70","Character":  "F","Phonetic":  "Foxtrot ","Type":  "Capital Letter"},
        {"SrNo":  "39","Number":  "71","Character":  "G","Phonetic":  "Golf ","Type":  "Capital Letter"},
        {"SrNo":  "40","Number":  "72","Character":  "H","Phonetic":  "Hotel ","Type":  "Capital Letter"},
        {"SrNo":  "41","Number":  "73","Character":  "I","Phonetic":  "India ","Type":  "Capital Letter"},
        {"SrNo":  "42","Number":  "74","Character":  "J","Phonetic":  "Juliet ","Type":  "Capital Letter"},
        {"SrNo":  "43","Number":  "75","Character":  "K","Phonetic":  "Kilo ","Type":  "Capital Letter"},
        {"SrNo":  "44","Number":  "76","Character":  "L","Phonetic":  "Lima ","Type":  "Capital Letter"},
        {"SrNo":  "45","Number":  "77","Character":  "M","Phonetic":  "Mike ","Type":  "Capital Letter"},
        {"SrNo":  "46","Number":  "78","Character":  "N","Phonetic":  "November ","Type":  "Capital Letter"},
        {"SrNo":  "47","Number":  "79","Character":  "O","Phonetic":  "Oscar ","Type":  "Capital Letter"},
        {"SrNo":  "48","Number":  "80","Character":  "P","Phonetic":  "Papa ","Type":  "Capital Letter"},
        {"SrNo":  "49","Number":  "81","Character":  "Q","Phonetic":  "Quebec ","Type":  "Capital Letter"},
        {"SrNo":  "50","Number":  "82","Character":  "R","Phonetic":  "Romeo ","Type":  "Capital Letter"},
        {"SrNo":  "51","Number":  "83","Character":  "S","Phonetic":  "Sierra ","Type":  "Capital Letter"},
        {"SrNo":  "52","Number":  "84","Character":  "T","Phonetic":  "Tango ","Type":  "Capital Letter"},
        {"SrNo":  "53","Number":  "85","Character":  "U","Phonetic":  "Uniform ","Type":  "Capital Letter"},
        {"SrNo":  "54","Number":  "86","Character":  "V","Phonetic":  "Victor ","Type":  "Capital Letter"},
        {"SrNo":  "55","Number":  "87","Character":  "W","Phonetic":  "Whiskey ","Type":  "Capital Letter"},
        {"SrNo":  "56","Number":  "88","Character":  "X","Phonetic":  "X-Ray ","Type":  "Capital Letter"},
        {"SrNo":  "57","Number":  "89","Character":  "Y","Phonetic":  "Yankee ","Type":  "Capital Letter"},
        {"SrNo":  "58","Number":  "90","Character":  "Z","Phonetic":  "Zulu ","Type":  "Capital Letter"},
        {"SrNo":  "59","Number":  "97","Character":  "a","Phonetic":  "Alpha ","Type":  "Small Letter"},
        {"SrNo":  "60","Number":  "98","Character":  "b","Phonetic":  "Bravo ","Type":  "Small Letter"},
        {"SrNo":  "61","Number":  "99","Character":  "c","Phonetic":  "Charlie ","Type":  "Small Letter"},
        {"SrNo":  "62","Number":  "100","Character":  "d","Phonetic":  "Delta ","Type":  "Small Letter"},
        {"SrNo":  "63","Number":  "101","Character":  "e","Phonetic":  "Echo ","Type":  "Small Letter"},
        {"SrNo":  "64","Number":  "102","Character":  "f","Phonetic":  "Foxtrot ","Type":  "Small Letter"},
        {"SrNo":  "65","Number":  "103","Character":  "g","Phonetic":  "Golf ","Type":  "Small Letter"},
        {"SrNo":  "66","Number":  "104","Character":  "h","Phonetic":  "Hotel ","Type":  "Small Letter"},
        {"SrNo":  "67","Number":  "105","Character":  "i","Phonetic":  "India ","Type":  "Small Letter"},
        {"SrNo":  "68","Number":  "106","Character":  "j","Phonetic":  "Juliet ","Type":  "Small Letter"},
        {"SrNo":  "69","Number":  "107","Character":  "k","Phonetic":  "Kilo ","Type":  "Small Letter"},
        {"SrNo":  "70","Number":  "108","Character":  "l","Phonetic":  "Lima ","Type":  "Small Letter"},
        {"SrNo":  "71","Number":  "109","Character":  "m","Phonetic":  "Mike ","Type":  "Small Letter"},
        {"SrNo":  "72","Number":  "110","Character":  "n","Phonetic":  "November ","Type":  "Small Letter"},
        {"SrNo":  "73","Number":  "111","Character":  "o","Phonetic":  "Oscar ","Type":  "Small Letter"},
        {"SrNo":  "74","Number":  "112","Character":  "p","Phonetic":  "Papa ","Type":  "Small Letter"},
        {"SrNo":  "75","Number":  "113","Character":  "q","Phonetic":  "Quebec ","Type":  "Small Letter"},
        {"SrNo":  "76","Number":  "114","Character":  "r","Phonetic":  "Romeo ","Type":  "Small Letter"},
        {"SrNo":  "77","Number":  "115","Character":  "s","Phonetic":  "Sierra ","Type":  "Small Letter"},
        {"SrNo":  "78","Number":  "116","Character":  "t","Phonetic":  "Tango ","Type":  "Small Letter"},
        {"SrNo":  "79","Number":  "117","Character":  "u","Phonetic":  "Uniform ","Type":  "Small Letter"},
        {"SrNo":  "80","Number":  "118","Character":  "v","Phonetic":  "Victor ","Type":  "Small Letter"},
        {"SrNo":  "81","Number":  "119","Character":  "w","Phonetic":  "Whiskey ","Type":  "Small Letter"},
        {"SrNo":  "82","Number":  "120","Character":  "x","Phonetic":  "X-Ray ","Type":  "Small Letter"},
        {"SrNo":  "83","Number":  "121","Character":  "y","Phonetic":  "Yankee ","Type":  "Small Letter"},
        {"SrNo":  "84","Number":  "122","Character":  "z","Phonetic":  "Zulu ","Type":  "Small Letter"},
        {"SrNo":  "85","Number":  "48","Character":  "0","Phonetic":  "Zero","Type":  "Number"},
        {"SrNo":  "86","Number":  "49","Character":  "1","Phonetic":  "One","Type":  "Number"},
        {"SrNo":  "87","Number":  "50","Character":  "2","Phonetic":  "Two","Type":  "Number"},
        {"SrNo":  "88","Number":  "51","Character":  "3","Phonetic":  "Three","Type":  "Number"},
        {"SrNo":  "89","Number":  "52","Character":  "4","Phonetic":  "Four","Type":  "Number"},
        {"SrNo":  "90","Number":  "53","Character":  "5","Phonetic":  "Five","Type":  "Number"},
        {"SrNo":  "91","Number":  "54","Character":  "6","Phonetic":  "Six","Type":  "Number"},
        {"SrNo":  "92","Number":  "55","Character":  "7","Phonetic":  "Seven","Type":  "Number"},
        {"SrNo":  "93","Number":  "56","Character":  "8","Phonetic":  "Eight","Type":  "Number"},
        {"SrNo":  "94","Number":  "57","Character":  "9","Phonetic":  "Nine","Type":  "Number"}
    ]
"@
    #Excluded Characters
    #{"SrNo":  "28","Number":  "96","Character":  "`","Phonetic":  "Grave accent","Type":  "Symbol"},

    #System.Security.Cryptography.RNGCryptoServiceProvider
    function Get-Rng {
        $RandomBytes = New-Object -TypeName "System.Byte[]" 4
        $Random = New-Object -TypeName "System.Security.Cryptography.RNGCryptoServiceProvider"
        $Random.GetBytes($RandomBytes)
        [BitConverter]::ToInt32($RandomBytes, 0)
    } #function Get-Rng
} #Begin
Process {    
    #tables
    $AlphbatesTable = $JSon | ConvertFrom-Json
    $SymbolTable = $AlphbatesTable | Where-Object {$_.Type -eq 'Symbol'}
    $CapitalLetterTable = $AlphbatesTable | Where-Object {$_.Type -eq 'Capital Letter'}
    $SmallLetterTable = $AlphbatesTable | Where-Object {$_.Type -eq 'Small Letter'}
    $NumberTable = $AlphbatesTable | Where-Object {$_.Type -eq 'Number'}
        
    switch ($PsCmdlet.ParameterSetName) {
        'Default' {
            for ($i = 1; $i -le $PasswordLength; $i++) {
                $DefaultUniqueNumber = Get-Rng
                $PasswordHash = Get-Random -InputObject $AlphbatesTable -SetSeed $DefaultUniqueNumber
                $CompletePassword += $PasswordHash
            } #for ($i = 1; $i -le $PasswordLength; $i++)
        } #'Default'
        'Option' {
            if ($SmallLetter -ne 0) {
                for ($sm = 1; $sm -le $SmallLetter; $sm++) {
                    $SmallUniqueNumber = Get-Rng
                    $CompleteSmallPassword += Get-Random -InputObject $SmallLetterTable -SetSeed $SmallUniqueNumber
                } #for ($sm = 1; $sm -le $SmallLetter; $sm++)
            } #if ($SmallLetter -ne 0)
                
            if ($CapitalLetter -ne 0) {
                for ($c = 1; $c -le $CapitalLetter; $c++) {
                    $CapitalUniqueNumber = Get-Rng
                    $CompleteCapitalPassword += Get-Random -InputObject $CapitalLetterTable -SetSeed $CapitalUniqueNumber
                } #for ($s = 1; $s -le $CapitalLetter; $s++)
            } #if ($CapitalLetter -ne 0)

            if ($Number -ne 0) {
                for ($N = 1; $N -le $Number; $N++) {
                    $NumberUniqueNumber = Get-Rng
                    $CompleteNumberPassword += Get-Random -InputObject $NumberTable -SetSeed $NumberUniqueNumber
                } #for ($s = 1; $s -le $Number; $s++)
            } #if ($Number -ne 0)

            if ($Symbol -ne 0) {
                for ($sy = 1; $sy -le $Symbol; $sy++) {
                    $SymbolUniqueNumber = Get-Rng
                    $CompleteSymbolPassword += Get-Random -InputObject $SymbolTable -SetSeed $SymbolUniqueNumber
                } #for ($sy = 1; $sy -le $Symbol; $sy++)
            } #if ($Symbol -ne 0)
                
            $RandomOption += $CompleteSmallPassword 
            $RandomOption += $CompleteCapitalPassword 
            $RandomOption += $CompleteNumberPassword
            $RandomOption += $CompleteSymbolPassword
            #$CompletePassword = $RandomOption | Sort-Object {Get-Random (Get-Rng)}
            $CompletePassword = $RandomOption | Select-Object *, @{N='Sort'; E={1..500 | Get-Random (Get-Rng)}} | Sort-Object -Property Sort
        } #'Option'
    } #switch ($PsCmdlet.ParameterSetName)

} #Process
End {
    $FinalPassword = $CompletePassword.Character -Join ""
    $Info = $CompletePassword | Select-Object Character, Phonetic, Type
    Write-Host ($Info | Out-String) -ForegroundColor Yellow -NoNewline
    $FinalPassword
} #End

Useful Articles
Different ways to bypass Powershell execution policy :.ps1 cannot be loaded because running scripts is disabled
Powershell Trick : Execute or run any file as a script file
Set Powershell execution policy with Group Policy
Powershell execution policy setting is overridden by a policy defined at a more specific scope

Powershell execution policy setting is overridden by a policy defined at a more specific scope

December 31, 2017 01:38AM

While setting up execution policy (Set-ExecutionPolicy) on powershell, there might be a below error.

Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope.  Due to the override, your shell will retain its current effective execution policy of Unrestricted. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more
information please see "Get-Help Set-ExecutionPolicy".
At line:1 char:1
+ Set-ExecutionPolicy Restricted
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
    + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

Microsoft powershell get-executionpolicy, set-executionpolicy, overridden a policy, group policy, list of execution policy, restricted, unrestricted

This error appears due to below 2 reasons.
1) If different execution policy is setup at execution Scope level (Process, CurrentUser or LocalMachine) using cmdlet Set-ExecutionPolicy, as shown in Different ways to bypass Powershell execution policy :.ps1 cannot be loaded because running scripts is disabled. MachinePolicy and UserPolicy can only be changed and setup using Group policy as shown in 2nd point.
2) Setup Powershell execution policy with Group Policy

To resolve this issue, change the manual execution scope of Process, CurrentUser or LocalMachine to undefinedUndefined means there is no execution policy set in the current scope. If the execution policy in all scopes is Undefined, the effective execution policy is Restricted, which is the default execution policy. Running only Set-ExecutionPolicy without scope syntax changes LocalMachine by default and if tried to modify it, it will always generate error if Group policy is setup.

Current scope list can be viewed using command Get-ExecutionPolicy -List and changing the policy doesn't show error Set-ExecutionPolicy Undefined  -Scope CurrentUser.

If all scope policies are set to undefined (except LocalMachine), changing configuration will not show any error.

Microsoft powershell, get-executionpolicy -list, set-executionpolicy undefined currentuser, machine policy userpolicy, process, localmachine

Useful Articles
Powershell Trick : Execute or run any file as a script file
Installing, importing and using any module in powershell
How to Install and Use Microsoft PowerShell on Linux

The top 10 reasons to upgrade to VMware vSphere 6.5

December 29, 2017 04:18PM

1. Reorganize Administration and Management with a New and modern HTML5-Based User Interface 
Administer and manage the virtual data center with the responsive, easy-to-use new HTML5-based vSphere client interface. Although I am still big fan of vsphere client, As new versions of vsphere will be keep coming in near future you might see, desktop installable c# vsphere client is completely discontinued or phased out and it may no longer available. It is best you start administrate vmware environment using vsphere web client. Also new features are only available and can be configured through vmware vsphere web client. For example, SSO or VSAN. (When changing or going to "VMware on Aws" you will find it can be only managed using HTML5 based user interface)

ESXI 6.5 UPGRADE INSTALLATION AND UI HTML WEB CLIENT

vsphere client html5 based user interface, web client

2. Shrink IT Operational Difficulty with vCenter Server Appliance 
The re-imagined VMware vCenter® Server Appliance™ delivers up to 2–3x better performance and scale, built-in vCenter (HA) High Availability, file-based backup and recovery, and unified vSphere host administration, management and patching, Update manager is in built with appliance, ready to run in production. Best part is you can save windows licenses and don't need to mange windows server if you have only Linux expertise. 

Deploy install VCSA (vCenter server appliance 6.5) on VMWare Workstation

vmware vsphere vcenter appliance, linux deploy appliance, platform services controller, deployment

3. Improved Forensic Insights with Audit-Quality Recording enhanced Logging 
Collect insights about user better activities so that IT teams can comprehend who did what, when, and where in the incident of a security threat or irregularity. Check task and event information to view complete information. As below screenshot I can clearly determine and audit exactly what changes has been done by whom. This is very good from troubleshooting issues perspective.

vmware vsphere vcenter 6.5 esxi, enhanced logging, tasks and events, monitor log who changed what

4. Protect the Data Center Organization with Secure Boot 
Guard both the hypervisor and the guest operating system from interfering by authorizing code with a digital signature, safeguarding that only reliable OS software will run. It relies on the UEFI specification's secure boot functionality to help avert malicious software applications and unauthorized operating systems from loading during the system start-up process.

vmware vsphere esxi, virtual machine edit settings vm secure boot, efi, uefi, boot firmware, efi setup boot delay, failed boot recovery, uefi setup.png

5. Diminish Threat with VM-Level Encryption 
Policy-driven vSphere encryption protections data information—together at rest and in motion—at scale transversely the enterprise data center. Encryption will be done in the hypervisor, underneath the virtual machine. As I/O originates out of the virtual disk controller in the VM it is directly encrypted by a module in the kernel beforehand being send to the kernel storage layer. Both VM Home files (VMX, snapshot, etc) and VMDK files are encrypted.

6. Maximize Data Center Resources with Predictive Distributed Load Balancing (DRS)
Predictive DRS leverages system usage patterns and analytics to help maximize IT resources and reduce CapEx. The newest approach is the Predictive Method, currently offered only through VMware‘s new Predictive DRS option. Predictive DRS using a mixture of DRS and vRealize Operations Manager to predict upcoming request and regulate when and where hot spots will happen.  When forthcoming hot spots are found, Predictive DRS moves the workloads long before any contention can happen. Even better, this means with the Predictive Process only the obligatory workloads are migrated, resulting in minimal overhead.

7. Avert Downtime with Proactive High Availability 
Proactive HA anticipates hardware catastrophes earlier they arise and preventively vMotions workloads before complications occur. vSphere 6.5 High Availability (HA) senses the hardware situation of the ESXi host and allow you to migrate the VMs before the hardware issues cause an outage to VMs. Proactive HA works in mixture with hardware vendors monitoring solutions to obtain the fitness status of the hardware mechanisms such as HDD, fan, memory or SMPS. You can arrange vSphere HA to reply according to the failure of hardware components. 

vmware vsphere esxi vcenter, vsphere availibility turn on proactive HA with DRS, host failure, high availibility, Host isolation, heartbeating

8. Advance IT Compliance with Host Profile Management 
Streamlined and scalable host profile management allows better compliance with the policies and processes put in place by IT. Host Profiles works by encapsulating a reference host configuration and spinning it into a profile, or template, upon which other hosts or clusters of hosts can be configured. 

9. Get-up-and-go IT Automation and Business Nimbleness with APIs 
Simple, REST-based APIs makes it easy to automate processes for a more responsive, modern data center. A cluster of service APIs that let you deploy facility structures in your vSphere environment. Language bindings are available for Java, .NET, Python, Perl, REST, and Ruby.

vmware vsphere vcenter server esxi, api explorer, rest api

10. Revolutionize the Data Center with vSphere Combined Containers 
Run readiness containers side by side with virtual machines in an existing vSphere environment with no tooling or procedure modifications. Supporting containers in their virtualized environments provides a number of benefits: IT teams get the security, isolation and management of VMs, while developers enjoy the speed and agility of containers - all within vSphere.

View older posts »