windows - 如何使用 Vagrant shell/path provisioner 配置 Windows 客户机?

标签 windows powershell vagrant provisioning

我正在尝试使用 Powershell 来配置 Windows Vagrant 机器。如果我以管理员身份启动 Powershell,我已经验证我的脚本可以在我的本地计算机上运行。在 Vagrant 配置过程中,vagrant 用户无法提升和运行脚本。

我知道 Vagrant 支持 powershell 脚本,那么使用它们进行配置需要做什么?我最初的想法是尝试让脚本启动一个新的 Administrator Powershell,但我觉得一定有更好的方法。

我正在尝试使用 System.Net.WebClient 下载文件并使用 msiexec 进行安装。

Vagrant 文件:

# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
PROVISION_WIN7_SCRIPT = "provision_win7.ps1"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define "win7", primary: false do |win7|
  config.vm.provision "shell", :path => "#{PROVISION_WIN7_SCRIPT}"
  config.vm.box      = "win7"
  config.vm.hostname = "win7"
  config.vm.communicator = "winrm"
  config.vm.network :private_network, ip: "10.10.10.10"
  config.vm.box_url = "https://atlas.hashicorp.com/designerror/boxes/windows-7/versions/1.0/providers/virtualbox.box"   
    config.vm.provider :virtualbox do |vb|
      vb.gui = true
      vb.customize ["modifyvm", :id, "--memory", 1024]
      vb.customize ["modifyvm", :id, "--cpus", 1]
      vb.customize ["modifyvm", :id, "--vram", "32"]
      vb.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
      vb.customize ["setextradata", "global", "GUI/SuppressMessages", "all" ]
  end
  end
end

编辑:

我今天使用当时运行的软件再次尝试:Vagrant 1.6.3、Virtualbox 4.3.30。当我打开我的 vagrant box 时,我没有看到任何错误输出:

Bringing machine 'win7' up with 'virtualbox' provider...
==> win7: Importing base box 'designerror/windows-7'...
==> win7: Matching MAC address for NAT networking...
==> win7: Checking if box 'designerror/windows-7' is up to date...
==> win7: Setting the name of the VM: vagrant_win7_1453859492744_23074
==> win7: Clearing any previously set network interfaces...
==> win7: Preparing network interfaces based on configuration...
    win7: Adapter 1: nat
    win7: Adapter 2: hostonly
==> win7: Forwarding ports...
    win7: 3389 => 3389 (adapter 1)
    win7: 22 => 2222 (adapter 1)
    win7: 5985 => 55985 (adapter 1)
==> win7: Running 'pre-boot' VM customizations...
==> win7: Booting VM...
==> win7: Waiting for machine to boot. This may take a few minutes...
==> win7: Machine booted and ready!
==> win7: Checking for guest additions in VM...
==> win7: Setting hostname...
==> win7: Configuring and enabling network interfaces...
==> win7: Mounting shared folders...
    win7: /vagrant => /Users/dstark/Projects/itbestprac-pres/vagrant
==> win7: Running provisioner: shell...
    win7: Running: c:\tmp\vagrant-shell.ps1

在我的 vagrant box 下 c:\tmp 有一个 vagrant-shell.ps1vagrant-elevated-shell.ps1 如果我手动执行 vagrant generated elevated shell ps 脚本作为它安装的 vagrant 用户。所以,我认为我的脚本没问题。

如果我添加 config.winrm.usernameconfig.winrm.password 我仍然无法提升运行脚本所需的权限。事件查看器中也没有任何信息。

最佳答案

可能您需要将 privileged 标志添加到配置行:

config.vm.provision "shell", path: "scripts/provision.ps1", privileged: true

或者在你的情况下:

config.vm.provision "shell", :path => "#{PROVISION_WIN7_SCRIPT}", privileged: true

关于windows - 如何使用 Vagrant shell/path provisioner 配置 Windows 客户机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29216975/

相关文章:

ruby-on-rails - 在运行 Recipe 的其余部分之前使用 Chef 设置 DNS?

c++ - 具有可变周期的 WaitableTimer

windows - 自定义 Windows 文件夹图标

powershell - 使用 cmdlet 访问 AWS IAM 时出现 ObjectNotFound 错误

java - 在 Windows 上从命令行下载最新的 Java SE Runtime Environment 8

ruby - Vagrant 插件安装失败

php - 从一个虚拟机实例到另一台虚拟机 (Vagrant) 的 Curl 请求似乎不起作用

windows - 如果命令成功,则继续下一步

windows - 如何使用winapi获取列表框中项目的矩形

powershell - 如何将字符串 '2016/2/9' 转换为日期时间?