GCE Windows 实例不是 运行 启动脚本

GCE Windows Instance not running startup scripts

我一直在尝试将我的启动脚本应用到 Google Compute Engine 上的新 Windows 实例,如 here 所述,但是当我检查这些实例时,没有它们的踪迹永远被执行。这是我 运行ning:

的 gcloud 命令

gcloud 计算实例创建 "my-instance" --项目"my-project"
--zone "us-central1-a"
--机器类型"g1-small"
--网络"default"
--元数据"gce-initial-windows-user=my-user""gce-initial-windows-password=my-pass"
--维护政策"MIGRATE"
--范围"storage-ro" --tags "http-server" "https-server"
--图片“https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2008-r2-dc-v20150110
--boot-disk-type "pd-standard"
--boot-disk-device-name "my-instance"
--metadata-from-file sysprep-oobe-script-ps1=D:\Path\To\startup.ps1

我尝试使用所有 3 种启动类型(sysprep-specialize-script-ps1、sysprep-oobe-script-ps1、windows-startup-script-ps1) 但 none 有效。在任务计划程序或事件查看器中也看不到任何指示。当我手动 运行 它时,我系统上的文件存在并且确实有效。我怎样才能让它工作?

调试 Powershell 脚本的一个好方法是让它们写入串行控制台 (COM1)。您将能够从 GCE 的串行端口输出中看到脚本的输出。

gcloud compute instances get-serial-port-output my-instance --zone us-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 compute instances describe my-instance --zone us-central1-a --format json

JSON 转储应该包含 powershell 脚本。

最后,调试 Powershell 启动脚本的一个好方法是将输出写入串行控制台。

您可以打印日志消息并在 Google 开发人员控制台 > 计算 > 计算引擎 > VM 实例 >(实例名称)中查看它们。然后滚动到底部并单击 "Serial console".

的展开选项
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 create testwin2 --zone us-central1-a --metadata-from-file sysprep-oobe-script-ps1=testconsole.ps1 --image windows-2008-r2