Hyper-V 2016 系列教程40 使用 PowerShell 实现虚拟机自动化和管理虚拟机

注:以下内容部分取自微软官网:

可以在 Hyper-V 主机上的 Windows 10 或 Windows Server 技术预览版虚拟机中使用 PowerShell Direct 运行任意 PowerShell,而无论网络配置或远程管理设置如何。

运行 PowerShell Direct 的方法:

  • 作为交互式会话 - 请单击此处以使用 Enter-PSSession 创建和退出交互式 PowerShell 会话。
  • 作为用以执行单个命令或脚本的单用途会话 - 请单击此处以使用 Invoke-Command 运行脚本或命令。
  • 作为持久性会话(版本 14280 及更高版本)-- 请单击此处以使用 New-PSSession 创建持久性会话。
    通过使用 Copy-Item 将文件复制到虚拟机或从其复制文件,然后使用 Remove-PSSession 断开连接来继续进行操作。

要求

操作系统要求:

  • 主机:可运行 Hyper-V 的 Windows 10 、Windows Server Technical Preview 2 或更高版本。
  • 来宾/虚拟机:Windows 10 、Windows Server Technical Preview 2 或更高版本。

如果要管理较旧的虚拟机,请使用虚拟机连接 (VMConnect) 或为虚拟机配置虚拟网络

配置要求:

  • 虚拟机必须在主机上本地运行。
  • 虚拟机必须开启,且运行时需至少具有一个配置的用户配置文件。
  • 必须以 Hyper-V 管理员身份登录主机计算机。
  • 必须为虚拟机提供有效用户凭据。

创建并退出交互式 PowerShell 会话

在虚拟机上运行 PowerShell 命令的最简单方法是启动交互会话。

会话启动时,所键入的命令会在虚拟机上运行,其效果就像直接在虚拟机上将其键入到 PowerShell 会话中那样。

启动交互会话:

  1. 在 HYPER-V 主机上以管理员身份打开 PowerShell。
  2. 运行以下命令之一以使用虚拟机名称或 GUID 创建交互会话:

    PowerShell

    Enter-PSSession -VMName <VMName>Enter-PSSession -VMId <VMId>

    出现提示时,提供虚拟机的凭据。

  3. 在虚拟机上运行命令。

    你应该会看到作为 PowerShell 提示符前缀的 VMName 显示如下:

    [VMName]: PS C:\ >

    所有运行的命令将会在虚拟机上进行。 若要测试,可运行 ipconfig 或 hostname 以确保这些命令正在虚拟机中运行。

  4. 完成后,运行以下命令来关闭会话:

    PowerShell

    Exit-PSSession

请注意:如果你的会话未连接,请参阅疑难解答了解可能的原因。

若要了解有关这些 cmdlet 的详细信息,请参阅 Enter-PSSession 和 Exit-PSSession


使用 Invoke-Command 运行脚本或命令

配合使用 PowerShell Direct 和 Invoke-Command 非常适合需要在虚拟机上运行一个命令或一个脚本但在这一点之外无需继续与虚拟机进行交互的情况。

运行单个命令:

  1. 在 HYPER-V 主机上以管理员身份打开 PowerShell。
  2. 通过使用虚拟机名称或 GUID 运行以下命令之一来创建会话:

    PowerShell

    Invoke-Command -VMName <VMName> -ScriptBlock { cmdlet } 
    Invoke-Command -VMId <VMId> -ScriptBlock { cmdlet }

    出现提示时,提供虚拟机的凭据。

    该命令将在虚拟机上执行,如果存在到控制台的输出,会把此输出打印到控制台。 命令一运行将会自动关闭连接。

运行脚本:

  1. 在 HYPER-V 主机上以管理员身份打开 PowerShell。
  2. 通过使用虚拟机名称或 GUID 运行以下命令之一来创建会话:

    PowerShell

    Invoke-Command -VMName <VMName> -FilePath C:\host\script_path\script.ps1 
    Invoke-Command -VMId <VMId> -FilePath C:\host\script_path\script.ps1

    出现提示时,提供虚拟机的凭据。

    该脚本将在虚拟机上执行。 命令一运行将会自动关闭连接。

若要了解有关此 cmdlet 的详细信息,请参阅 Invoke-Command


使用 New-PSSession 和 Copy-Item 复制文件

注意:PowerShell Direct 仅支持 Windows 版本 14280 及更高版本中的持久性会话

在编写用于跨一个或多个远程计算机协调操作的脚本时,持久性 PowerShell 会话会非常有用。 一经创建后,持久性会话会一直存在于后台,直到你决定将其删除。 这意味着你可以使用 Invoke-Command 或 Enter-PSSession 反复引用同一个会话而无需传递凭据。

通过使用相同的令牌,会话将保持原有状态。 由于持久性会话具有持久性,在会话中创建的或传递给会话的任何变量将跨多个调用被保留。 有多种工具可用于持久性会话。 在此示例中,我们将使用 New-PSSession和 Copy-Item 在主机和虚拟机之间移动数据。

创建会话,然后复制文件:

  1. 在 HYPER-V 主机上以管理员身份打开 PowerShell。
  2. 运行以下命令之一使用 New-PSSession 将持久性 PowerShell 会话创建到虚拟机。

    PowerShell

    $s = New-PSSession -VMName <VMName> -Credential (Get-Credential)$s = New-PSSession -VMId <VMId> -Credential (Get-Credential)

    出现提示时,提供虚拟机的凭据。

    警告:
    14500 之前的版本中存在一个 Bug。 如果不使用 -Credential 标志显式指定凭据,来宾操作系统中的服务将崩溃,并且将需要重新启动。 如果点击此问题,可在此处获取解决方法说明。

  3. 将文件复制到虚拟机内。

    要将 C:\host_path\data.txt 从主机复制到虚拟机内,运行:

    PowerShell

    Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\
  4. 从虚拟机复制文件(到主机)。

    要将 C:\guest_path\data.txt 从虚拟机复制到主机,运行:

    PowerShell

    Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\
  5. 使用 Remove-PSSession 停止持久性会话。

    PowerShell

    Remove-PSSession $s

疑难解答

PowerShell Direct 显示了一小部分的常见错误消息。 以下是最常见的错误消息、一些原因和诊断问题的工具。

-VMName 或 -VMID 参数不存在

问题:
Enter-PSSession``Invoke-Command 或 New-PSSession 不具有 -VMName 或 -VMId 参数。

可能的原因:
最可能的问题是你的主机操作系统不支持 PowerShell Direct。

可以运行以下命令检查你的 Windows 版本:

PowerShell

[System.Environment]::OSVersion.Version

如果你运行的是支持的版本,则有可能你的 PowerShell 版本不运行 PowerShell Direct。 对于 PowerShell Direct 和 JEA,主版本必须为 5 或更高版本。

可以运行以下命令检查你的 PowerShell 版本:

PowerShell

$PSVersionTable.PSVersion

错误:远程会话可能已结束

注意:
对于主机版本在 10240 与 12400 之间的 Enter-PSSession,下面的所有错误都报告为“一个远程会话可能已结束”。

错误消息:

Enter-PSSession : An error has occurred which Windows PowerShell cannot handle. A remote session might have ended.

可能的原因:

  • 虚拟机存在但未运行。
  • 来宾操作系统不支持 PowerShell Direct(请参阅要求
  • PowerShell 尚不可用于来宾
    • 操作系统没有完成启动
    • 操作系统无法正常启动
    • 某些启动时事件需要用户输入

可使用 Get-VM cmdlet 进行检查以查看主机上正在运行哪些虚拟机。

错误消息:

New-PSSession : An error has occurred which Windows PowerShell cannot handle. A remote session might have ended.

可能的原因:

  • 上面列出的原因之一 - 它们都同等适用于 New-PSSession
  • 当前版本中的一个 Bug,在这些版本中,必须使用 -Credential 显式传递凭据。 发生这种情况时,整个服务将在来宾操作系统中挂起,并需要重新启动。 可以检查是否仍可通过 Enter-PSSession 使用会话。

若要解决凭据问题,使用 VMConnect 登录到虚拟机,打开 PowerShell,并使用以下 PowerShell 重新启动 vmicvmsession 服务:

PowerShell

Restart-Service -Name vmicvmsession

错误:无法解析参数集

错误消息:

Enter-PSSession : Parameter set cannot be resolved using the specified named parameters.

可能的原因:

  • -RunAsAdministrator 在连接到虚拟机时,不受支持。

    连接到 Windows 容器时,-RunAsAdministrator 标志将允许管理员连接,而无需显式凭据。 由于虚拟机未授予主机默示的管理员访问权限,因此你需要显式输入凭据。

使用 -Credential 参数或通过在系统提示时手动输入,可将管理员凭据传递给虚拟机。

错误:凭据无效。

错误消息:

Enter-PSSession : The credential is invalid.

可能的原因:

  • 无法验证来宾凭据

    • 提供的凭据不正确。
    • 来宾操作系统中没有任何用户帐户(操作系统以前未启动)
    • 如果以管理员身份进行连接:管理员还未设置为活动用户。 在此处了解详细信息。

错误:输入的 VMName 参数未解析为任何虚拟机。

错误消息:

Enter-PSSession : The input VMName parameter does not resolve to any virtual machine.

可能的原因:

  • 你不是 HYPER-V 管理员。
  • 虚拟机不存在。

你可以使用 Get-VM cmdlet 检查使用中的凭据是否具有 Hyper-V 管理员角色并查看哪些 VM 在主机上本地运行并已启动。

时间: 2024-08-05 20:05:20

Hyper-V 2016 系列教程40 使用 PowerShell 实现虚拟机自动化和管理虚拟机的相关文章

Hyper-V 2016 系列教程39 在 Windows 10中使用 Hyper-V 和 Windows PowerShell

注:以下内容部分取自微软官网: 现在你已基本了解如何部署 Hyper-V.创建虚拟机和管理这些虚拟机,让我们研究一下如何使用 PowerShell 来自动执行其中大部分活动. 返回 Hyper-V 命令列表 单击 Windows"开始"按钮,键入"PowerShell". 运行以下命令以显示适用于 Hyper-V PowerShell 模块的 PowerShell 命令的可搜索列表. PowerShell Get-Command -Module hyper-v | 

Hyper V server 2012 r2 常用的powershell命令

Hyper V server 2012 r2 常用的powershell命令 ? 获取网卡信息 Get-netadapterGet-netipinterface ? 设置DNS地址Set-DnsClientServerAddress -InterfaceAlias NIC NAME -ServerAddresses "1.1.1.1","2.2.2.2"注释:NIC Name: 网卡名称, 1.1.1.1,2.2.2.2 ? 网卡聚合NIC Teaming: New

Hyper-V 2016 系列教程38 在 Windows 10 上安装 Hyper-V

启用 Hyper-V 以在 Windows 10 上创建虚拟机.可以通过多种方式启用 Hyper-V,包括使用 Windows 10 控制面板.PowerShell(我的最爱)或使用部署映像服务和管理工具 (DISM). 本文档将逐一介绍每个选项. 注意:Hyper-V 作为可选功能内置于 Windows -- 无 Hyper-V 下载或可安装的组件. 检查要求 Windows 10 企业版.专业版或教育版 具有二级地址转换 (SLAT) 的 64 位处理器. CPU 支持 VM 监视器模式扩展

Hyper-V 2016 系列教程35 配置Windows Server 2016 VPN服务器

VPN英文全称是VirtualPrivate Network,也就是"虚拟专用网络".VPN的使用在企业环境中较为常见,属于远程访问中的一种常见技术,VPN用户可以通过互联网来访问企业局域网内部的资源,就像在企业内部办公一样,企业可以采用Windows Server 2016操作系统提供的VPN远程访问组件来实现VPN的服务器搭建,也可以通过第三方收费软件或硬件平台实现,我们这里就以Windows Server 2016中内置的远程访问组件来搭建VPN服务器,搭建VPN服务器网络拓扑图

Hyper-V 2016 系列教程41 Windows 10 Hyper-V 系统要求

Hyper-V 可用于 Windows 8 及更高版本的 64 位 Windows 专业版.企业版和教育版. Hyper-V 需要二级地址转换 (SLAT) - 存在于 Intel 和 AMD 最新一代的 64 位处理器中. 你可以在具有 4GB RAM 的主机上运行 3 或 4 台基本虚拟机,但如果要运行更多的虚拟机则需要更多的资源. 另外,你可能还需要创建有 32 个处理器和 512GB RAM 的较大虚拟机,具体取决于你的物理硬件. 操作系统要求 可以在以下版本的 Windows 10 上

Hyper-V 2016 系列教程32 StartWind 虚拟NFS,iSCSI软件

大家在学习Hyper-V的过程中,如果企业有用来测试用iSCSI或者NFS类型存储器的话,这是最好不过的了,如果没有条件购买的话,我们这时可以用第三方模拟软件来满足我们实验的目的,iSCSI模拟软件一般有StarWind,还有就是Windows Server 2016自带了模拟iSCSI和NFS的功能,大家有兴趣可以测试一下,如果要使用微软的iSCSI服务器的话,可以参考本博客中的关于配置Windows Server 2016作为iSCSI服务器的完整过程的文章. 这里我们推荐是StarWind

Hyper-V 2016 系列教程29 主流品牌服务器的BIOS的虚拟化相关设定

企业正式环境中服务器的稳定性非常重要正常情况下是要求7*24小时不间断运行的除了硬件的质量外还有就是系统的设定和优化其中BIOS的设定如果设定不当的话也会引起服务器的不稳定希望这个小小的BIOS能引起企业IT管理员的重视另外我的建议是BIOS的设定也要以硬件厂家官方的建议为准毕竟厂家的测试才是完美的. 虚拟化服务器初始安装时BIOS的主要设定参数大体有如下 恢复BIOS为出厂缺省设置 设定BIOS中时间和日期 开启Intel-VT或者AMD-V虚拟化支持功能有的厂家服务器此项菜单为Virtual

Hyper-V 2016 系列教程28 Hyper-v平台USB 外设解决方案介绍

现在企业中,由于虚拟化技术的大力普及,企业的一般用户办公端都是以瘦客户端的形式存在,而瘦客户端一般是采用Linux或者Windows精简版本的系统,体积一般只有5寸平板大小,硬件接口有限,所以这样就带来一个问题,一般不能友好的支持USB接口的使用,不能使用USB存储,移动加密U盾等,另一方面由于虚拟计算机是从一个物理机上虚拟出来的,它自己并没有物理接口.当需要接入设备,如虚拟机上需要用到Ukey.加密狗等设备时,需要把物理机的接口切换给虚拟机才能使用,切换过程比较麻烦.加上物理机的接口是有限的,

Hyper-V 2016 系列教程26 Hyper-v平台并口外设解决方案介绍

一般企业中会有老款的并口设备,这些设备一般用在重要的业务上面,有时不是想淘汰就能淘汰的,所以在服务器虚拟化时,会采用一些转接方案,以便使这些设备能正常运行在虚拟化操作系统中,老款并口设备在企业中一般有工业打印机,财务部门专门的开票和税务打印机,工业测试设备等,这些并口老旧设备在企业虚拟化中是最复杂的,特别是外企环境中财务税控方面和国外的设备兼容性太差,如果将这些并口设备直接接到XenServer物理服务器端口上,可能性不太大,所以我们这里介绍二款常用的网络转并口集线器,可以给有需求的公司作为参考