Thursday, July 27, 2017

Force replication to all Windows Domain Controllers using powershell

Import-Module ActiveDirectory
$DCs = (Get-ADForest).Domains | %Get-ADDomainController -Filter * -Server $_ } | select HostName
foreach ($DC in $DCs)    {        repadmin /syncall $DC.HostName    }
Hope it helps!

Reset UCS KVM

Resetting Cisco UCS KVM


From experience, it’s not uncommon to not be able to connect to the KVM of a cisco ucs blade.   Instead of seeing a Remote console screen, you’ll receive a “Connect failed” or “Request Shared Session” message, with no means of getting to the console.
Within the Service Profile, click on the Server Details tab. From there, click on Recover Server. Select “Reset CIMC (Server Controller)”.  Choose Reset KVM Controller.  This will kill existing KVM sessions and allow you to start a new session. Resetting the CIMC does not affect data traffic to/from the server NICs (ethernet and HBAs).
Another thing to check in Servers tab, General tab is the Management IP Address setting.  If it’s configured to take an address from a pool, check the pool in the Admin tab, Management IP Pool, IP Addresses tab to see what IP’s exist in the range, and whats been assigned.
If a reset hasn’t worked, In the Servers tab, General tab, Management IP Address section, change the IP address from Pooled to Static.  Use an IP address from the other end of the range in the pool.  Click Save Changes, and try connecting to the KVM again

Wednesday, July 26, 2017

Learn Python and PowerShell

Learned via web development 

**Code school** to learn coding 

Classes

https://www.udemy.com/

free, automated, and openCertificate Authority

Secure tunnels to localhost

Secure tunnels to localhost


Demo without deploying
Don’t constantly redeploy your in-progress work to get feedback from clients. ngrok creates a secure public URL (https://yourapp.ngrok.io) to a local webserver on your machine. Iterate quickly with immediate feedback without interrupting flow.

Simplify mobile device testing

Test mobile apps against a development backend running on your machine. Point ngrok at your local dev server and then configure your app to use the ngrok URL. It won't change, even when you change networks. 

Thursday, July 20, 2017

Windows BSOD troubleshooting

Pull the memory.dmp file from c:\windows
Then loaded it in windbg

Set my symbols path as this below and create a c:\symbols directory
SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

You can get even more details if you pull the symbols for VMware or whatever manufacturer’s files show up in the debug file. In the past I’ve had to pull Citrix symbols too.
It’s the only REAL way to dig into BSOD issues.


*Must install*

Windows SDK to use debug tool
https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-the-windows-powershell-sdk?view=powershell-6


Monday, July 17, 2017

vmware converter – p2v – partition number must be set for the boot volume

vmware converter – p2v – partition number must be set for the boot volume

I was trying to archive old machine running RHEL 6.4 on physical server. First idea was to P2V it and then export virtual machine… BUT of course there was some obstacles. At first I’ve tried to use REAR (Relax and Recover) tool to make P2V, then when restoring I discovered, /boot volume comes from multipath and it didn’t really play well… Then I’ve tried Veeam Agent for Linux, however it couldn’t handle that server either, it wasn’t correctly recognizing disk layout. So last bastion, VMWare Converter. Alas it failed as well as it had troubles with /boot volume. I’ve tried to get into rescue mode, recreate /boot volume from scratch but I couldn’t install damn GRUB loader there. Luckily I had original install DVD so I installed OS from scratch and wanted to migrated data from old disk, and then it came to me… I could take /boot volume from fresh install and use VGs from migrated disks! So quickly made minimum 10GB OS install, mounted old VGs, made neccessary changes to etc/fstab and GRUB and it did work with minimal overhead of space (10GB). So here are steps:
1) Clone over disks from old machine onto new VM until it fails with error
2) Get same OS install disk (or atleast similar?)
3) Make fresh, minimal install
4) Mount disk from non-finished machine to new VM
5) Mount migrated VGs in new VM, edit /boot/grub/grub.cfg and /mnt/sysimage/etc/fstab, remember to copy /boot line form current fresh VM /etc/fstab
6) pbase – new VM pzuadm – migrated machine
[root@pbase ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_pbase-lv_root
                      5.5G  1.8G  3.5G  34% /
tmpfs                 939M     0  939M   0% /dev/shm
/dev/sda1             485M   37M  423M   9% /boot
[root@pbase ~]# ls -l /dev/mapper/
total 0
crw-rw----. 1 root root 10, 58 Mar  3 09:42 control
lrwxrwxrwx. 1 root root      7 Mar  3 09:42 vg_pbase-lv_root -> ../dm-0
lrwxrwxrwx. 1 root root      7 Mar  3 09:42 vg_pbase-lv_swap -> ../dm-1
# after attaching disk
[root@pbase ~]# ls -l /dev/mapper/
total 0
crw-rw----. 1 root root 10, 58 Mar  3 09:46 control
lrwxrwxrwx. 1 root root      7 Mar  3 09:46 vg_pbase-lv_root -> ../dm-0
lrwxrwxrwx. 1 root root      7 Mar  3 09:46 vg_pbase-lv_swap -> ../dm-1
lrwxrwxrwx. 1 root root      7 Mar  3 09:46 vg_pzuadm-lv_home -> ../dm-3
lrwxrwxrwx. 1 root root      7 Mar  3 09:46 vg_pzuadm-lv_root -> ../dm-2
lrwxrwxrwx. 1 root root      7 Mar  3 09:46 vg_pzuadm-lv_swap -> ../dm-4
[root@pbase ~]# mkdir /mnt/sysimage
[root@pbase ~]# mount /dev/mapper/vg_pzuadm-lv_root /mnt/sysimage/
[root@pbase ~]# cat /etc/fstab | grep boot
UUID=64d2336b-93cf-454a-8f25-8fc5fc8ba69a /boot                   ext4    defaults        1 2
# before edit
[root@pbase ~]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/vg_pbase-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg_pbase-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_pbase/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=pl2 rd_LVM_LV=vg_pbase/lv_root rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-358.el6.x86_64.img
# after edit
[root@pbase ~]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/vg_pzuadm-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg_pzuadm-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_pzuadm/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=pl2 rd_LVM_LV=vg_pzuadm/lv_root rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-358.el6.x86_64.img
# before edit
[root@pbase ~]# cd /mnt/sysimage/etc/
[root@pbase etc]# cat fstab

#
# /etc/fstab
# Created by anaconda on Tue Feb 11 16:38:25 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_pzuadm-lv_root /                       ext4    defaults        1 1
/dev/sdb1 /boot                   ext4    defaults        1 2
/dev/mapper/vg_pzuadm-lv_home /home                   ext4    defaults        1 2
/dev/mapper/vg_pzuadm-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
# after edit
[root@pbase etc]# cd
[root@pbase ~]# umount /mnt/sysimage/
[root@pbase ~]# reboot
[root@pzuadm ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_pzuadm-lv_root
                       50G   24G   24G  50% /
tmpfs                 939M     0  939M   0% /dev/shm
/dev/sda1             485M   37M  423M   9% /boot
/dev/mapper/vg_pzuadm-lv_home                       44G  181M   41G   1% /home

Friday, July 14, 2017

SYS Prep Fatal VM fix

I had indeed run out of “rearms” and slmgr.vbs /dlv showed 0 for the count.
First, I created the “skiprearm.xml” that was a recommended approach in one of the other articles.  It didn’t work.  But hold on, because you’ll still need it later on.  That article can be found here: click here and you should copy and paste the code and store it where they want.
Next, and this is the MONEYchange….you must check/edit 3 registry keys:
HKEY_LOCAL_MACHINE\SYSTEM\Setup\Status\SysprepStatus\GeneralizationState\CleanupState:2
HKEY_LOCAL_MACHINE\SYSTEM\Setup\Status\SysprepStatus\GeneralizationState\GeneralizationState:7
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\SkipRearm:1
Next, Start -> Run : msdtc -uninstall (wait few seconds)
Start -> Run : msdtc -install (wait few seconds)
Restart the machine
Check the registry for the right registry keys values sysprep with the new XML answerfile
Run the following command from a command prompt:
sysprep /generalize /oobe /shutdown /unattend:c:\Windows\skiprearm.xml
It should now work for you.  And it makes sense because were changing anything Microsoft may have done by skipping rearm, changing the generalization state, then reinstalling MSDTC.

Please let me know if this works for you.



-<settings pass="generalize">
-<component language="neutral" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" versionScope="nonSxS" publicKeyToken="31bf3856ad364e35" processorArchitecture="x86" name="Microsoft-Windows-Security-SPP">
<SkipRearm>1</SkipRearm>
</component>
</settings>

Thursday, July 13, 2017

ESX Snmp XML

<?xml version="1.0"?>
<config>
  <snmpSettings>
    <communities>public</communities>
    <enable>true</enable>
   

<engineid>00000063000000a10a0c1024</engineid></snmpSettings>
</config>

Eventviewer

@echo off
FOR /F "tokens=1,2*" %%V IN ('bcdedit') DO SET adminTest=%%V
IF (%adminTest%)==(Access) goto noAdmin
for /F "tokens=*" %%G in ('wevtutil.exe el') DO (call :do_clear "%%G")
echo.
echo goto theEnd
:do_clear
echo clearing %1
wevtutil.exe cl %1
goto :eof
:noAdmin
exit

VM add ram


[code]
$vms = Import-Csv C:\cvs\vms.cvs

Foreach ($vm in $vms) {
Get-VM -name $vm | Shutdown-VMGuest | Set-VM -MemoryMB "4096" | -MemReservationMB "4096" –Confirm:$False | Start-VM
}






CVS input

NAME
__PBTPW732NP_Temp
PBTPW732NP_Temp
BTPXDWIN7O10
clone-example
PBTPCTL01
PBTPDEVW764001
PBTPDEVW764002
PBTPDEVW764003
PBTPDEVW764004
PBTPDEVW764005

Check ESX Host NTP

#requires -version 2
<#

.SYNOPSIS
    Script can be used to report or setup NTP configuration on all vSphere hosts in given cluster

.DESCRIPTION
    Script takes vCenter Server name and host cluster name as mandatory parameters, NTPSources parameter is optional.
    If only mandatory parameters are provided script generates report aobut NTP settings for all vSphere hosts that are
    connected to cluster. Report include ntp service status, policy, up to 5 ntp servers configured and calculated time difference
    between host and system where the script is invoked. For consistent results script should be run from vCenter Server.
    Optional parameter NTPSources is a comma-separated list of ntp servers that will be configured in cluster.
    If NTPSources paramter is provided the script will configure ntp service to start together with host ("on" policy),
    configure ntp servers provided, set the time manually (to avoid drift problems) and restart ntpd.

.PARAMETER vCenterServer
    Mandatory parameter indicating vCenter server to connect to (FQDN or IP address)

.PARAMETER ClusterName
    Mandatory parameter indicating host cluster name where vms need to be reconfigured

.PARAMETER NTPSources
    Optional parameter indicating NTP servers that will be used

.EXAMPLE
    To configure two NTP servers provide all parameters.

    vmhost-timekeeping.ps1 -vCenterServer vcenter.seba.local -ClusterName Production-Cluster -NTPSources "time01.seba.local,time02.seba.local,10.0.0.1"

.EXAMPLE
    If you provide -NTPSources only the script will ask for mandatory parameters

    vmhost-timekeeping.ps1 -NTPSources "time01.seba.local,time02.seba.local,10.0.0.1"

.EXAMPLE
    To generate report about NTP service status provide only mandatory parameters.

    vmhost-timekeeping.ps1 -vcenter 10.0.0.1 -cluster tdq-cluster

.EXAMPLE
    Script will interactively ask for two mandatory parameters, no changes will be made, only report will be created.

    vmhost-timekeeping.ps1
#>

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$True,Position=1)]
   [string]$vCenterServer,
   [Parameter(Mandatory=$True, Position=2)]
   [string]$ClusterName,
   [Parameter(Mandatory=$False, Position=3)]
   [string]$NTPSources=""
)

Function Write-And-Log {

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$True,Position=1)]
   [string]$LogFile,
   [Parameter(Mandatory=$True,Position=2)]
   [string]$line,
   [Parameter(Mandatory=$False,Position=3)]
   [int]$ErrorCount=0,
   [Parameter(Mandatory=$False,Position=4)]
   [string]$type="terse"
)

$LogEntry = (Get-Date -Format ("[yyyy-MM-dd HH:mm:ss] ")) + $line
$ui = (Get-Host).UI.RawUI

if ($ErrorCount) {

   $ui.ForegroundColor = "red"
   $LogEntry = ">>> ERROR <<< " + $LogEntry
   Write-Output $LogEntry
   $LogEntry | Out-File $LogFile -Append

}
else {

   $ui.ForegroundColor = "green"
   if ($type -ne "terse"){
      Write-Output $LogEntry
      $LogEntry | Out-file $LogFile -Append
   }
   else {
      Write-Output $LogEntry
   }

}

$ui.ForegroundColor = "white"
}

#constans
$maxtimedrift = 1

#variables
$ScriptRoot = Split-Path $MyInvocation.MyCommand.Path
$StartTime = Get-Date -Format "yyyyMMddHHmmss_"
$csvoutfile = $ScriptRoot + "\" + $StartTime+ "time_config_report_for_$($ClusterName)_cluster.csv"
$logfilename = $ScriptRoot + "\" + $StartTime + "vmhost-timekeeping.log"
$transcriptfilename = $ScriptRoot + "\" + $StartTime + "vmhost-timekeeping_Transcript.log"
$all_vmhosts_timeconfig_info = @()
$total_errors = 0
$total_vmhosts = 0

#start PowerShell transcript
Start-Transcript -Path $transcriptfilename

#load PowerCLI snap-in
$vmsnapin = Get-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue
$Error.Clear()
if ($vmsnapin -eq $null)
    {
    Add-PSSnapin VMware.VimAutomation.Core
    if ($error.Count -eq 0)
        {
        write-and-log $logfilename "PowerCLI VimAutomation.Core Snap-in was successfully enabled." 0 "full"
        }
    else
        {
        write-and-log $logfilename "Could not enable PowerCLI VimAutomation.Core Snap-in, exiting script" 1 "full"
        Exit
        }
    }
else
    {
    write-and-log $logfilename "PowerCLI VimAutomation.Core Snap-in is already enabled" 0 "full"
    }

#check PowerCLI version
if (($vmsnapin.Version.Major -gt 5) -or (($vmsnapin.version.major -eq 5) -and ($vmsnapin.version.minor -ge 1))) {

    #assume everything is OK at this point
    $Error.Clear()

    #connect vCenter from parameter
    Connect-VIServer -Server $vCenterServer -ErrorAction SilentlyContinue | Out-Null

    #execute only if connection successful
    if ($error.Count -eq 0){

        #measuring execution time is really hip these days
        $stop_watch = [Diagnostics.Stopwatch]::StartNew()

        #use previously defined function to inform what is going on, anything else than "terse" will cause the message to be written both in logfile and to screen
        Write-And-Log $logfilename "vCenter $vCenterServer successfully connected" $error.count "full"

        #get all reachable vmhosts in cluster
        $vmhosts_in_cluster = get-vmhost -location $ClusterName | where-object { ($_.connectionstate -eq "connected") -or ($_.connectionstate -eq "maintenance") }

        #only if we've found some vmhosts
        if ($vmhosts_in_cluster){

            #if no NTP server given - create report only
            if ($NTPSources -eq ""){

                $mode = "checked"
                foreach ($vmhost in $vmhosts_in_cluster){

                        #all OK here
                        $error.Clear()
                        $total_vmhosts += 1
           
                        #display nice progress bar in PowerCLI window
                        write-progress -Activity "Gathering host NTP config report" -Status "Percent complete" -PercentComplete (($total_vmhosts / $vmhosts_in_cluster.count) * 100) -CurrentOperation "$("{0:N2}" -f (($total_vmhosts / $vmhosts_in_cluster.count) * 100))% complete"
                   
                        #retrieve NTPD information
                        $single_vmhosts_timeconfig_info = New-Object PSObject
                        $single_vmhosts_timeconfig_info | Add-Member -Name "VmHostName" -Value $vmhost.name -MemberType NoteProperty
                        $single_vmhosts_timeconfig_info | Add-Member -Name "VmHostTZ" -Value $vmhost.TimeZone -MemberType NoteProperty
                        $ntpservice = $vmhost | get-vmhostservice | Where-Object {$_.key -eq "ntpd"}
                        $single_vmhosts_timeconfig_info | Add-Member -Name "NTPDisRunning" -Value $ntpservice.running -MemberType NoteProperty
                        $single_vmhosts_timeconfig_info | Add-Member -Name "NTPDPolicy" -Value $ntpservice.policy -MemberType NoteProperty
                   
                        #retrieve NTP Servers configured, report only first 5
                        $ntpserver = @($vmhost | get-vmhostntpserver)
                        for ($index = 0; $index -lt 5; $index++){
                            if ($ntpserver[$index]){
                                $single_vmhosts_timeconfig_info | Add-Member -Name "NTPServer$($index)" -Value $ntpserver[$index] -MemberType NoteProperty
                            }
                            else{
                                $single_vmhosts_timeconfig_info | Add-Member -Name "NTPServer$($index)" -Value "none" -MemberType NoteProperty
                            }
                        }
                   
                        #calculate time difference between host and system this script is invoked from
                        $hosttimesystem = get-view $vmhost.ExtensionData.ConfigManager.DateTimeSystem
                        $timedrift = ($hosttimesystem.QueryDateTime() - [DateTime]::UtcNow).TotalSeconds
                   
                        #raise alarm if difference bigger than acceptable
                        if([math]::abs($timedrift) -gt $maxtimedrift){
                            Write-And-Log $logfilename "Time difference exceeded for host $($vmhost.name)!" 1 "full"
                            Write-And-Log $logfilename "Acceptable difference: $("{0:N2}" -f $maxtimedrift)s Current difference: $("{0:N2}" -f $timedrift)s" 1 "full"
                            $total_errors++
                        }
                        $single_vmhosts_timeconfig_info | Add-Member -Name "TimeDrift" -Value $timedrift -MemberType NoteProperty
                   
                        $all_vmhosts_timeconfig_info += $single_vmhosts_timeconfig_info
                        $total_errors += $error.Count
                        Write-And-Log $logfilename "Host $($vmhost.name) added to report" $error.Count "terse"
                }
               
                #export to CSV
                $all_vmhosts_timeconfig_info | Export-Csv -Path $csvoutfile -NoTypeInformation
                Write-And-Log $logfilename "Report created in $($csvoutfile)" $total_errors "full"
            }
           
            #if NTP servers provided - configure them
            else {
           
                #give the engineer invoking the script chance to abort
                Write-And-Log $logfilename "NTP configuration for all vSphere hosts in cluster $ClusterName will be RESET" 1 "full"
                Write-And-Log $logfilename "This is your LAST CHANCE TO ABORT" 1 "full"
                Write-And-Log $logfilename "Press Y + ENTER to continue" 0 "full"
                Write-And-Log $logfilename "Press any other key + ENTER to ABORT..." 1 "full"
                $response = read-host
                if ( $response -ne "Y" ) {
                    write-and-log $logfilename "Operation ABORTED, no changes have been made to NTP settings" 1 "full"
                    #exit
                } else {
               
                    #let's sanitize input a little and leave only NTP servers that respond to ping (from system where this script is invoked!)
                    $NTPSourcesArray = $NTPSources.Split(",") | Where-Object { Test-Connection -ComputerName $_ -Quiet -Count 1}
                    $mode = "configured"
                   
                    #make sure we've got some NTP servers left
                    if ($NTPSourcesArray){
                       
                        foreach ($vmhost in $vmhosts_in_cluster){
                   
                                #all OK here
                                $error.Clear()
                                $total_vmhosts += 1
                           
                                #display nice progress bar in PowerCLI window
                                write-progress -Activity "Configuring NTP for hosts" -Status "Percent complete" -PercentComplete (($total_vmhosts / $vmhosts_in_cluster.count) * 100) -CurrentOperation "$("{0:N2}" -f (($total_vmhosts / $vmhosts_in_cluster.count) * 100))% complete"
                           
                                #stop ntp service on host
                                $ntpservice = $vmhost | get-vmhostservice | Where-Object {$_.key -eq "ntpd"}
                                stop-vmhostservice -HostService $ntpservice -confirm:$False | out-null
                           
                                #clear current NTP servers
                                $current_NTPSources = @($vmhost | get-vmhostntpserver)
                                foreach ($current_NTPSource in $current_NTPSources){
                                        remove-vmhostntpserver -ntpserver $current_NTPSource -vmhost $vmhost -confirm:$false | Out-Null
                                }
                           
                                #and set new NTP servers
                                foreach ($NTPSource in $NTPSourcesArray) {
                                        add-vmhostntpserver -ntpserver $NTPSource -vmhost $vmhost -confirm:$False | out-null
                                }
                           
                                #set service policy to start and stop with host
                                set-vmhostservice -HostService $ntpservice -Policy "on" -confirm:$False | out-null
                           
                                #set vmhost time manually (to avoid problem with too big drift) to match time of system where script is invoked
                                $hosttimesystem = get-view $vmhost.ExtensionData.ConfigManager.DateTimeSystem
                                $hosttimesystem.UpdateDateTime([DateTime]::UtcNow)
                           
                                #finally - start NTP on vmhost
                                start-vmhostservice -HostService $ntpservice -confirm:$False | out-null
                           
                                $total_errors += $error.Count
                                Write-And-Log $logfilename "Host $($vmhost.name) NTP configuration changed" $error.Count "terse"
                        }
                   }    
                   else{
                        Write-And-Log $logfilename "None of NTP servers provided ($NTPSources) is responding, exiting" 1 "full"
                        $total_errors++
                   }    
                }
            }
        }
        else {
            $total_errors += $Error.Count
        }
        $stop_watch.Stop()
        $elapsed_seconds = ($stop_watch.elapsedmilliseconds)/1000
       
        #farewell message before disconnect
        Write-And-Log $logfilename "Total of $total_vmhosts hosts $mode in $("{0:N2}" -f $elapsed_seconds)s, $total_errors ERRORS reported, exiting" $total_errors "full"
       
        #disconnect vCenter
        Disconnect-VIServer -Confirm:$false -Force:$true
    }
    else {
        Write-And-Log $logfilename "Error connecting vCenter server $vCenterServer, exiting" $error.count "full"
    }
}
else {
    write-and-log $logfilename "This script requires PowerCLI 5.1 or greater to run properly" 1 "full"
}
Stop-Transcript

Change ESX Host Passwords

Param ( [String] $vCenter = (Read-Host "Enter Virtual Center"),
[String] $Location = (Read-Host "Enter VMHost Location (can be a vCenter, DataCenter, Cluster or * for all)"),
[System.Security.SecureString] $RootPassword = (Read-Host "Enter current root password" -AsSecureString),
[System.Security.SecureString] $NewPassword = (Read-Host "Enter new root password" -AsSecureString),
[System.Security.SecureString] $NewPasswordVerify = (Read-Host "Re-enter new root password" -AsSecureString)
)

<#
    .SYNOPSIS
      Displays a list of WMI Classes based upon a search criteria
    .EXAMPLE
     Get-WmiClasses -class disk -ns root\cimv2"
     This command finds wmi classes that contain the word disk. The
     classes returned are from the root\cimv2 namespace.
  #>

# Define a log file
$LogFile = "Change-HostPasswords.csv"
# Rename the old log file, if it exists
if(Test-Path $LogFile) {
$DateString = Get-Date((Get-Item $LogFile).LastWriteTIme) -format MMddyyyy
Move-Item $LogFile "$LogFile.$DateString.csv" -Force -Confirm:$false
}
# Add some CSV headers to the log file
Add-Content $Logfile "Date,Location,Host,Result"

# Hide the warnings for certificates (or better, install valid ones!)
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false | Out-Null

# Create credential objects using the supplied passwords
$RootCredential = new-object -typename System.Management.Automation.PSCredential -argumentlist "root",$RootPassword
$NewRootCredential = new-object -typename System.Management.Automation.PSCredential -argumentlist "root",$NewPassword
$NewRootCredentialVerify = new-object -typename System.Management.Automation.PSCredential -argumentlist "root",$NewPasswordVerify

# Test that the new password and verified one match, if not abort!
if(($NewRootCredential.GetNetworkCredential().Password) -ne ($NewRootCredentialVerify.GetNetworkCredential().Password)) {
throw "Passwords do not match!!!"
}


# Connect to the vCenter server
Connect-VIServer $vCenter | Out-Null

# Create an object for the root account with the new pasword
$RootAccount = New-Object VMware.Vim.HostPosixAccountSpec
$RootAccount.id = "root"
$RootAccount.password = ($NewRootCredential.GetNetworkCredential().Password)
$RootAccount.shellAccess = "/bin/bash"

$VMHosts = Get-VMHost -Location $Location
# Get the hosts from the Location and for each host
$VMHosts | % {
# Disconnect any connected sessions - prevents errors getting multiple ServiceInstances
$global:DefaultVIServers | Disconnect-VIServer -Confirm:$false
Write-Debug ($_.Name + " - attempting to connect")
# Create a direct connection to the host
$VIServer = Connect-VIServer $_.Name -User "root" -Password ($RootCredential.GetNetworkCredential().Password) -ErrorAction SilentlyContinue
# If it's connected
if($VIServer.IsConnected -eq $True) {
Write-Debug ($_.Name + " - connected")
$VMHost = $_
# Attempt to update the Root user object using the account object we created before
# Catch any errors in a try/catch block to log any failures.
try {
$ServiceInstance = Get-View ServiceInstance
$AccountManager = Get-View -Id $ServiceInstance.content.accountManager
$AccountManager.UpdateUser($RootAccount)
Write-Debug ($VMHost.Name + " - password changed")
Add-Content $Logfile ((get-date -Format "dd/MM/yy HH:mm")+","+$VMHost.Parent+","+$VMHost.Name+",Success")
}
catch {
Write-Debug ($VMHost.Name + " - password change failed")
Write-Debug $_
Add-Content $Logfile ((get-date -Format "dd/MM/yy HH:mm")+","+$VMHost.Parent+","+$VMHost.Name+",Failed (Password Change)")
}
# Disconnect from the server
Disconnect-VIServer -Server $VMHost.Name -Confirm:$false -ErrorAction SilentlyContinue
Write-Debug ($VMHost.Name + " - disconnected")
} else {
# Log any connection failures
Write-Debug ($_.Name+" - unable to connect")
Add-Content $Logfile ((get-date -Format "dd/MM/yy HH:mm")+","+$_.Parent+","+$_.Name+",Failed (Connection)")
}
}

Upgrade UCS steps

BTP-FC-03# sho zoneset active vsan 1 | b PBTP-ESXSQL-01-BTP-NEXSAN-CT01LP
  zone name PBTP-ESXSQL-01-BTP-NEXSAN-CT01LP vsan 1
    device-alias PBTP-ESXSQL-01
  * fcid 0xbf1c00 [device-alias PBTP-NEXSAN-CT01LP]



1.   Create a All configuration backup under UCS Manager Admin and save configuration locally

2.   Verify I/O Modules and Fabric Interconnects modules for High availability and operable

3.   Verify servers and adapters are operable

4.   Download approved Cisco UCS 2.2(5B) Infrastructure bundle, C & B series server bundle
5.   Verify Fabric A/B for adequate storage is available for firmware update

6.   Upload firmware to CDC firmware management storage for staging

7.   Disable call home (turn off)

8.   Equipment tab - Firmware management - activate firmware

9.   UCS Manager filter - adjust firmware level to 2.2 (b) and check Ignore Compatibility check - update

10. UCS Manager will close session and re-login and notice new version 2.2 (5b)

11. Equipment - Firmware Management - update firmware - firmware auto install - Install Infrastructure Firmware - change version to 2.2(5b)  -check Upgrade Now - ok

12. Verify data path has been restored after update, equipment - FSM

13. VIF status check - Check each Chassis - Server - adapter - check each HBA is operable and vNICs - repeat for every Chassis and server verify all is operable

14. Verify Fabric Interconnect A - High avaibilty is UP and ready

15. Verify Fabric Interconnect B - High avaibilty is UP and ready

16. Verify Equipment - Firmware Management - Installed firmware - verify secoundary IO module is 2.2(5b) for each CDC Chassis

17. Verify Equipment - Firmware Management - Installed firmware - verify secoundary Fabric Interconnect B Kernal is running v2.2(5b) CDC Chassis

18. Acknowledge the reboot of FabricInterconnect A - click pending Activities - User acknowledge Activities - Fabric Interconnects - REBOOT - Yes

19. Equipment - Firmware Management - Firmware Auto Install - Install Server firmware - choose 2.2(5b) for C and B series



Server firmware update:

1. PCDCESX01 enter maintenance mode - SVMOTION local storage VMs if needed - Shutdown ESX host

2. UCS Manager - conitue from step 19

3. Click Root - find PCDESX01 on Chassis 1 and update server and Chassis service profiles - note Impact Endpoint summary - review server that will reboot after upgrade

4. Click install and confirm install - click pending activities - Acknowledge reboots - status will change for server and then reboot  

5. Upgrade completed

6. Enable UCS call home alerts - admin

7. Power PCDESX01 on

8. Exit ESX maintenance mode

9. Relocate local VMs if needed

10. Verify ZEN apps  

LDAP examples

PATLDC01.st.com


CN=LDAPQuery, OU=Admin and Service Accounts,DC=st,DC=com

DC=st,DC=com

sAMAccountName=$userid,


sAMAccountName=$userid,


CN=DirectoryBind,OU=Admin and Service Accounts,DC=st,DC=com


CN=UCS Admins,OU=Admin and Service Accounts,DC=st,DC=com








bind user

CN=-service-ucs,OU=Service Accounts,OU=Georgia,OU=Admin and Service Accounts,DC=st,DC=com


group
CN=UCS Admin,OU=Admin and Service Accounts,DC=st,DC=com


CN=-service-ucs,OU=Service Accounts,OU=Georgia,OU=Admin and Service Accounts,DC=st,DC=com

DC=st,DC=com

sAMAccountName=$userid

Cisco MDS zoning example Side A

configure terminal

device-alias database
device-alias name BTPESXU3C1B1 pwwn 20:00:00:25:B5:3A:00:6F
device-alias commit

zone name BTPESXU3C1B1-BTP-PURE01-CT0FC0 vsan 1
 member device-alias BTPESXU3C1B1
 member device-alias BTP-PURE01-CT0FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B1-BTP-PURE01-CT0FC0


zone name BTPESXU3C1B1-BTP-PURE01-CT0FC2 vsan 1
 member device-alias BTPESXU3C1B1
 member device-alias BTP-PURE01-CT0FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B1-BTP-PURE01-CT0FC2


zone name BTPESXU3C1B1-BTP-PURE01-CT1FC0 vsan 1
 member device-alias BTPESXU3C1B1
 member device-alias BTP-PURE01-CT1FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B1-BTP-PURE01-CT1FC0


zone name BTPESXU3C1B1-BTP-PURE01-CT1FC2 vsan 1
 member device-alias BTPESXU3C1B1
 member device-alias BTP-PURE01-CT1FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B1-BTP-PURE01-CT1FC2

device-alias database
device-alias name BTPESXU3C1B2 pwwn 20:00:00:25:B5:3A:00:7F
device-alias commit

zone name BTPESXU3C1B2-BTP-PURE01-CT0FC0 vsan 1
 member device-alias BTPESXU3C1B2
 member device-alias BTP-PURE01-CT0FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B2-BTP-PURE01-CT0FC0

zone name BTPESXU3C1B2-BTP-PURE01-CT0FC2 vsan 1
 member device-alias BTPESXU3C1B2
 member device-alias BTP-PURE01-CT0FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B2-BTP-PURE01-CT0FC2

zone name BTPESXU3C1B2-BTP-PURE01-CT1FC0 vsan 1
 member device-alias BTPESXU3C1B2
 member device-alias BTP-PURE01-CT1FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B2-BTP-PURE01-CT1FC0

zone name BTPESXU3C1B2-BTP-PURE01-CT1FC2 vsan 1
 member device-alias BTPESXU3C1B2
 member device-alias BTP-PURE01-CT1FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B2-BTP-PURE01-CT1FC2

device-alias database
device-alias name BTPESXU3C1B3 pwwn 20:00:00:25:B5:3A:00:4F
device-alias commit

zone name BTPESXU3C1B3-BTP-PURE01-CT0FC0 vsan 1
 member device-alias BTPESXU3C1B3
 member device-alias BTP-PURE01-CT0FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B3-BTP-PURE01-CT0FC0

zone name BTPESXU3C1B3-BTP-PURE01-CT0FC2 vsan 1
 member device-alias BTPESXU3C1B3
 member device-alias BTP-PURE01-CT0FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B3-BTP-PURE01-CT0FC2

zone name BTPESXU3C1B3-BTP-PURE01-CT1FC0 vsan 1
 member device-alias BTPESXU3C1B3
 member device-alias BTP-PURE01-CT1FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B3-BTP-PURE01-CT1FC0

zone name BTPESXU3C1B3-BTP-PURE01-CT1FC2 vsan 1
 member device-alias BTPESXU3C1B3
 member device-alias BTP-PURE01-CT1FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B3-BTP-PURE01-CT1FC2

device-alias database
device-alias name BTPESXU3C1B4 pwwn 20:00:00:25:B5:3A:00:5F
device-alias commit

zone name BTPESXU3C1B4-BTP-PURE01-CT0FC0 vsan 1
 member device-alias BTPESXU3C1B4
 member device-alias BTP-PURE01-CT0FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B4-BTP-PURE01-CT0FC0

zone name BTPESXU3C1B4-BTP-PURE01-CT0FC2 vsan 1
 member device-alias BTPESXU3C1B4
 member device-alias BTP-PURE01-CT0FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B4-BTP-PURE01-CT0FC2

zone name BTPESXU3C1B4-BTP-PURE01-CT1FC0 vsan 1
 member device-alias BTPESXU3C1B4
 member device-alias BTP-PURE01-CT1FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B4-BTP-PURE01-CT1FC0

zone name BTPESXU3C1B4-BTP-PURE01-CT1FC2 vsan 1
 member device-alias BTPESXU3C1B4
 member device-alias BTP-PURE01-CT1FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B4-BTP-PURE01-CT1FC2

device-alias database
device-alias name BTPESXU3C1B5 pwwn 20:00:00:25:B5:3A:00:2F
device-alias commit

zone name BTPESXU3C1B5-BTP-PURE01-CT0FC0 vsan 1
 member device-alias BTPESXU3C1B5
 member device-alias BTP-PURE01-CT0FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B5-BTP-PURE01-CT0FC0

zone name BTPESXU3C1B5-BTP-PURE01-CT0FC2 vsan 1
 member device-alias BTPESXU3C1B5
 member device-alias BTP-PURE01-CT0FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B5-BTP-PURE01-CT0FC2

zone name BTPESXU3C1B5-BTP-PURE01-CT1FC0 vsan 1
 member device-alias BTPESXU3C1B5
 member device-alias BTP-PURE01-CT1FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B5-BTP-PURE01-CT1FC0

zone name BTPESXU3C1B5-BTP-PURE01-CT1FC2 vsan 1
 member device-alias BTPESXU3C1B5
 member device-alias BTP-PURE01-CT1FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B5-BTP-PURE01-CT1FC2

device-alias database
device-alias name BTPESXU3C1B7 pwwn 20:00:00:25:B5:3A:00:3F
device-alias commit

zone name BTPESXU3C1B7-BTP-PURE01-CT0FC0 vsan 1
 member device-alias BTPESXU3C1B7
 member device-alias BTP-PURE01-CT0FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B7-BTP-PURE01-CT0FC0

zone name BTPESXU3C1B7-BTP-PURE01-CT0FC2 vsan 1
 member device-alias BTPESXU3C1B7
 member device-alias BTP-PURE01-CT0FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B7-BTP-PURE01-CT0FC2

zone name BTPESXU3C1B7-BTP-PURE01-CT1FC0 vsan 1
 member device-alias BTPESXU3C1B7
 member device-alias BTP-PURE01-CT1FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B7-BTP-PURE01-CT1FC0

zone name BTPESXU3C1B7-BTP-PURE01-CT1FC2 vsan 1
 member device-alias BTPESXU3C1B7
 member device-alias BTP-PURE01-CT1FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C1B7-BTP-PURE01-CT1FC2

device-alias database
device-alias name BTPESXU3C2B1 pwwn 20:00:00:25:B5:3A:00:0F
device-alias commit

zone name BTPESXU3C2B1-BTP-PURE01-CT0FC0 vsan 1
 member device-alias BTPESXU3C2B1
 member device-alias BTP-PURE01-CT0FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B1-BTP-PURE01-CT0FC0

zone name BTPESXU3C2B1-BTP-PURE01-CT0FC2 vsan 1
 member device-alias BTPESXU3C2B1
 member device-alias BTP-PURE01-CT0FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B1-BTP-PURE01-CT0FC2

zone name BTPESXU3C2B1-BTP-PURE01-CT1FC0 vsan 1
 member device-alias BTPESXU3C2B1
 member device-alias BTP-PURE01-CT1FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B1-BTP-PURE01-CT1FC0

zone name BTPESXU3C2B1-BTP-PURE01-CT1FC2 vsan 1
 member device-alias BTPESXU3C2B1
 member device-alias BTP-PURE01-CT1FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B1-BTP-PURE01-CT1FC2

device-alias database
device-alias name BTPESXU3C2B2 pwwn 20:00:00:25:B5:3A:00:1F
device-alias commit

zone name BTPESXU3C2B2-BTP-PURE01-CT0FC0 vsan 1
 member device-alias BTPESXU3C2B2
 member device-alias BTP-PURE01-CT0FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B2-BTP-PURE01-CT0FC0

zone name BTPESXU3C2B2-BTP-PURE01-CT0FC2 vsan 1
 member device-alias BTPESXU3C2B2
 member device-alias BTP-PURE01-CT0FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B2-BTP-PURE01-CT0FC2

zone name BTPESXU3C2B2-BTP-PURE01-CT1FC0 vsan 1
 member device-alias BTPESXU3C2B2
 member device-alias BTP-PURE01-CT1FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B2-BTP-PURE01-CT1FC0

zone name BTPESXU3C2B2-BTP-PURE01-CT1FC2 vsan 1
 member device-alias BTPESXU3C2B2
 member device-alias BTP-PURE01-CT1FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B2-BTP-PURE01-CT1FC2

device-alias database
device-alias name BTPESXU3C2B3 pwwn 20:00:00:25:B5:3A:00:6E
device-alias commit

zone name BTPESXU3C2B3-BTP-PURE01-CT0FC0 vsan 1
 member device-alias BTPESXU3C2B3
 member device-alias BTP-PURE01-CT0FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B3-BTP-PURE01-CT0FC0

zone name BTPESXU3C2B3-BTP-PURE01-CT0FC2 vsan 1
 member device-alias BTPESXU3C2B3
 member device-alias BTP-PURE01-CT0FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B3-BTP-PURE01-CT0FC2

zone name BTPESXU3C2B3-BTP-PURE01-CT1FC0 vsan 1
 member device-alias BTPESXU3C2B3
 member device-alias BTP-PURE01-CT1FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B3-BTP-PURE01-CT1FC0

zone name BTPESXU3C2B3-BTP-PURE01-CT1FC2 vsan 1
 member device-alias BTPESXU3C2B3
 member device-alias BTP-PURE01-CT1FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B3-BTP-PURE01-CT1FC2

device-alias database
device-alias name BTPESXU3C2B4 pwwn 20:00:00:25:B5:3A:00:7E
device-alias commit

zone name BTPESXU3C2B4-BTP-PURE01-CT0FC0 vsan 1
 member device-alias BTPESXU3C2B4
 member device-alias BTP-PURE01-CT0FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B4-BTP-PURE01-CT0FC0

zone name BTPESXU3C2B4-BTP-PURE01-CT0FC2 vsan 1
 member device-alias BTPESXU3C2B4
 member device-alias BTP-PURE01-CT0FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B4-BTP-PURE01-CT0FC2

zone name BTPESXU3C2B4-BTP-PURE01-CT1FC0 vsan 1
 member device-alias BTPESXU3C2B4
 member device-alias BTP-PURE01-CT1FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B4-BTP-PURE01-CT1FC0

zone name BTPESXU3C2B4-BTP-PURE01-CT1FC2 vsan 1
 member device-alias BTPESXU3C2B4
 member device-alias BTP-PURE01-CT1FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B4-BTP-PURE01-CT1FC2

device-alias database
device-alias name BTPESXU3C2B5 pwwn 20:00:00:25:B5:3A:00:4E
device-alias commit

zone name BTPESXU3C2B5-BTP-PURE01-CT0FC0 vsan 1
 member device-alias BTPESXU3C2B5
 member device-alias BTP-PURE01-CT0FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B5-BTP-PURE01-CT0FC0

zone name BTPESXU3C2B5-BTP-PURE01-CT0FC2 vsan 1
 member device-alias BTPESXU3C2B5
 member device-alias BTP-PURE01-CT0FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B5-BTP-PURE01-CT0FC2

zone name BTPESXU3C2B5-BTP-PURE01-CT1FC0 vsan 1
 member device-alias BTPESXU3C2B5
 member device-alias BTP-PURE01-CT1FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B5-BTP-PURE01-CT1FC0

zone name BTPESXU3C2B5-BTP-PURE01-CT1FC2 vsan 1
 member device-alias BTPESXU3C2B5
 member device-alias BTP-PURE01-CT1FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B5-BTP-PURE01-CT1FC2

device-alias database
device-alias name BTPESXU3C2B7 pwwn 20:00:00:25:B5:3A:00:5E
device-alias commit

zone name BTPESXU3C2B7-BTP-PURE01-CT0FC0 vsan 1
 member device-alias BTPESXU3C2B7
 member device-alias BTP-PURE01-CT0FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B7-BTP-PURE01-CT0FC0

zone name BTPESXU3C2B7-BTP-PURE01-CT0FC2 vsan 1
 member device-alias BTPESXU3C2B7
 member device-alias BTP-PURE01-CT0FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B7-BTP-PURE01-CT0FC2

zone name BTPESXU3C2B7-BTP-PURE01-CT1FC0 vsan 1
 member device-alias BTPESXU3C2B7
 member device-alias BTP-PURE01-CT1FC0

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B7-BTP-PURE01-CT1FC0

zone name BTPESXU3C2B7-BTP-PURE01-CT1FC2 vsan 1
 member device-alias BTPESXU3C2B7
 member device-alias BTP-PURE01-CT1FC2

zoneset name Production_Zoneset_A vsan 1
 member BTPESXU3C2B7-BTP-PURE01-CT1FC2

zoneset activate name Production_Zoneset_A vsan 1

copy running-config startup-config

VM ARP cache reg key fix

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters]
"ArpRetryCount"=dword:00000000

Install vmware tools without reboot string

Update the server VM Tools without a reboot:
Under the Advanced Options during the VM Tools install enter the string       /S /v"/qn REBOOT=R"  

Cleanup stale Domain controller & check replication

repadmin /replsum

reset bad server account - most likely sysprep needed
ipconfig /all >ip.txt, remove from domain, delete computer account in AD, force replication, sysprep, rejoin to domain
1.      At the command line, type Ntdsutil and press ENTER.
PowerShell
1
2
C:\WINDOWS&gt;ntdsutil
ntdsutil:
2.      At the Ntdsutil: prompt, type metadata cleanup and press Enter.
PowerShell
1
2
ntdsutil: metadata cleanup
metadata cleanup:
3.      At the metadata cleanup: prompt, type connections and press Enter.
PowerShell
1
2
metadata cleanup: connections
server connections:
4.      At the server connections: prompt, type connect to server <servername>, where <servername> is the domain controller (any functional domain controller in the same domain) from which you plan to clean up the metadata of the failed domain controller. Press Enter.
PowerShell
1
2
3
4
server connections: connect to server server100
Binding to server100 ...
Connected to server100 using credentials of locally logged on user.
server connections:
Note: Windows Server 2003 Service Pack 1 eliminates the need for the above step.
5.      Type quit and press Enter to return you to the metadata cleanup: prompt.
PowerShell
1
2
server connections: q
metadata cleanup:
6.      Type select operation target and press Enter.
PowerShell
1
2
metadata cleanup: Select operation target
select operation target:
7.      Type list domains and press Enter. This lists all domains in the forest with a number associated with each.
PowerShell
1
2
3
4
select operation target: list domains
Found 1 domain(s)
0 - DC=dpetri,DC=net
select operation target:
8.      Type select domain <number>, where <number> is the number corresponding to the domain in which the failed server was located. Press Enter.
PowerShell
1
2
3
4
5
6
select operation target: Select domain 0
No current site
Domain - DC=dpetri,DC=net
No current server
No current Naming Context
select operation target:
9.      Type list sites and press Enter.
PowerShell
1
2
3
4
select operation target: List sites
Found 1 site(s)
0 - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=dpetri,DC=net
select operation target:
10. Type select site <number>, where <number> refers to the number of the site in which the domain controller was a member. Press Enter.
PowerShell
1
2
3
4
5
6
select operation target: Select site 0
Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=dpetri,DC=net
Domain - DC=dpetri,DC=net
No current server
No current Naming Context
select operation target:
11. Type list servers in site and press Enter. This will list all servers in that site with a corresponding number.
PowerShell
1
2
3
4
5
select operation target: List servers in site
Found 2 server(s)
0 - CN=SERVER200,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=dpetri,DC=net
1 - CN=SERVER100,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=dpetri,DC=net
select operation target:
12. Type select server <number> and press Enter, where <number> refers to the domain controller to be removed.
PowerShell
1
2
3
4
5
6
7
8
9
select operation target: Select server 0
Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=dpetri,DC=net
Domain - DC=dpetri,DC=net
Server - CN=SERVER200,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=dpetri,DC=net
 DSA object - CN=NTDS Settings,CN=SERVER200,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=dpetri,DC=net
 DNS host name - server200.dpetri.net
 Computer object - CN=SERVER200,OU=Domain Controllers,DC=dpetri,DC=net
No current Naming Context
select operation target:
13. Type quit and press Enter. The Metadata cleanup menu is displayed.
PowerShell
1
2
select operation target: q
metadata cleanup:
14. Type remove selected server and press Enter.
You will receive a warning message. Read it, and if you agree, press Yes.

PowerShell
1
2
3
metadata cleanup: Remove selected server
"CN=SERVER200,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=dpetri,DC=net" removed from server "server100"
metadata cleanup:
At this point, Active Directory confirms that the domain controller was removed successfully. If you receive an error that the object could not be found, Active Directory might have already removed from the domain controller.
15. Type quit, and press Enter until you return to the command prompt.
To remove the failed server object from the sites
16. In Active Directory Sites and Services, expand the appropriate site.
17. Delete the server object associated with the failed domain controller.


To remove the failed server object from the domain controllers container

Vmware NSX SSL creation 

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