前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cloudbase-init userdata不是只支持powershell

cloudbase-init userdata不是只支持powershell

原创
作者头像
Windows技术交流
修改2023-10-27 14:57:40
5500
修改2023-10-27 14:57:40
举报
文章被收录于专栏:Windows技术交流

userdata实际是支持cmd的,不是只支持powershell,还支持python、bash(前提是你镜像里有python、bash环境了)。

这本应该是腾讯云官网文档要写的内容,结果官网文档不完善,我自己花了大量时间精力帮完善了

-

Batch批处理程序

PowerShell脚本

格式

以“rem cmd”开头且作为首行,且前面不能有空格。或者<script> 这里写代码 </script>

以“#ps1”开头且作为首行,且前面不能有空格。或者<powershell> 这里写代码 </powershell>

限制

不能超过16KB

不能超过16KB

解决cloudbase-init userdata windows中文乱码

userdata powershell代码中尽可能不要出现中文,如需使用中文,中文字符应按Unicode码处理,比如

userdata cmd代码不支持中文(阿里云、腾讯云等凡是cloudinit那一套的都是如此),如果要用中文,需要通过cmd.exe /c c:\xxx.bat这种方式来调用,把相关代码放到c:\xxx.bat中,比如

代码语言:javascript
复制
#ps1
wget http://windows-1251783334.cos.ap-shanghai.myqcloud.com/115.159.148.149/ceshi.bat -Outfile c:\ceshi.bat
cmd.exe /c c:\ceshi.bat >> c:\init.log 2>&1

https://cloudbase-init.readthedocs.io/en/1.1.2/userdata.html

https://cloudbase-init.readthedocs.io/en/latest/userdata.html

cmd

代码语言:javascript
复制
rem cmd
这里写代码

例如

代码语言:javascript
复制
rem cmd
echo aaa>c:\ceshi.txt

上述代码base64编码后的字符串是

代码语言:javascript
复制
cmVtIGNtZAplY2hvIGFhYT5jOlxjZXNoaS50eHQ=

或者

代码语言:javascript
复制
<script>
这里写代码
</script>

例如

代码语言:javascript
复制
<script>
echo bbb>c:\ceshi.txt
</script>

上述代码base64编码后的字符串是

代码语言:javascript
复制
PHNjcmlwdD4KZWNobyBiYmI+YzpcY2VzaGkudHh0Cjwvc2NyaXB0Pg==

powershell

代码语言:javascript
复制
#ps1
这里写代码

例如

代码语言:javascript
复制
#ps1
Get-WmiObject -Class Win32_volume -Filter 'DriveType=5' |Set-WmiInstance -Arguments @{DriveLetter='Z:'}  2>&1
$Path = "C:\Firefox-latest.exe";
(new-object System.Net.WebClient).DownloadFile("http://download-ssl.firefox.com.cn/releases-sha2/stub/official/zh-CN/Firefox-latest.exe",$Path);
Start-Process -FilePath $Path -Args "-ms /MaintenanceService=false /DesktopShortcut=true"
start-sleep -s 60
Remove-Item $Path

上述代码base64编码后的字符串是

代码语言:javascript
复制
I3BzMQpHZXQtV21pT2JqZWN0IC1DbGFzcyBXaW4zMl92b2x1bWUgLUZpbHRlciAnRHJpdmVUeXBlPTUnIHxTZXQtV21pSW5zdGFuY2UgLUFyZ3VtZW50cyBAe0RyaXZlTGV0dGVyPSdaOid9ICAyPiYxCiRQYXRoID0gIkM6XEZpcmVmb3gtbGF0ZXN0LmV4ZSI7CihuZXctb2JqZWN0IFN5c3RlbS5OZXQuV2ViQ2xpZW50KS5Eb3dubG9hZEZpbGUoImh0dHA6Ly9kb3dubG9hZC1zc2wuZmlyZWZveC5jb20uY24vcmVsZWFzZXMtc2hhMi9zdHViL29mZmljaWFsL3poLUNOL0ZpcmVmb3gtbGF0ZXN0LmV4ZSIsJFBhdGgpOwpTdGFydC1Qcm9jZXNzIC1GaWxlUGF0aCAkUGF0aCAtQXJncyAiLW1zIC9NYWludGVuYW5jZVNlcnZpY2U9ZmFsc2UgL0Rlc2t0b3BTaG9ydGN1dD10cnVlIgpzdGFydC1zbGVlcCAtcyA2MApSZW1vdmUtSXRlbSAkUGF0aA==

或者

代码语言:javascript
复制
<powershell>
这里写代码
</powershell>

例如

代码语言:javascript
复制
<powershell>
Get-WmiObject -Class Win32_volume -Filter 'DriveType=5' |Set-WmiInstance -Arguments @{DriveLetter='Z:'}  2>&1
$Path = "C:\Firefox-latest.exe";
(new-object System.Net.WebClient).DownloadFile("http://download-ssl.firefox.com.cn/releases-sha2/stub/official/zh-CN/Firefox-latest.exe",$Path);
Start-Process -FilePath $Path -Args "-ms /MaintenanceService=false /DesktopShortcut=true"
start-sleep -s 60
Remove-Item $Path
</powershell>

上述代码base64编码后的字符串是

代码语言:javascript
复制
PHBvd2Vyc2hlbGw+CkdldC1XbWlPYmplY3QgLUNsYXNzIFdpbjMyX3ZvbHVtZSAtRmlsdGVyICdEcml2ZVR5cGU9NScgfFNldC1XbWlJbnN0YW5jZSAtQXJndW1lbnRzIEB7RHJpdmVMZXR0ZXI9J1o6J30gIDI+JjEKJFBhdGggPSAiQzpcRmlyZWZveC1sYXRlc3QuZXhlIjsKKG5ldy1vYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovL2Rvd25sb2FkLXNzbC5maXJlZm94LmNvbS5jbi9yZWxlYXNlcy1zaGEyL3N0dWIvb2ZmaWNpYWwvemgtQ04vRmlyZWZveC1sYXRlc3QuZXhlIiwkUGF0aCk7ClN0YXJ0LVByb2Nlc3MgLUZpbGVQYXRoICRQYXRoIC1BcmdzICItbXMgL01haW50ZW5hbmNlU2VydmljZT1mYWxzZSAvRGVza3RvcFNob3J0Y3V0PXRydWUiCnN0YXJ0LXNsZWVwIC1zIDYwClJlbW92ZS1JdGVtICRQYXRoCjwvcG93ZXJzaGVsbD4=

也支持python,但需要镜像里提前配好python环境变量了

代码语言:javascript
复制
#!/usr/bin/env python
这里写代码

例如

代码语言:javascript
复制
#!/usr/bin/env python
import sys
sys.stdout = open('c:\\output.txt', 'w')
print('hello')
sys.stdout.close()

上述代码base64编码后的字符串是

代码语言:javascript
复制
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCBzeXMKc3lzLnN0ZG91dCA9IG9wZW4oJ2M6XFxvdXRwdXQudHh0JywgJ3cnKQpwcmludCgnaGVsbG8nKQpzeXMuc3Rkb3V0LmNsb3NlKCk=

也支持Bash,但需要镜像里提前配好Bash环境变量了

代码语言:javascript
复制
#!/bin/bash
这里写代码

例如

代码语言:javascript
复制
#!/bin/bash
pwd > bashout.txt
date >> bashout.txt

上述代码base64编码后的字符串是

代码语言:javascript
复制
IyEvYmluL2Jhc2gKcHdkID4gYmFzaG91dC50eHQKZGF0ZSA+PiBiYXNob3V0LnR4dA==

默认位置是/cygdrive/c/windows/system32/

未指定路径的话,bashout.txt的位置是一般是c:\windows\system32\bashout.txt

指定路径的话,用cd ../../回退到c盘根目录,ceshi123.txt的位置是c:\ceshi123.txt,例如

代码语言:javascript
复制
#!/bin/bash
cd ../../
pwd > ceshi123.txt
date >> ceshi123.txt

上述代码base64编码后的字符串是

代码语言:javascript
复制
IyEvYmluL2Jhc2gKY2QgLi4vLi4vCnB3ZCA+IGNlc2hpMTIzLnR4dApkYXRlID4+IGNlc2hpMTIzLnR4dA==

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决cloudbase-init userdata windows中文乱码
  • cmd
  • powershell
  • 也支持python,但需要镜像里提前配好python环境变量了
  • 也支持Bash,但需要镜像里提前配好Bash环境变量了
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档