前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >制作Windows自定义镜像实现新购机器自动设置静态DNS和hostname自动生效无需人为重启机器

制作Windows自定义镜像实现新购机器自动设置静态DNS和hostname自动生效无需人为重启机器

原创
作者头像
Windows技术交流
修改2023-10-13 13:21:04
7860
修改2023-10-13 13:21:04
举报
文章被收录于专栏:Windows技术交流Windows技术交流

自定义镜像购买机器,有一些业务逻辑需要实现但又不能使用RunInstances接口的userdata参数,业务需求: 1、hostname需要自动生效,不想人为重启机器生效(如果能用userdata,在userdata里加重启机器的代码即可)

代码语言:javascript
复制
<powershell>

#以管理员身份运行
Set-ExecutionPolicy -Scope CurrentUser Unrestricted -forc
if(-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")){   
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}

restart-computer -force 2>$null
exit 2>$null

</powershell>

2、自动设置静态dns

如果能用userdata,在userdata里用powershell代码就可以改

代码语言:javascript
复制
<powershell>

#以管理员身份运行
Set-ExecutionPolicy -Scope CurrentUser Unrestricted -forc
if(-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")){   
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
$wmi = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled = True"
#your own subnet_mask
$wmi.EnableStatic($wmi.IPAddress[0], "255.255.254.0") 

#your own dns
$dnsServers = "172.20.0.4","172.20.0.40" 

Set-DnsClientServerAddress -InterfaceAlias $adapter.Name -ServerAddresses $dnsServers


#add route
$gw="10.226.0.1" #your own gateway
$idx=(Get-WmiObject win32_networkadapterconfiguration -filter "ipenabled = 'true'").InterfaceIndex
route delete 10.0.0.0 mask 255.0.0.0 2>$null
route add -p 10.0.0.0 mask 255.0.0.0 $gw metric 1 IF $idx 2>$null
route delete 172.16.0.0 mask 255.240.0.0 2>$null
route add -p 172.16.0.0 mask 255.240.0.0 $gw metric 1 IF $idx 2>$null
route delete 192.168.0.0 mask 255.255.0.0 2>$null
route add -p 192.168.0.0 mask 255.255.0.0 $gw metric 1 IF $idx 2>$null
route delete 169.254.0.0/16 2>$null
route -p add 169.254.0.0/16 $gw metric 1 IF $idx 2>$null
route delete 0.0.0.0 mask 0.0.0.0 2>$null
route add -p 0.0.0.0 mask 0.0.0.0 $gw metric 1 IF $idx 2>$null;
route print -4

restart-computer -force 2>$null
exit 2>$null

</powershell>

3、有域业务,需要改SID(必须制作sysprep镜像才可以实现)

不通过userdata实现静态dns的话,那就通过cloudbase-init的localscripts实现:参考https://cloud.tencent.com/developer/article/1851338 把setdns.ps1的脚本放到C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\目录

比如我要设置的dns是180.76.76.76和119.29.29.29,我的setdns.ps1的代码如下

代码语言:javascript
复制
Set-ExecutionPolicy Unrestricted -force

while((powershell -c {(get-process|findstr powershell).length}) -ne 2){

        get-date -format HH:mm:ss:fffffff >> c:\aaa.txt;

        start-sleep 1;

}

if((powershell -c {(get-process|findstr powershell).length}) -eq 2){

        (get-wmiobject -class win32_networkadapterconfiguration -filter ipenabled=true).SetDNSServerSearchOrder(('180.76.76.76','119.29.29.29')) 2>$null;

        exit

}

放好setdns.ps1后,按如下步骤进行制作镜像(如果无设置dns的需求,以上步骤全部忽略即可)

步骤一

代码语言:javascript
复制
$client = new-object System.Net.WebClient
$client.DownloadFile('http://windows-1251783334.cos.ap-shanghai.myqcloud.com/wget64.exe',' c:\windows\wget.exe')
wget.exe http://windows-1251783334.cos.ap-shanghai.myqcloud.com/115.159.148.149/NT6NT10.bat -O c:\NT6NT10.bat
cmd.exe /c start /w /min c:\NT6NT10.bat
wget.exe http://windows-1251783334.cos.ap-shanghai.myqcloud.com/115.159.148.149/NT6NT10.ps1 -O c:\NT6NT10.ps1

步骤二

编辑c:\NT6NT10.ps1

搜索$portvalue = 36970

把其改为$portvalue = 3389

另外,机器内网ip有9、11 、30打头的,

在编辑NT6NT10.ps1时也顺便把改动路由的这3句前面的#去掉,如下图箭头所指,删掉这3个#

步骤三

代码语言:javascript
复制
restart-computer

步骤四

代码语言:javascript
复制
powershell -file c:\NT6NT10.ps1

执行完这句耐心等待,如果弹出加载驱动的窗口,信任,然后耐心等待自动关机(一般10分钟以内),等显示已关机的时候做镜像即可

注:脚本里有一句设置密码的命令net user Administrator "密码" 是给镜像设置个密码,做好镜像后买新机器时可以指定新密码

过程中可能远程断开后远程不了,因为密码变了,按net user Administrator "密码" 里的密码可以远程,或者耐心等待几分钟就已关机了,然后做镜像即可

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档