VMWare vSphere 7.0.3环境通过PowerCLI批量发布openeuler22.03LTS系统虚拟机

news2024/9/24 14:50:02

本文尝试在VMWare vSphere 7.0.3环境中,通过PowerCLI批量发布openeuler22.03LTS系统虚拟机,以减轻维护人员的工作量。

一、在维护机上安装PowerCLI

1、点击以下链接,跳转到VMWarePowerCLI官方页面

VMware PowerCLI下载链接

2、点击下载链接,当前版本为13.1.0

  3、将下载包进行解压

 

4、可以看到解压后的文件共有810MB,还是蛮大的,因此需检查C盘是否有足够的空间

 

5、执行$env:PSModulePath查看PowerShell的缺省模块路径

Windows PowerShell
版权所有 (C) 2014 Microsoft Corporation。保留所有权利。

PS C:\Users\Administrator> $env:PSModulePath
C:\Users\Administrator\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system
32\WindowsPowerShell\v1.0\Modules\
PS C:\Users\Administrator> 

  6、将解压后的文件移动到C:\Windows\system32\WindowsPowerShell\v1.0\Modules\目录下

7、使用以下"Import-Module  VMware.PowerCLI"命令安装 VMWare PowerCLI:

Import-Module  VMware.PowerCLI

8、收到“提示至少需要使用 Windows PowerShell 版本‘5.1’才能运行”的错误信息

Windows Server 2012R2自带的PowerShell版本为Powershell 4.0。(可以打开 PowerShell 控制台,并键入 `$PSVersionTable.PSVersion` 命令, PowerShell 版本)。而PowerCLI 13.1.0需要PowerShell 5.1,因此需要对Powershell进行升级。

9、从 Microsoft 官方网站下载 Windows PowerShell 5.1

转到以下网址并下载适用于维护机系统Windows的 WMF(Windows Management Framework):

微软官方链接

9、维护机是Windows server 2012 R2 x64,因此选择Win8.1-x64的版本

10、安装 PowerShell 5.1 

 

 11、安装完成需重启,重启后可以查看当前版本已更新

12、继续安装PowerCLI

 13、Ctrl+C,结束任务,配置忽略证书验证

指令:Set-PowerCLIConfiguration -InvalidCertificateAction Ignore 

14、继续安装

 显示以上信息,即表示PowerCLI安装完成

二、通过PowerCLI连接vCenter

1、测试连接VCenter,指令:

 Connect-VIServer -Protocol https -User 'administrator@vsphere.local' -Password "yourpassword" -Server 192.168.X.Y

 

报“无法为SSL/TLS安全通道与颁发机构XXXXX建立信任关系”

2、设置忽略无效证书

PS C:\Windows\system32> Set-PowerCLIConfiguration -InvalidCertificateAction Igno
re

Perform operation?
Performing operation 'Update VMware.PowerCLI configuration.'?
[Y] 是(Y)  [A] 全是(A)  [N] 否(N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助
(默认值为“Y”):

Scope    ProxyPolicy     DefaultVIServerMode InvalidCertificateAction  DisplayD
                                                                       eprecati
                                                                       onWarnin
                                                                       gs
-----    -----------     ------------------- ------------------------  --------
Session  UseSystemProxy  Multiple            Ignore                    True
User                                         Ignore
AllUsers

3、再次测试连接vCenter

 

返回以上信息即表示连接VC成功

4、尝试获取宿主机信息进行功能测试:

指令:Get-VMHost 

可以正常看到返回的宿主机清单

三、创建openeuler虚拟机的自定义规范

1、在VC上点击主页-策略和配置文件

2、选择虚拟机自定义规范

3、新建虚拟机自定义规范

 4、输入自定义域名

 5、输入时区信息

6、输入网络配置信息 

7、输入DNS信息

 8、完成虚拟机自定义规范

9、确认相关数据

四、通过配置通过PowerCLI批量自动化新建虚拟机

1、编写batmkvms.ps1文件,内容如下:

#fiilename:batmkvms.ps1
##__author__='daigjianbing'

$vcenterip = "192.168.188.82"
$vcenteruser = "administrator@vsphere.local"
#获取密码,避免明文保存
$vcenterpw  = Read-Host "Please enter your password of the vcenter: $vcenterip  username:  $vcenteruser"

#连接服务器
Write-Host "Connect-VIServer -Protocol https -User $vcenteruser -Password $vcenterpw -Server $vcenterip"
#测试下句前面加#,实作时去掉
#Connect-VIServer -Protocol https -User $vcenteruser -Password $vcenterpw -Server $vcenterip

#虚拟机清单文件为脚本同目录下的“batmkvms.csv”文件
$vms_listfile = ".\batmkvms.csv"
$vms = import-csv $vms_listfile
foreach ($vm in $vms)
    {
    #读取配置文件中的相关配置
	#模板
	$template = $vm.Template
	#拟放置宿主机
	$vmhost = $vm.Host
	#虚拟机名称
    $vmname = $vm.Name
	#vCpu核数
	$cpu = $vm.CPU
	#内存大小,以GB为容量单位
	$memory = $vm.Memory
	#缺省使用系统盘,如果需要数据盘,配置Disk4Data值,以GB为容量单位
	$Disk4Data = $vm.Disk4Data
	#拟放置虚机存储位置
	$datastore = $vm.Datastore
	#虚拟网络名称
	$network = $vm.Vlan
	#IP
	$IP = $vm.IP
	#子网掩码
	$NetMask = $vm.MASK
	#网关
	$Gateway = $vm.Gateway
	#描述
	$Notes = $vm.Description
	#虚拟机自定义规范
    $myspec = $vm.VMspec

    
    #将IP信息添加到自定义规范里面
    Write-Host "Get-OSCustomizationSpec $myspec | Get-OSCustomizationNicMapping | Set-OSCustomizationNicMapping -IpMode UseStaticIP -IpAddress $IP -SubnetMask $NetMask -DefaultGateway $Gateway"
    #测试下句前面加#,实作时去掉
    #Get-OSCustomizationSpec $myspec | Get-OSCustomizationNicMapping | Set-OSCustomizationNicMapping -IpMode UseStaticIP -IpAddress $IP -SubnetMask $NetMask -DefaultGateway $Gateway
    
    
    #使用模板及规范新建虚机
    Write-Host "New-VM -Name $vmname -vmhost $vmhost -Portgroup $network -Datastore $datastore -Template $template -OSCustomizationSpec $myspec"
    #测试下句前面加#,实作时去掉
    #New-VM -Name $vmname -vmhost $vmhost -Portgroup $network -Datastore $datastore -Template $template -OSCustomizationSpec $myspec
	
	
    #设置虚机CPU、内存和描述
    Write-Host "Get-VM -Name $vmname|Set-VM  -NumCPU $cpu -MemoryGB $memory -Notes $Notes -Confirm:$false"
    #测试下句前面加#,实作时去掉
    #Get-VM -Name $vmname|Set-VM  -NumCPU $cpu -MemoryGB $memory -Notes $Notes -Confirm:$false

    #如果数据盘大小不为0则增加数据盘
    #测试下面2句前加#,实做时去掉
    #if ($Disk4data -gt 0)
    #   { Get-VM -Name $vmname  | New-HardDisk -CapacityGB $DiskDisk4data -Persistence persistent }
	
    #调整完成后自动启动虚拟机
    #测试下句前面加#,实作时去掉
    #Get-VM -Name $vmname |Start-VM
    
    }

2、编写“batmkvms.csv”文件,内容如下:

3、 “batmkvms.csv”文件可用WPS或Excel编写,实际存储为csv文件,也可用记事本等文本编辑器打开,内容如下:

Template,Host,Name,CPU,Memory,Disk4Data,IP,MASK,Gateway,Vlan,Description,Datastore,VMspec
Temp-openEuler-22.03-withJX-ssh9.3,192.168.121.4,GZGL_192.168.122.6_euler,4,8,0,192.168.122.6,255.255.255.0,192.168.122.1,VLAN_2183,,EBS-CT-VMware-ShuiTu6-ZTE1-Lun-45,euler22.03LTS

4、测试脚本

Microsoft Windows [版本 6.3.9600]
(c) 2013 Microsoft Corporation。保留所有权利。

d:\vmware\批量创建虚拟机脚本>powershell
Windows PowerShell
版权所有 (C) 2016 Microsoft Corporation。保留所有权利。

PS D:\vmware\批量创建虚拟机脚本> .\batmkvms.ps1
Please enter your password of the vcenter: 192.168.188.82  username:  administrat
or@vsphere.local: mypasswd
Connect-VIServer -Protocol https -User administrator@vsphere.local -Password mypasswd -Server 192.168.188.82
Get-OSCustomizationSpec euler22.03LTS | Get-OSCustomizationNicMapping | Set-OSCu
stomizationNicMapping -IpMode UseStaticIP -IpAddress 192.168.122.6 -SubnetMask 2
55.255.255.0 -DefaultGateway 192.168.122.1
New-VM -Name GZGL_192.168.122.6_euler -vmhost 192.168.121.4 -Portgroup VLAN_2183
 -Datastore EBS-CT-VMware-ShuiTu6-ZTE1-Lun-45 -Template Temp-openEuler-22.03-wit
hJX-ssh9.3 -OSCustomizationSpec euler22.03LTS
Get-VM -Name GZGL_192.168.122.6_euler|Set-VM  -NumCPU 4 -MemoryGB 8 -Notes  -Con
firm:False
PS D:\vmware\批量创建虚拟机脚本>

 可见生成指令正常。

5、将脚本中标注了“测试下句前面加#,实作时去掉”字样下面语句前的#注释去掉,进行实际执行测试,报错:

New-VM : 2023/8/1 17:32:24      New-VM          Could not find Template with nam
e 'Temp-openEuler-22.03-withJX-ssh9.3'.

6、用指令:Get-Template列出所有模板,确实没有找到'Temp-openEuler-22.03-withJX-ssh9.3',检查发现,'Temp-openEuler-22.03-withJX-ssh9.3'是虚拟机,未转成模板

6、将'Temp-openEuler-22.03-withJX-ssh9.3'虚拟机转换为模板,继续测试,报错:

New-VM : 2023/8/1 17:37:05      New-VM          Could not find VirtualPortGroupB
ase with name

 7、使用指令: Get-VirtualPortGroup 命令列出所有可用的虚拟端口组,发现有VLAN_2183端口组,查阅VMWare官方文档,发现Portgroup是针对分布式交换机的端口组,而本环境中使用了标准交换机,应使用NetworkName参数,官方文档解释如下:

NetworkNameString[]Specifies the networks to which you want to connect the new virtual machine. Specifying a distributed port group name is obsolete. Use the Portgroup parameter instead.

8、将脚本中的所有“-Portgroup”替换为“-NetworkName”,再次运行脚本,界面上出来克隆虚拟机进度条,成功在望

 9、稍等一会儿,虚拟机克隆完成,相关信息如下


PS D:\vmware\批量创建虚拟机脚本> .\batmkvms.ps1
Please enter your password of the vcenter: 192.168.188.82  username:  administrator@vsphere.local: mypasswd
Connect-VIServer -Protocol https -User administrator@vsphere.local -Password mypasswd -Server 192.168.188.82

Name                           Port  User
----                           ----  ----
192.168.188.82                 443   VSPHERE.LOCAL\Administrator
Get-OSCustomizationSpec euler22.03LTS | Get-OSCustomizationNicMapping | Set-OSCustomizationNicMapping -IpMode UseStaticI
P -IpAddress 192.168.122.6 -SubnetMask 255.255.255.0 -DefaultGateway 192.168.122.1

Dns                       :
Wins                      :
SpecId                    : euler22.03LTS
Spec                      : euler22.03LTS
SpecType                  : Persistent
NetworkAdapterMac         :
Position                  : 1
IPMode                    : UseStaticIP
IPAddress                 : 192.168.122.6
SubnetMask                : 255.255.255.0
DefaultGateway            : 192.168.122.1
AlternateGateway          :
Ipv6Prefix                :
Ipv6Address               :
Ipv6Mode                  : UseDhcp
Ipv6VcApplicationArgument :
VCApplicationArgument     :
Id                        : /VIServer=vsphere.local\administrator@192.168.188.82:443/OSCustomizationNicMapping=OSCustom
                            izationNicMappingImpl-euler22.03LTS-Persistent-1/
Ipv6Gateway               :
Ipv6AlternateGateway      :
Uid                       : /VIServer=vsphere.local\administrator@192.168.188.82:443/OSCustomizationNicMapping=OSCustom
                            izationNicMappingImpl-euler22.03LTS-Persistent-1/
ExtensionData             : VMware.Vim.CustomizationAdapterMapping
Version                   : 1

New-VM -Name GZGL_192.168.122.6_euler -vmhost 192.168.121.4 -NetworkName VLAN_2183 -Datastore EBS-CT-VMware-ShuiTu6-ZTE1-Lu
n-45 -Template Temp-openEuler-22.03-withJX-ssh9.3 -OSCustomizationSpec euler22.03LTS
警告: The 'Version' property of VirtualMachine type is deprecated. Use the 'HardwareVersion' property instead.

PowerState              : PoweredOff
Version                 : Unknown
HardwareVersion         : vmx-15
Notes                   :
Guest                   : GZGL_192.168.122.6_euler:
NumCpu                  : 2
CoresPerSocket          : 1
MemoryMB                : 2048
MemoryGB                : 2
VMHostId                : HostSystem-host-4429
VMHost                  : 192.168.121.4
VApp                    :
FolderId                : Folder-group-v22
Folder                  : vm
ResourcePoolId          : ResourcePool-resgroup-4102
ResourcePool            : Resources
PersistentId            : 502b1bdf-0a44-dfed-defe-68dc5684ab47
UsedSpaceGB             : 16.000760157592594623565673828
ProvisionedSpaceGB      : 18.192433938384056091308593750
DatastoreIdList         : {Datastore-datastore-19849}
HARestartPriority       : ClusterRestartPriority
HAIsolationResponse     : AsSpecifiedByCluster
DrsAutomationLevel      : AsSpecifiedByCluster
VMSwapfilePolicy        : Inherit
VMResourceConfiguration : CpuShares:Normal/2000 MemShares:Normal/20480
GuestId                 : other4xLinux64Guest
CreateDate              : 2023/8/1 11:10:08
SEVEnabled              :
BootDelayMillisecond    : 0
MigrationEncryption     : Opportunistic
MemoryHotAddEnabled     : False
MemoryHotAddIncrement   :
MemoryHotAddLimit       :
CpuHotAddEnabled        : False
CpuHotRemoveEnabled     : False
Name                    : GZGL_192.168.122.6_euler
CustomFields            : {[NB_LAST_BACKUP, ]}
ExtensionData           : VMware.Vim.VirtualMachine
Id                      : VirtualMachine-vm-27255
Uid                     : /VIServer=vsphere.local\administrator@192.168.188.82:443/VirtualMachine=VirtualMachine-vm-272
                          55/

Get-VM -Name GZGL_192.168.122.6_euler|Set-VM  -NumCPU 4 -MemoryGB 8 -Notes  -Confirm:False

PowerState              : PoweredOff
Version                 : Unknown
HardwareVersion         : vmx-15
Notes                   :
Guest                   : GZGL_192.168.122.6_euler:
NumCpu                  : 4
CoresPerSocket          : 1
MemoryMB                : 8192
MemoryGB                : 8
VMHostId                : HostSystem-host-4429
VMHost                  : 192.168.121.4
VApp                    :
FolderId                : Folder-group-v22
Folder                  : vm
ResourcePoolId          : ResourcePool-resgroup-4102
ResourcePool            : Resources
PersistentId            : 502b1bdf-0a44-dfed-defe-68dc5684ab47
UsedSpaceGB             : 16.000760157592594623565673828
ProvisionedSpaceGB      : 18.192433938384056091308593750
DatastoreIdList         : {Datastore-datastore-19849}
HARestartPriority       : ClusterRestartPriority
HAIsolationResponse     : AsSpecifiedByCluster
DrsAutomationLevel      : AsSpecifiedByCluster
VMSwapfilePolicy        : Inherit
VMResourceConfiguration : CpuShares:Normal/2000 MemShares:Normal/20480
GuestId                 : other4xLinux64Guest
CreateDate              : 2023/8/1 11:10:08
SEVEnabled              :
BootDelayMillisecond    : 0
MigrationEncryption     : Opportunistic
MemoryHotAddEnabled     : False
MemoryHotAddIncrement   :
MemoryHotAddLimit       :
CpuHotAddEnabled        : False
CpuHotRemoveEnabled     : False
Name                    : GZGL_192.168.122.6_euler
CustomFields            : {[NB_LAST_BACKUP, ]}
ExtensionData           : VMware.Vim.VirtualMachine
Id                      : VirtualMachine-vm-27255
Uid                     : /VIServer=vsphere.local\administrator@192.168.188.82:443/VirtualMachine=VirtualMachine-vm-272
                          55/


PowerState              : PoweredOn
Version                 : Unknown
HardwareVersion         : vmx-15
Notes                   :
Guest                   : GZGL_192.168.122.6_euler:
NumCpu                  : 4
CoresPerSocket          : 1
MemoryMB                : 8192
MemoryGB                : 8
VMHostId                : HostSystem-host-4429
VMHost                  : 192.168.121.4
VApp                    :
FolderId                : Folder-group-v22
Folder                  : vm
ResourcePoolId          : ResourcePool-resgroup-4102
ResourcePool            : Resources
PersistentId            : 502b1bdf-0a44-dfed-defe-68dc5684ab47
UsedSpaceGB             : 24.084744532592594623565673828
ProvisionedSpaceGB      : 24.084745034575462341308593750
DatastoreIdList         : {Datastore-datastore-19849}
HARestartPriority       : ClusterRestartPriority
HAIsolationResponse     : AsSpecifiedByCluster
DrsAutomationLevel      : AsSpecifiedByCluster
VMSwapfilePolicy        : Inherit
VMResourceConfiguration : CpuShares:Normal/2000 MemShares:Normal/20480
GuestId                 : other4xLinux64Guest
CreateDate              : 2023/8/1 11:10:08
SEVEnabled              :
BootDelayMillisecond    : 0
MigrationEncryption     : Opportunistic
MemoryHotAddEnabled     : False
MemoryHotAddIncrement   : 0
MemoryHotAddLimit       : 8192
CpuHotAddEnabled        : False
CpuHotRemoveEnabled     : False
Name                    : GZGL_192.168.122.6_euler
CustomFields            : {[NB_LAST_BACKUP, ]}
ExtensionData           : VMware.Vim.VirtualMachine
Id                      : VirtualMachine-vm-27255
Uid                     : /VIServer=vsphere.local\administrator@192.168.188.82:443/VirtualMachine=VirtualMachine-vm-272
                          55/



PS D:\vmware\批量创建虚拟机脚本>

10、登录VC页面,可以看到虚拟机已正常生成并自动开机

 

 11、修改“batmkvms.csv”文件,添加多台虚拟机信息,再次执行脚本,可以看到,批量虚拟机自动生成成功:

 实测,指令一旦运行,数十台虚拟机即可在无人参与的情况下完全自动生成。

本例存在一个不尽如人意之处,即CSV中配置的IP并未生效,估计和openeuler操作系统或模板安装方法有关,欢迎大家留言探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/822753.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】simplekml如何设置样式(解决simplekml样式不生效)

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、基本样式常用 二、共享样式三、全局样式1.结果2.代码 前言 simplekml是一个用于创建kml文件的库,里面提供了丰富的功能和…

【编程】典型题目:寻找数组第K大数(四种方法对比)

【编程】典型题目:寻找数组第K大数(四种方法对比) 文章目录 【编程】典型题目:寻找数组第K大数(四种方法对比)1. 题目2. 题解2.1 方法一:全局排序(粗暴)2.2 方法二&#…

数据结构-链表结构-双向链表

双向链表 双向链表的定义 双向链表也叫双链表,与单向链表不同的是,每一个节点有三个区域组成:两个指针域,一个数据域 前一个指针域:存储前驱节点的内存地址后一个指针域:存储后继节点的内存地址数据域&a…

Java开发中的------修改密码+忘记密码

目录 1.修改密码 客户端响应 前端vue 后端 controller层 ServiceImpl实现层 2.忘记密码 客户端响应 后端 controller层 serviceImpl实现层 本章需要准备:springcloud项目,依赖,数据库.... 数据库SQL SET FOREIGN_KEY_CHECKS0;-- -…

C++设计模式之责任链设计模式

C责任链设计模式 什么是责任链设计模式 责任链设计模式是一种行为型设计模式,它允许多个处理请求的对象串联起来,形成一个处理请求的链。每个对象都有机会处理请求,如果该对象不能处理请求,则将请求传递给链中的下一个对象。 该…

Inkscape 1.3 版开放源代码 SVG 编辑器发布,新增形状生成器工具和许多更改

导读Inkscape 是功能强大的开源、跨平台、免费 SVG(可缩放矢量图形)编辑器,今天已更新到稳定的 1.3 版,这是一个引入新功能和许多改进的重要版本。 Inkscape 1.3 是在 Inkscape 1.2 发布一年零两个月后推出的,它引入了…

[pymc3][python]pymc3安装后测试代码2

测试环境: pymc33.11.2 代码: import numpy as np import pymc3 as pm import matplotlib.pyplot as pltif __name__ __main__:# 生成随机数据np.random.seed(123)x np.linspace(0, 1, 100)y 0.5 * x np.random.normal(0, 0.1, size100)# 定义概率…

C/C++算法——散列表

1、散列表介绍 散列表的英文叫Hash Table,我们平时也叫它哈希表或者Hash 表。散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。…

【C++】-二叉搜索树的详解(递归和非递归版本以及巧用引用)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

JDBC案例

文章目录 案例1 :修改数据库中的数据案例2:查询数据库中的数据案例3:查询数据库中账户表数据,并将其封装成Account对象,,存储到ArrayList集合当中案例4:商品的增删改查1.准备环境2.查询3.添加4.…

1.微信小程序开发-快速上手

1.环境搭建 1.1 下载开发者工具 微信开发者工具下载地址与更新日志 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 1.2 注册小程序 获取小程序AppId 2.小程序组件 1.view:用于展示视图元素&#x…

WAF绕过-权限控制篇-后门免杀

WAF绕过主要集中在信息收集,漏洞发现,漏洞利用,权限控制四个阶段。 1、什么是WAF? Web Application Firewall(web应用防火墙),一种公认的说法是“web应用防火墙通过执行一系列针对HTTP/HTTPS的安…

所有集群启动的命令

所有集群启动的命令 查询所有节点启动Hadoop集群(Yarn模式)关闭Hadoop集群Spark(local模式)启动Spark集群standalone模式(不用了)关闭standalone模式HA下的standalone模式关闭HA-standalone模式Yarn模式(重点) 关闭Spark集群启动f…

接口/Web自动化测试如何做?框架如何搭建封装?

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 自动化测试怎么做…

数据可视化(5)热力图及箱型图

1.热力图 #基本热力图 #imshow(x) #x,数据 x[[1,2],[3,4],[5,6],[7,8],[9,10]] plt.imshow(x) plt.show() #使用热力图分析学生的成绩 dfpd.read_excel(学生成绩表.xlsx) #:表示行号 截取数学到英语的列数 xdf.loc[:,"数学":英语].…

技能生态链职业技能等级评价认定业务

一、项目背景 根据《关于公布广东省2022年第一批职业技能等级认定社会培训评价组织名单的通知》(粤人社函〔2022〕76号),广东泰迪智能科技股份有限公司于2022年入选广东省2022年第一批职业技能等级认定社会评价组织,并根据《关于…

《水经注地图服务》发布的影像数据如何在OsgEarth中调用

OsgEarth 是一个用于OpenSceneGraph (OSG)的可扩展地形渲染工具包,它是一个开源、高性能、3D 图形工具包。 只需创建一个简单的 XML 文件,将其指向您的图像、高程和矢量数据,将其加载到您最喜欢的 OSG 应用程序中,然后开始&#…

蓝桥云课ROS机器人旧版实验报告-05导航功能

项目名称 实验五 导航功能 成绩 内容:创建变换、发布传感器消息、里程数据信息、创建基础控制器、创建地图,机器人配置、全局和局部代价地图、rviz详细配置、自适应蒙特卡洛定位,避障,目标发送 实验记录(70分&…

Jenkins工具系列 —— 插件 实现用户权限分配与管理

文章目录 安装插件 Role-based Authorization Strategy添加用户注册配置权限查看当前使用者,获取user id配置管理员权限配置普通用户权限(非管理员权限) 小知识 安装插件 Role-based Authorization Strategy 点击 左侧的 Manage Jenkins —&…

[LeetCode]只出现一次的数字相关题目(c语言实现)

文章目录 LeetCode136. 只出现一次的数字ⅠLeetCode137. 只出现一次的数字 IILeetCode260. 只出现一次的数字 IIILeetCode268. 丢失的数字 LeetCode136. 只出现一次的数字Ⅰ 题目: 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元…