Powershell 从私有 IP 获取 Azure VM 名称
Powershell get Azure VM name from private IP
我想从 IP 地址获取 Azure VM 名称,我尝试按照以下步骤从 IP 获取 NIC 名称并找到 NIC 附加到哪个 VM。
Get-AzureRmNetworkInterface | ForEach { $Interface = $_.Name; $IPs = $_ | Get-AzureRmNetworkInterfaceIpConfig | Select PrivateIPAddress; Write-Host $Interface $IPs.PrivateIPAddress }
是否有更好的方法直接使用 VM private 获取 VM 名称?
Is there a better way to get VM name directly using VM private ?
您的意思是使用 VM 的私有 IP 地址获取 VM 的名称?
如果我理解正确的话,我们可以使用这个 PowerShell 来获取虚拟机的名称:
PS C:> get-azurermvm
ResourceGroupName Name Location VmSize OsType NIC ProvisioningState
----------------- ---- -------- ------ ------ --- -----------------
RGNAME jason eastus Standard_A1 Linux jason66 Succeeded
PS C:\> $a = ((Get-AzureRmNetworkInterface | ?{$_.IpConfigurations.PrivateIpAddress -eq '10.0.0.4'}).VirtualMachine).ID
PS C:\> $vmname = ($a -split '/') | select -Last 1
PS C:\> $vmname
jason
您可以使用元数据服务通过 Ansible 执行此操作:
---
- name: Test Playbook
hosts: 10.1.0.4
gather_facts: no
tasks:
- name: Call VM metadata service to get compute fields.
uri:
url: http://169.254.169.254/metadata/instance/compute?api-version=2017-08-01
return_content: yes
headers:
Metadata: true
register: vm_metadata
- set_fact:
vm_name: "{{ vm_metadata.json.name }}"
resource_group: "{{ vm_metadata.json.resourceGroupName }}"
- debug:
msg: Adding disk to <RG={{ resource_group }}> <VM={{ vm_name }}>
结果是:
TASK [debug] *************************************************************************************************************************************************************
ok: [test-vm.eastus.cloudapp.azure.com] => {
"msg": "Adding disk to <RG=test-rg> <VM=test-vm>"
在此处查看 API 详细信息:
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service
我想从 IP 地址获取 Azure VM 名称,我尝试按照以下步骤从 IP 获取 NIC 名称并找到 NIC 附加到哪个 VM。
Get-AzureRmNetworkInterface | ForEach { $Interface = $_.Name; $IPs = $_ | Get-AzureRmNetworkInterfaceIpConfig | Select PrivateIPAddress; Write-Host $Interface $IPs.PrivateIPAddress }
是否有更好的方法直接使用 VM private 获取 VM 名称?
Is there a better way to get VM name directly using VM private ?
您的意思是使用 VM 的私有 IP 地址获取 VM 的名称? 如果我理解正确的话,我们可以使用这个 PowerShell 来获取虚拟机的名称:
PS C:> get-azurermvm
ResourceGroupName Name Location VmSize OsType NIC ProvisioningState
----------------- ---- -------- ------ ------ --- -----------------
RGNAME jason eastus Standard_A1 Linux jason66 Succeeded
PS C:\> $a = ((Get-AzureRmNetworkInterface | ?{$_.IpConfigurations.PrivateIpAddress -eq '10.0.0.4'}).VirtualMachine).ID
PS C:\> $vmname = ($a -split '/') | select -Last 1
PS C:\> $vmname
jason
您可以使用元数据服务通过 Ansible 执行此操作:
---
- name: Test Playbook
hosts: 10.1.0.4
gather_facts: no
tasks:
- name: Call VM metadata service to get compute fields.
uri:
url: http://169.254.169.254/metadata/instance/compute?api-version=2017-08-01
return_content: yes
headers:
Metadata: true
register: vm_metadata
- set_fact:
vm_name: "{{ vm_metadata.json.name }}"
resource_group: "{{ vm_metadata.json.resourceGroupName }}"
- debug:
msg: Adding disk to <RG={{ resource_group }}> <VM={{ vm_name }}>
结果是:
TASK [debug] *************************************************************************************************************************************************************
ok: [test-vm.eastus.cloudapp.azure.com] => {
"msg": "Adding disk to <RG=test-rg> <VM=test-vm>"
在此处查看 API 详细信息: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service