Automation

 View Only
  • 1.  how to delete multiple esxis' local disks with powercli

    Posted Aug 03, 2022 01:08 PM

    Hello,

    I want to delete the local disk of the all hosts after setup. First i have to find only the local disks on the hosts with powercli.

    Could you help me?

    Thanks.

     

    I found those commands but it didnt work:

     

    function Get-DatastoreHost {
    Param(
    [VMware.VimAutomation.Client20.DatastoreImpl] $Datastore,
    [boolean] $IsConnected=$True
    )
    ($Datastore | Get-View).Host | ForEach-Object { get-view -id $_.Key } | `
    Where-Object { (-not $IsConnected) -or ($_.Runtime.ConnectionState -eq "connected") }
    }


    ## This returns all local datastores on the specified Host
    ## We get all datastores, then find all the disknames they're on
    ## then select datastores where the disk object has class BlockHBA or ParallelSCSIHBA
    function Get-LocalDatastore {
    Param(
    [VMware.VimAutomation.Client20.VMHostImpl] $VMHost
    )
    $LocalDevices=(Get-VMHostStorage -VMHost $VMHost | Get-View).StorageDeviceInfo.HostBusAdapter | `
    Where-Object { `
    ($_.Key -like "key-vim.host.ParallelSCSIHBA-*") -or `
    ($_.Key -like "key-vim.host.BlockHBA-*") `
    } | %{ [string]($_.Device) }
    Get-Datastore -VMHost $VMHost | Where-Object {
    (($_ | Get-View).Info.vmfs.extent | %{ ([string]$_.DiskName).split(":",2)[0]} ) `
    -contains $LocalDevices
    }
    }

     

    ## This returns the DataCenter PS Object associated with a DataStore
    ## Basically goes through each Datastore in a Datacenter, and returns
    ## the data centers who Datastore URL's match our URL
    ## Only works for one input Data Center
    function Get-DatastoreDatacenter {
    Param(
    $Datastore
    )
    Get-Datacenter | Where-Object {
    (($_ | Get-View).Datastore | %{ (Get-View -Id $_).Summary.Url}) `
    -contains (($Datastore | Get-View).Summary.Url)
    }
    }

     

    ## USAGE

    $VMHost=@(Get-VMHost)[0] ## Gets the first host
    $DS=@(Get-Datastore) [0] ## Gets the first datastore

    "Get-LocalDatastore for host " + $VMHost.Name
    Get-LocalDatastore -VMHost $VMHost | %{ $_.Name }
    "=================="

    "Get-DatastoreDatacenter for datacenter " + $DS.Name
    (Get-DatastoreDatacenter -Datastore $DS).Name
    "======================="

    "Get-DatastoreHost for datacenter " + $DS.Name
    Get-DatastoreHost -Datastore $DS -IsConnected $True | %{ $_.Name }
    "================="



  • 2.  RE: how to delete multiple esxis' local disks with powercli

    Posted Aug 03, 2022 01:43 PM

    Hi,

     

    if you have all the host with identical hardware it is possible.

    i had the same issue, and got partly fixed.
    https://communities.vmware.com/t5/VMware-PowerCLI-Discussions/How-to-ignore-local-datastore/m-p/2898062#M105673 



  • 3.  RE: how to delete multiple esxis' local disks with powercli

    Posted Aug 03, 2022 01:56 PM

    you can use the below if you don't have any external datastore pointing to only one host.

    Get-Datastore | where {($_|Get-VMHost).count -eq "1" }

    this should probably filter most.



  • 4.  RE: how to delete multiple esxis' local disks with powercli

    Posted Aug 04, 2022 11:01 AM

    Hello,

    Thanks for the answer. The script worked. i would like to delete these local datastore on the esxi. Could you help me.

    Thanks a lot