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 在主机上本地运行并已启动。



本文转自成杭 51CTO博客,原文链接:http://blog.51cto.com/hangtc/1965725,如需转载请自行联系原作者

相关文章
|
11月前
|
运维 虚拟化 Windows
Hyper-V Win8虚拟机启动错误修复教程
针对Hyper-V Win8虚拟机启动错误,本教程提供详细修复步骤。首先进行硬件兼容性检查,确保CPU支持虚拟化并启用,同时检查内存和存储空间是否充足。接着以管理员身份登录,使用事件查看器排查错误。管理Hyper-V服务,确保相关服务正常运行。检查虚拟机状态,优化资源分配,并修复虚拟硬盘文件。更新系统和重装Hyper-V组件也是有效手段。最后,排查硬件故障、备份数据及处理第三方软件冲突。通过这些步骤,多数启动问题可得到解决。
|
10月前
|
域名解析 API PHP
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
本文介绍了如何通过网络穿透技术让公网直接访问家庭电脑,充分发挥本地硬件性能。相比第三方服务受限于转发带宽,此方法利用自家宽带实现更高效率。文章详细讲解了端口映射教程,包括不同网络环境(仅光猫、光猫+路由器)下的设置步骤,并提供实时同步动态IP的两种方案:自建服务器或使用三方API接口。最后附上VM虚拟机全版本下载链接,便于用户在穿透后将服务运行于虚拟环境中,提升安全性与适用性。
640 7
|
11月前
|
存储 网络协议 网络安全
Hyper-V Win10虚拟机配置常见问题
在配置Hyper-V Win10虚拟机时,用户常面临网络连接、虚拟交换机配置、资源分配及其他问题。例如,虚拟机无法获取IP地址可能源于DHCP服务异常,需检查并启动该服务;外部虚拟交换机配置错误则需确保物理网络适配器正确连接。此外,内存不足或虚拟硬盘性能瓶颈也会影响运行效果。通过合理调整资源配置、优化设置及遵循最佳实践,可有效解决这些问题。
|
11月前
|
监控 网络安全 虚拟化
Hyper-V中Win10,虚拟机运行错误处理的方案
当Hyper-V中的Windows 10虚拟机出现运行错误时,可按以下步骤处理:首先进行基本检查与修复,包括检查虚拟机配置、确保Hyper-V服务正常运行及重启相关服务。其次,使用PowerShell命令或DISM工具修复虚拟机配置和系统组件。接着,查看事件查看器中的错误日志,分析问题原因。调整虚拟机资源分配,优化性能。针对特定错误情况,如启动失败或网络问题,采取相应措施解决。若问题仍未解决,考虑克隆、重置或重新安装虚拟机,必要时联系技术支持。操作前请备份重要数据并以管理员身份运行命令。
1080 22
|
11月前
|
监控 测试技术 数据库
详解Hyper-V虚拟机CPU分配方法
在Hyper-V环境中,合理分配虚拟机的CPU资源至关重要。vCPU是物理CPU的虚拟化表示,管理员可通过指定处理器数量、核心数、设置兼容性和亲和性、启用动态分配等方法优化性能。使用性能监视工具监控并调整CPU资源,避免过度分配,确保虚拟机稳定运行。定期评估和优化资源分配策略,以适应业务变化,保持最佳性能。
|
11月前
|
安全 网络协议 网络安全
当虚拟机出现网络连接问题时,应该先检查Hyper-V的网卡连接配置
当虚拟机出现网络连接问题时,应首先检查Hyper-V的网卡配置。具体步骤包括:确认虚拟机运行状态、检查虚拟交换机类型和物理网卡连接、确保虚拟机网络适配器正确连接到虚拟交换机,并验证网络配置(IP地址等)。常见问题如虚拟交换机配置错误、网络适配器未连接或防火墙阻止连接,可通过重新配置或调整设置解决。必要时重启虚拟机和宿主机,查看事件日志或联系技术支持以进一步排查问题。
|
11月前
|
虚拟化 网络虚拟化 Windows
导入虚拟机到Hyper-V环境时,理解并配置网络适配器设置是确保网络通信的关键
在Hyper-V环境中,正确配置虚拟机的网络适配器是确保其网络通信的关键。需先启用Hyper-V功能并创建虚拟交换机。接着,在Hyper-V管理器中选择目标虚拟机,添加或配置网络适配器,选择合适的虚拟交换机(外部、内部或私有),并根据需求配置VLAN、MAC地址等选项。最后,启动虚拟机并验证网络连接,确保其能正常访问外部网络、与主机及其他虚拟机通信。常见问题包括无法访问外部网络或获取IP地址,需检查虚拟交换机和适配器设置。
|
4月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
943 62
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
5月前
|
运维 Linux 网络安全
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
185 4

热门文章

最新文章