PowerCLI script to migrate virtual machines to the new vCenter environment

Hello world

in the next few weeks, we need about migrate 700 VMs (Windows/Linux) server to a new environment (new vCenter, new hosts, but VMs will remain on same data warehouses). VMs will be migrated not in one batch, but rather from time to time (which, however, can understand the need to migrate some 10s of virtual machines at the same time).

Cluster names and folder structure will be identical to the old and the new vCenters. As host in the new vCenter names differ from those in the old vCenter, thought to provide a table of 'translation', which tells the script to save a given VM on host B (new vCenter) when having been registered in order to host a (old vCenter) and so on.

I thought writing a PowerCLI script which, broadly speaking, can accomplish the following steps:

  • Connect to vCenterOld and vCenterNew
  • Correspondence table of host to read from a file (see step "register VM vCenterNew below)

Then, in a loop:

  • Ask VM name
  • Get the settings of the virtual machine: Datastore/path, network/Portgroup, HA restart priority, host, folder, note
  • View the parameters and the VM name and request confirmation migrate the virtual machine
  • Turn off VM (closed OS gracefully, but force power off if power status is still not equal 'off' after a time given)
  • To unsubscribe from VM vCenterOld (removal of inventory)
  • Registry of the VM to the data store vCenterNew (assumptions: same folder as vCenterOld, host names are different, but for each source in vCenterOld host a host of destination in vCenterNew for you join the virtual machine to can be provided, that is, CSV)
  • The value of VM portgroup (same name as in vCenterOld)
  • Set VM HA restart priority
  • PowerON VM
  • Wait / check the VM (for example, ping) connectivity / continue immediately if the virtual machine is accessible or after a certain time if the virtual machine is still inaccessible
  • Confirm that the virtual machine has been migrated successfully, OR ask the user to check the connectivity of the virtual machine

Now to my questions:

  • Is anyone know about an existing script that does something similar or contains parts that can be useful to compile a script like this?
  • How can vCenter two connections at the same time been managed within a PowerCLI script - or doesn't work at all and a connect/disconnect to/from the two vCenters must be completed for each virtual computer?

Many thanks for any help.

The following seems to work for me

$vm = Get-VM -Name MyVM$nic = Get-NetworkAdapter -VM $vm $vdPG = $nic | select -ExpandProperty NetworkName

Get-VDPortgroup -Name $vdPG

Tags: VMware

Similar Questions

  • PowerCLI Script to migrate virtual machines with the same network Source for the new vCenter Server.

    Hi all

    I checked a few posts on the migration to the new vCenter Server virtual machine. But I'm not very good with Powercli and need some help here.

    We have a new vCenter server where we migrate virtual machines from one source vCenter server. Here are two things that I don't know how to connect together to make sure that bwfore we turn on the virtual machine to the virtual machine is connected to its source network.

    Part 1 - this script works well but do not get any network on the vCenter destination.

    cluster = Get-Cluster "clusterA.

    $inventory = get-Cluster $cluster | Get - VM | Add-Member - MemberType ScriptProperty-name "VMXPath" - value {$this.extensiondata.config.files.vmpathname}-Passthru-Force | Select-Object Name ResourcePool, folder, VMXPath |

    $inventory | Export-Csv c:\file.csv

    $inventory = import-csv c:\file.csv

    $cluster = get-group 'b '.

    {foreach ($vm to $inventory)

    $ESXHost = get-Cluster $cluster | Get-VMHost | Select - 1 first

    New-VM - VMFilePath $vm. VMXPath - VMHost $ESXHost - location $vm. Folder - ResourcePool (Get-Cluster $cluster |) Get-ResourcePool $vm. ResourcePool)

    }

    Part 2 - I want to preserve the Portgroup macaddress and the Ip of the virtual computers and connect them to the new vCenter. How can I do this with the script below. Or how can I combine them together?

    $vm_list = get-Cluster-name "clustera | Get - VM test * | Name sort

    $information = {foreach ($vm to $vm_list)

    $network_adapter_information = get-NetworkAdapter - VM $vm

    $vm | Select Name,PowerState,ResourcePool,@{N="Path; E=       {$_. ExtensionData.Summary.Config.VmPathName}},@{N="NetworkAdapter '; E = {[string]: join (":", ($network_adapter_information |))} %{$_. {{(Nom + "," + _.NetworkName $}))}}, @{N = "MacAddress"; E = {[string]: join (",", ($network_adapter_information | % {$_.}))} MacAddress}))}}

    }

    Step 2

    # Unsubscribe virtual machines

    Remove-VM - VM $vm_list-RunAsync Verbose - confirm: $false

    Step 3

    $cluster = get-group 'b '.

    {foreach ($vm to $inventory)

    $ESXHost = get-Cluster $cluster | Get-VMHost | Select - 1 first

    New-VM - VMFilePath $vm. VMXPath - VMHost $ESXHost - location $vm. Folder - ResourcePool (Get-Cluster $cluster |) Get-ResourcePool $vm. ResourcePool)

    }

    # Save virtual machines

    foreach ($info in $information)

    {

    $vmxpath = $info. Path

    $resource_pool = $info. ResourcePool.Name

    New-VM - ResourcePool (ResourcePool-Get-name $resource_pool) VMFilePath - $vmxpath - RunAsync-Verbose | Out-Null

    }

    Step 4

    # Put the network cards

    foreach ($info in $inventory)

    {

    foreach ($network_information in ($info.NetworkAdapter - split ":"))))

    {

    $virtual_machine = $info | %{$_. Name}

    $network_adapter = ($network_information-split ",") [0]

    $network_vlan = ($network_information-split ",") [1]

    Get-VM-name $virtual_machine | Get-NetworkAdapter-name $network_adapter | Together-NetworkAdapter - NetworkName $network_vlan-Verbose-RunAsync-confirm: $false | Out-Null

    }

    }

    # Start the virtual machines

    foreach ($vm to $vm_list)

    {

    Start-VM - VM $vm. Name-RunAsync Verbose - confirm: $false | Out-Null}

    }

    Thanks in advance for any help.

    Hi all

    I made some changes to the script and it worked for me. We have added a host on the destination with all exchanges and storage mapped vCenter.

    $vm_list = get-Cluster-name 'Site B - b | Get - VM | Name sort

    $information = {foreach ($vm to $vm_list)

    $network_adapter_information = get-NetworkAdapter - VM $vm

    $vm | Select Name,PowerState,ResourcePool,@{N="Path; E=       {$_. ExtensionData.Summary.Config.VmPathName}},@{N="NetworkAdapter '; E = {[string]: join (":", ($network_adapter_information |))} %{$_. {{(Nom + "," + _.NetworkName $}))}}, @{N = "MacAddress"; E = {[string]: join (",", ($network_adapter_information | % {$_.}))} MacAddress}))}}

    }

    # Unsubscribe virtual machines

    Remove-VM - VM $vm_list-Verbose - confirm: $false

    $cluster = get-Cluster "Site A - clustera.

    {foreach ($vm to $information)

    $ESXHost = get-Cluster $cluster | Get-VMHost | Select - 1 first

    New-VM - VMFilePath $vm.path - VMHost $ESXHost - location $vm. Folder - ResourcePool (Get-Cluster $cluster |) Get-ResourcePool $vm. ResourcePool)

    }

    # Save virtual machines

    foreach ($info in $information)

    {

    $vmxpath = $info. Path

    $resource_pool = $info. ResourcePool

    New-VM - ResourcePool (ResourcePool-Get-name "test1") VMFilePath - $vmxpath - RunAsync-Verbose | Out-Null

    }

    # Put the network cards

    .

    foreach ($info in $information)

    {

    foreach ($network_information in ($info.NetworkAdapter - split ":"))))

    {

    $virtual_machine = $info | %{$_. Name}

    $network_adapter = ($network_information-split ",") [0]

    $network_vlan = ($network_information-split ",") [1]

    Get-VM-name $virtual_machine | Get-NetworkAdapter-name $network_adapter | Together-NetworkAdapter - NetworkName $network_vlan-Verbose - confirm: $false | Out-Null

    }

    }

    # Start the virtual machines

    foreach ($vm to $vm_list)

    {

    Start-VM - VM $vm. Name-RunAsync Verbose - confirm: $false | Out-Null

    }

    Hope this will help many of you.

  • Import the Virtual Machine Notes to new vCenter 5.1

    Is there a way to import the Virtual Machine Notes to a new vCenter attribute? I am able to export notes to help

    $vm = get - VM | Select Name, Notes

    $vm | Export-csv notes.csv

    but cannot find a way to import...

    Thanks Andy

    Hi Andy,.

    to import the attribute information about the virtual machine in a new vCenter server, you can use the following script PowerCLI:

    Import-CSV -Path Notes.csv |
    ForEach-Object {
      Get-VM $_.Name |
      Set-VM -Notes $_.Notes -Confirm:$false
    }
    
  • Manually migrate virtual machines from the host is not responding.

    I have a 3 host cluster.  One of the guests became unresponsive.  Continue to run all the virtual machines connected to the host is not responding and I can't RDP for them.  I am able to SSH to the host does not respond, but not connect via vCenter.

    Restart the services will cancel the virtual machines running?  If this isn't the case, then what is the command to restart the services?

    What is the best plan to manually migrate those virtual machines for the other two hosts?

    SSH, cd to \usr\sbin, then run "services.sh restart" (without the quotes). Which will restart management services, with no impact to your VM. Then you should be able to re - connect with Vcenter.

  • How to migrate virtual machines from the virtual server MS in Lab Manager?

    We migrate our environment. So primary question is - how to migrate our MS VirtualServer VMs to Lab Manager?

    BR

    Hello

    Have you tried using using VMware vCenter Converter?  It can take Virtual PC machines and turn them into VMs VMware (.vmdks), you should then be able to manufacture models of VMware virtual machines, import them into the Lab Manager and voila.

  • Restore the virtual machine to the new ESX box

    Hello

    I'm new on this.

    I recived a set of virtual machines to another place and I want to restore to the newly created ESX. I followed the steps below to restore.

    Recived files:

    XX_YY. NVRAM

    XX_YY.VMDK

    XX_YY.vmsd

    XX_YY.vmtx

    XX_YY - flat hard

    After I copy all the files above using WinSCP, I could find the "XX_YY.vmdk" is copied to the XX_YY.vmdk.flatfile' which I have one copy of another on the server with the old name using the command #cp XX_YY.vmdk.flatfile XX_YY.vmdk?

    I copied all of the above files using winscp client.

    Open the VI client and browse the storage

    right click on the "XX_YY.vmtx" and add to the inventory

    Add to the popup to open inventory and asks me to enter the name of the template and that I have provided.

    In the next window, I click on finsih, I see the error: "the operation is not supported on the object.

    Any Document that would tell me more info on how to restore / import VM in my newly created ESX box?

    Thanks in advance

    Krishna

    The files are in the format of model already if not the following.

    Simply import the vmdk into ESX using "vmkfstools", then search for the data store, right-click on the vmtx file and select Add to the inventory. Also, you can simply rename the vmtx to vmx file.

    Carl

  • PowerCLI script to deploy virtual machines from a template

    Hey all,.

    I have this part done script. My questions are:

    1. I want to know the nubmber of "Windows XP - X" are currently deployed, so I want to add. I don't want to use a CSV format or any other to inmport of. Yes, I am that lazy. For some reason I can't understand it!

    2. on the line I would askes 'what esx host you want to use' just hit '1' for esx1 vs type the name of the host.

    The questions above can be made? If so HELP! I worked on it for days. Thank you!

    1. Yes I have a Connect-VIServer-Server blah blah blah... Just removed.

    {

    {

    $freespaceCalc = @{name = "FreespaceGB"; Expression = { : tour ($_.)} (FreeSpaceMB * 1 MB/1 GB)}}

    $capacityCalc = @{name = "CapacityGB"; Expression = { : tour ($_.)} (CapacityMB * 1 MB/1 GB)}}

    1. User agents how manny are required

    $agentTotal = Read-Host "Enter the number of Agents WinXp you need."

    $agnetTotal = $agentTotal

    Get-Datastore. Select Name, $freespaceCalc, $capacityCalc | Sort-Object Name. FT - force - AutoSize. Out-Default

    $datastore = Read-Host "what data store you want to use?

    Get-VMHost | Select-Object Name. Sort name | FT - force - AutoSize. Out-Default

    $esxHost = Read-Host "what Esx host you want to use?

    $XP is get - VM - name WinXP-*.

    $totalXPCount = @($XP). Length

    $totalXP = (1 + $totalXPCount)

    for ($adt = ($totalXP + $agentTotal); $totalXP - $adt lt; $totalXP ++) {}

    If ($totalXPCount - eq $adt)

    {

    breaking

    }

    $machineName = "WinXP-$totalXPCount.

    $template = "Template XP-32.

    $osspec = get-OSCustomizationSpec XP

    foreach ($vm to $machineName)

    {$vm = New - VM - name $vm - model $template - host $esxHost - store of data $datastore - OSCustomizationSpec $osspec | start-vm}

    }

    The $hostIndex variable contains the index in the table $hostList of the selected host.

    This is the script has been fixed.

    Note that the SW forum has problems with hooks for you better use the attached file.

    # Current "** Create Win XP **";
    $freespaceCalc = @{ Name = "FreespaceGB"; Expression = { [Math]::Round($_.FreeSpaceMB * 1MB / 1GB ) } }
    $capacityCalc = @{ Name = "CapacityGB"; Expression = { [Math]::Round($_.CapacityMB * 1MB / 1GB) } }
    
    # User enters how manny agents are requred
    $agentTotal = [int](Read-Host "Enter how many WinXp Agents you need.")
    
    $totalXPCount = (Get-VM -Name WinXP-* | Measure-Object).Count
    if($totalXPCount -lt $agentTotal){
         for($adt = $totalXPCount + 1; $adt -le $agentTotal; $adt++){
    
              Get-Datastore | Select Name, $freespaceCalc, $capacityCalc |Sort-Object Name | ft -Force -AutoSize| Out-Default
              $datastore = Read-Host "What DataStore do you want to use?"
    
              $hostList = Get-VmHost | select Name | Sort-Object
              $i = 1
              $hostList | % {Write-Host $i ":" $_.Name; $i++}
              $hostIndex = Read-Host "Enter a number (1 -" $hostList.Count ")"
              Write-Host "You selected host" $hostIndex "with hostname" $hostList[$hostIndex - 1].Name
    
              $machineName = "WinXP-$adt"
              $template = "XP-32 Template"
              $osspec = Get-OSCustomizationSpec XP
    
              foreach ($vm in $machineName){
                   $vm = New-VM -Name $machineName -Template $template -Host $hostList[$hostIndex - 1].Name -Datastore $datastore -OSCustomizationSpec $osspec |start-vm }
         }
    }
    
  • List not updated virtual machines after the migration of the virtual machine to a different data store

    My vSphere infrastructure 5 uses several data stores.

    Two data warehouses are associated with NFS on different NAS shares.

    I migrate VM to a data to another store.

    The navigation data store, I see that the files are moved from the old data store to the new and that no file belonging to the migrated VM still does exist on the old data store.

    If I look at the list of VMs on the old data store, I still see the old VM.

    I see it in the list of the virtual machine on the new data store as well.

    I checked that no .iso no pagefile is in the old data store.

    How can I update the list of the virtual machine on the old data store?

    Above all, how can I safely delete the old data store by ensuring that the virtual machine works very well on the new data store and I don't lose anything?

    Concerning

    Marius

    This use of data store 'Phantom' is usually observed, if the current configuration of the virtual computer points to the 'old' data store (diskette, CD-ROM) or the virtual machine contains snapshots where - at the time where tone have been created - the VM has had these references. Once the snapshots are deleted from data store 'ghost' will go away from summary of the virtual machine.

    André

  • Method to move the virtual machines in the data store temporary so I can rebuild pool recommended NFS

    Our current data store is a mounting NFS on Nexenta (zfs), which has a pool, I need to rebuild (migration of raidz2 to mirror striped for performance). Initially, I was relying on the judgment of all virtual machines, create a new pool, copy (cp - r) of the Nexenta console all virtual machines to the new pool, recreating the pool mirror and then copy (cp - r) all the data back.

    I have seen several discussions on this topic and seems like the simplest method would be to use the feature to "Migrate" so that the virtual machines are not fragmented. However in some of my pre-test when I copy a virtual machine between the basins of the Nexenta console it appears (from the data store Explorer) to initially create the vmdk provisioned and then once completed it copy looks too thin.

    I hope that I can simply copy the Nexenta console, using the option "Migrate" in vCenter on each of my 40 MV looks like it would be * quite * tedious compared to the simple issuance of an order of 'cp - r' and leave all the copies of VMs (1.5 to) during the night and then adding them to each host.

    Does anyone have experience with this? Or maybe a way to generate scripts easily (?) the option "migrate" in vCenter?

    Thank you all!

    You can select multiple VMs in vCenter regularly using CTRL + click or shift + click and both migrate them as long as they have the same storage destination.  You can also schedule it as a task.    Add manually each computer virtual back in hand is not less painful than migrating individually, anyway.

  • Migrate virtual machines from HP G7(single host) for HP G8 (Cluster) without shared storage

    Hello

    I have 2 esxi host (hp dl 380 G8) and put them in a cluster and other host esxi (dl 380 g7) and I have no shared storage and use local disks just now I must spend my VM G7 server a cluster of the G8 but I want to know I can join my cluster g8 g7 and migrate web vmware machines without any downtime?

    I want to know can migrate without downtime with localdisk? I have no shared storage

    Best regards

    BAbak

    can I join g7 to my cluster of the g8

    You can mix into clusters hosts all desired, even Intel and AMD at least that you enable EVC on the cluster (of course, HA or DRS require shared storage compatible/CPU). However, you need not to have even just cluster hosts to migrate virtual machines through vMotion between them.

    migrate web vmware machines without any downtime?

    Don't know what this "web vmware' but yes, because ESXi 5.1, you can use"enhanced vMotion"to live migrate virtual machines without service interruption from one host to another, even without shared storage:

    Migration with vMotion in environments without shared storage

    The usual vMotion requirements apply. Also you can only live migrate virtual machines from the old host to the new hosts because of different generations of CPU (and back as long as you don't have bike powered virtual machines on new hosts).

  • Best way to migrate virtual machines to new ESXi hosts with a different configuration of networking.

    We currently have a cluster of 6 Dell machines that move VM 120 or so on ESXi 5.5. Networking consists of a dVswitch with 6 uplinks that map to 6 x 1gig physical NETWORK adapters on each host ESXi... These are grouped into 3 trunks / gal, so we have 2 GB by SHIFTING of the bandwidth and failover. The LAGS are configured as follows:

    LAG1

    Traffic to our (NFS) shared data store and management of ESXi. (vmk0)

    LAG2

    Access to the network of the VM - groups of different ports on different VLANS

    LAG3

    vMotion (vmk1)

    We just bought 6 new Dell machines that have connections fiber 2 x 10gig each. The idea is to bring together in a 20Ggig LAG by machine that will handle all of the traffic, so traffic NFS data store, network traffic from the VM, vMotion and traffic management ESXi.


    What is the best way to migrate the virtual machine in the cluster existing to the new machines? Many of the virtual machine are essential, so we cannot stop time.


    Can I create the new DELAY on existing dVswitch and put it as an auxiliary card? I'll be able to do it for all 3 of the above both above LAGS?


    Thanks for the info Alistar, it's almost here. The bit that was me stumping was that after establishing a new dVswitch I received messages that the new dvSwitch was not reachable on the old host, when I tried to migrate the virtual computer.

    The solution (with the permission of VMware Support) was that I need to add the two dVswitches to one of the old hosts, then assign a physical alternative on this host uplink to a temporary 3 uplink on the new dVswitch. I then tag all the relevant VLAN that uplink.

    This way I can first migrate the virtual machine to the new dVswitch networking so I can move the computer to the new cluster.

    Obviously I can only migrate from old to new cluster with a single host. each virtual machine must be a double for the host with 2 switches, and then to the new cluster. I also had to have the two dVswitches to the same version.

    Fortunately, I had a physical rising spare on the hosts of the old, otherwise I would have had to break one of the trunks and re-use of one of these uplinks.

    Oh and be aware, impossible to use the same names for groups of ports 2 DV switches, they must be unique!

    Nick

  • How to move a virtual machine in the warehouses of data on ESXi 4.1.0

    All,

    I need to move a virtual machine from a data store to another on the same host.  I have two drive bays where each array disk is its data store on.  However, one of them has problems if I want to move two of the virtual machine to a data to another store.

    Is it possible through vsphere and if so, how?

    My host is a:

    Dell PowerEdge 2950

    vSphere Client Version 4.1.0

    VMware ESXi 4.1.0

    Hello

    1. turn off the virtual machine to be moved

    2. right click on the virtual machine, and then select Remove in the inventory (the fleeting VM on the data store)

    3. browse the data store, in the left pane, right-click on the folder of the virtual machine and select move to...

    4 browse the new data store, open the VM folder

    5. save the .vmx file

    6. start the virtual machine in the new location and make sure that it works.

  • Cluster VI3 and vSphere Cluster (migrate virtual machines)

    I have a VI3 and vSphere cluster.  Could I just drag-and - drop my virtual machines to the new Cluster or do I have to upgrade the virtual machines ' hardware of the v4 to v7?

    Thanks in advance

    1. you don't have to upgrade the virtual machine hardware, it is optional.

    2. you do not have to create new cluster, simply upgrade existing by-host. Virtual machines with hardware v4 can be VMotion'ed between 3.5 and 4.0 hosts

    ---

    MCSA, MCTS, VCP, VMware vExpert 2009

    http://blog.vadmin.ru

  • How can I move XP on Boot Camp partition in a virtual machine on a new iMac?

    Yesterday, I bought a new iMac to replace an iMac Core Duo older. I was running XP on Boot Camp partition and using Fusion to access. As the new iMac custom supports XP on Boot Camp partition, I want to use VMWae Fusion to run XP in a virtual machine on the new computer. Is there a way to get the current state of XP (with all the security and the SP3 updates) now on my Boot Camp partition, more than one virtual machine on the new computer?

    No offense intended... Have you even read the linked web page and or documentation of Paragon go virtual?

    In short, could start the Boot Camp partition natively, install and run Paragon go virtual to create a Virtual Machine in VMware Boot Camp partition and run the resulting Virtual Machine with VMware Fusion on the new Mac.

    Then you can do what you want with the old computer after deleting the partition Boot Camp with Boot Camp Assistant as you can't keep physical installation on the old system if your running a virtual copy of it on another system without purchasing another license from Microsoft.  Also, you will need to reactivate Windows XP and other software that follows what material it was initially installed on the virtual machine.

    Note: You can even create a Virtual Machine from the Boot Camp partition with VMware Fusion in two different ways, or even to use VMware vCenter Converter such as the use of virtual Paragon to go however I strongly recommend using Paragon go virtual methods due to what I consider a major flaw in the way they create the virtual hard disk when you use the command import on the Boot Camp partition and a rate higher failure by using the other methods/software VMware VMware compared to Paragon go virtual.  For the non-technical user Paragon go virtual is the best way to go IMO and the entire process usually takes less time, then the methods of VMware.

  • PowerCLI script - new virtual machine of the model

    Hi all

    I am very new to power CLI scripting, and these days, that I read a lot of help to automate the creation of a new virtual machine based on the model of the virtual machine.  Script that is not that hard, even location new virtual machine on a particular data and in a particular resource pool store is not difficult.  For this I came up with this very basic script/command:

    "New-VM - ResourcePool < resource_pool > - < folder_name > location - Datastore < datastore_name > - name < VM_name > - < template_name >"model

    However, I came across some problems that I can't find information in help or in the forums.  Problem with the above command is VM will be created in the pool of appropriate resources and file as long as they are unique, but if there are multiple instances of resource pool or a folder with the same name as the script spits out a mannequin.

    So for example if I want to create a new virtual machine to the location following Data_Centre = > RootFolder1 = > SubFolder1 = > SubFolder2 and SubFolder2 name is unique that no problem, the virtual machine is created at this location.  However, if the SubFolder2 exists in Data_Centre = > RootFolder2 = > SubFolder1 as well as the virtual machine is created in the folder root of the location of the model.  For example, if the model is in "DC = > Folder1 = > Subfolder1 = > Subfolder2 ' the virtual machine will be created in the folder Folder1

    Any suggestions on how to ensure that the virtual machine is created in the desired folder/location as well as a list of resources?  In my view, there are really smart guys here and I suspect that this issue would not be a problem at all.  Any help would be appreciated.

    See you soon

    It is not a matter of following the right path.

    You can use the location setting to get the exact folder you want. For example

    $dc = get-data center-name DC1

    $folder = get-file-name Folder1-location $dc

    $subfolder = get-file-name Folder2-location $Folder1

    or

    $dc = get-data center-name DC1

    $subfolder = get-file-name Folder2-location $dc

    You will need to find a "place" in the path to your destination folder where it will be unique.

Maybe you are looking for