我在我的powershell启动脚本中尝试了Write-SerialPort函数,但它显示无法打开或无法每次都关闭。
所以我尝试写输出,它的工作原理。
调试Powershell脚本的一个好方法是让它们写入串行控制台(COM1)。您将能够从GCE的串行端口输出中看到脚本的输出。
gcloud compute instances get-serial-port-output my-instance --zone 美国central1-A
如果没有脚本,你会看到类似的东西:
Calling oobe-script from metadata. attributes/sysprep-oobe-script-bat value is not set or metadata server is not reachable. attributes/sysprep-oobe-script-cmd value is not set or metadata server is not reachable. attributes/sysprep-oobe-script-ps1 value is not set or metadata server is not reachable. Running schtasks with arguments /run /tn GCEStartup --> SUCCESS: Attempted to run the scheduled task "GCEStartup". ------------------------------------------------------------- Instance setup finished. windows is ready to use. ------------------------------------------------------------- Booting on date 01/25/2015 06:26:26 attributes/windows-startup-script-bat value is not set or metadata server is not reachable. attributes/windows-startup-script-cmd value is not set or metadata server is not reachable. attributes/windows-startup-script-ps1 value is not set or metadata server is not reachable.
确保ps1文件的内容实际附加到实例。
gcloud计算实例描述my-instance --zone us-central1-a - 格式json
JSON转储应包含其中的powershell脚本。
最后,调试Powershell启动脚本的一个好方法是将输出写入串行控制台。
您可以在Google Developer Console中打印日志消息并查看它们。计算>计算引擎> VM实例> (实例名称)。然后滚动到底部并单击“串行控制台”的展开选项。
Function Write-SerialPort ([string] $message) { $port = new-Object System.IO.Ports.SerialPort COM1,9600,None,8,one $port.open() $port.WriteLine($message) $port.Close() } Write-SerialPort ("Testing GCE Startup Script")
这个命令对我有用,我必须确保脚本是用ascii编写的。 Powershell ISE使用不同的编码来破坏gcloud计算。
gcloud compute instances创建testwin2 --zone us-central1-a --metadata-from-file sysprep-oobe-script-ps1 = testconsole.ps1 --image windows-2008-r2