该项目旨在自动创建虚拟机。服务器是 Windows Hyper-V Free 2016。以下是博客文章https://www.starwindsoftware.com/blog/automate-the-hyper-v-virtual-machine-deployment-with-powershell我编写了为特定用户创建虚拟机的脚本(它绑定到用户电子邮件):
$User = Read-Host -Prompt 'Input the user email'
$VMName = "sr-si-01_$User"
# Automatic Start Action (Nothing = 0, Start =1, StartifRunning = 2)
$AutoStartAction = 0
# In second
$AutoStartDelay = 10
# Automatic Start Action (TurnOff = 0, Save =1, Shutdown = 2)
$AutoStopAction = 2
###### Hardware Configuration ######
# VM Path
$VMPath = "E:\VMs\"
# VM Generation (1 or 2)
$Gen = 2
# Processor Number
$ProcessorCount = 1
## Memory (Static = 0 or Dynamic = 1)
$Memory = 1
# StaticMemory
$StaticMemory = 2GB
# DynamicMemory
$StartupMemory = 2GB
$MinMemory = 1GB
$MaxMemory = 4GB
# Sysprep VHD path (The VHD will be copied to the VM folder)
$SysVHDPath = "E:\Windows8dot1.vhdx"
# Rename the VHD copied in VM folder to:
$OsDiskName = $VMName
### Additional virtual drives
$ExtraDrive = @()
# Drive 1
$Drive = New-Object System.Object
$Drive | Add-Member -MemberType NoteProperty -Name Name -Value Data-$VMName
$Drive | Add-Member -MemberType NoteProperty -Name Path -Value $($VMPath + "\" + $VMName)
$Drive | Add-Member -MemberType NoteProperty -Name Size -Value 10GB
$Drive | Add-Member -MemberType NoteProperty -Name Type -Value Dynamic
$ExtraDrive += $Drive
# Drive 2
$Drive = New-Object System.Object
$Drive | Add-Member -MemberType NoteProperty -Name Name -Value Bin-$VMName
$Drive | Add-Member -MemberType NoteProperty -Name Path -Value $($VMPath + "\" + $VMName)
$Drive | Add-Member -MemberType NoteProperty -Name Size -Value 20GB
$Drive | Add-Member -MemberType NoteProperty -Name Type -Value Fixed
$ExtraDrive += $Drive
# You can copy/delete this below block as you wish to create (or not) and attach several VHDX
### Network Adapters
# Primary Network interface: VMSwitch
$VMSwitchName = "Internal"
$VlanId = 0
$VMQ = $False
$IPSecOffload = $False
$SRIOV = $False
$MacSpoofing = $False
$DHCPGuard = $False
$RouterGuard = $False
$NicTeaming = $False
## Additional NICs
$NICs = @()
# NIC 1
$NIC = New-Object System.Object
$NIC | Add-Member -MemberType NoteProperty -Name VMSwitch -Value "Internal"
$NIC | Add-Member -MemberType NoteProperty -Name VLAN -Value 10
$NIC | Add-Member -MemberType NoteProperty -Name VMQ -Value $False
$NIC | Add-Member -MemberType NoteProperty -Name IPsecOffload -Value $True
$NIC | Add-Member -MemberType NoteProperty -Name SRIOV -Value $False
$NIC | Add-Member -MemberType NoteProperty -Name MacSpoofing -Value $False
$NIC | Add-Member -MemberType NoteProperty -Name DHCPGuard -Value $False
$NIC | Add-Member -MemberType NoteProperty -Name RouterGuard -Value $False
$NIC | Add-Member -MemberType NoteProperty -Name NICTeaming -Value $False
$NICs += $NIC
#NIC 2
#$NIC = New-Object System.Object
#$NIC | Add-Member -MemberType NoteProperty -Name VMSwitch -Value "LS_VMWorkload"
#$NIC | Add-Member -MemberType NoteProperty -Name VLAN -Value 20
#$NIC | Add-Member -MemberType NoteProperty -Name VMQ -Value $False
#$NIC | Add-Member -MemberType NoteProperty -Name IPsecOffload -Value $True
#$NIC | Add-Member -MemberType NoteProperty -Name SRIOV -Value $False
#$NIC | Add-Member -MemberType NoteProperty -Name MacSpoofing -Value $False
#$NIC | Add-Member -MemberType NoteProperty -Name DHCPGuard -Value $False
#$NIC | Add-Member -MemberType NoteProperty -Name RouterGuard -Value $False
#$NIC | Add-Member -MemberType NoteProperty -Name NICTeaming -Value $False
#$NICs += $NIC
# You can copy/delete the above block and set it for additional NIC
######################################################
### VM Creation and Configuration ###
######################################################
## Creation of the VM
# Creation without VHD and with a default memory value (will be changed after)
New-VM -Name $VMName -Path $VMPath -NoVHD -Generation $Gen -MemoryStartupBytes 1GB -SwitchName $VMSwitchName
if ($AutoStartAction -eq 0){$StartAction = "Nothing"}
Elseif ($AutoStartAction -eq 1){$StartAction = "Start"}
Else{$StartAction = "StartIfRunning"}
if ($AutoStopAction -eq 0){$StopAction = "TurnOff"}
Elseif ($AutoStopAction -eq 1){$StopAction = "Save"}
Else{$StopAction = "Shutdown"}
## Changing the number of processor and the memory
# If Static Memory
if (!$Memory){
Set-VM -Name $VMName -ProcessorCount $ProcessorCount -StaticMemory -MemoryStartupBytes $StaticMemory -AutomaticStartAction $StartAction -AutomaticStartDelay $AutoStartDelay -AutomaticStopAction $StopAction
}
# If Dynamic Memory
Else{
Set-VM -Name $VMName -ProcessorCount $ProcessorCount -DynamicMemory -MemoryMinimumBytes $MinMemory -MemoryStartupBytes $StartupMemory -MemoryMaximumBy
如何允许非管理员用户运行脚本?如果可以,如何允许用户远程执行脚本?
答案1
要远程运行脚本,请将以下代码添加到用户脚本中
Enable-PSRemoting -Force
$Server = Read-Host -Prompt 'Input the Hype-V server's name or IP Address'
Enter-PSSession -ComputerName $Server
资料来源:
https://techtalk.gfi.com/how-to-manage-your-servers-remotely-with-powershell/
答案2
如果您将他们的用户帐户添加到 Hyper-V 管理员本地组,他们应该能够使用 Hyper-V 创建虚拟机。如果您更新脚本以使用参数-ComputerName
或将创建命令包装在 中Invoke-Command
。我不知道一旦获得 Hyper-V 管理员权限,用户是否还需要远程访问 Hyper-V 服务器的权限。