我对 PowerShell 并不陌生,但也不熟练使用,因此我在这里发布我的问题以寻求可能的帮助。
我以管理员身份登录 Windows PowerShell ISE,安装了 PowerCLI 模块,当前登录托管虚拟机的 Hyper V 服务器。我有一个 PS 脚本,它将遍历多个虚拟机并扩展它们的磁盘空间以实现 30GB 的可用空间。但是,我不得不使用 PSSession 一次一台机器将这些驱动器的大小调整为新分配的空间。我一直在寻找一种方法来使用 PS 脚本遍历这些机器的文本文件列表并调整它们的大小,就像其他脚本扩展驱动器一样。经过一番研究,我意识到我可以使用 PSSession 来做到这一点。我创建了一个脚本来执行此操作,它运行良好,直到它到达下面脚本的调整大小部分。
Resize-Partition -DriveLetter $drive_letter -Size $size.SizeMax
我收到错误消息“Resize-Partition:不支持大小扩展信息:分区已经是请求的大小。”我检查了测试机器,扩展卷已正确扩展,但分区尚未调整大小以提供新提供的可用磁盘空间量。脚本发布如下。我收到的完整错误消息将发布在脚本下方。
我不确定我在这里遗漏了什么,并且感谢所提供的所有帮助。
脚本:
$vmcomputers = Get-Content -Path C:\Temp\computers.txt
$drive_letter = "C"
# iterate through list
$result = foreach ($vmcomputer in $vmcomputers) {
# create PSsession
#$session = New-PSSession -ConnectionUri $vmcomputer.hostname
$session = Get-Content C:\Temp\computers.txt | New-PSSession -ThrottleLimit 50
# resize disk
$size = (Get-PartitionSupportedSize -DriveLetter $drive_letter)
Resize-Partition -DriveLetter $drive_letter -Size $size.SizeMax
# cleanup
Remove-PSSession -PSSession $session
}
错误信息:
Resize-Partition : Size Not Supported
Extended information:
The partition is already the requested size.
Activity ID: {69684292-964a-4637-92bd-1ddf1ccb773f}
At C:\Temp\ResizeVMdiskPsession\AICodeResizeVmHardDisk.ps1:12 char:3
+ Resize-Partition -DriveLetter $drive_letter -Size $size.SizeMax
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (StorageWMI:ROOT/Microsoft/.../MSF
T_Partition) [Resize-Partition], CimException
+ FullyQualifiedErrorId : StorageWMI 4097,Resize-Partition
Remove-PSSession : A parameter cannot be found that matches parameter name
'PSSession'.
At C:\Temp\ResizeVMdiskPsession\AICodeResizeVmHardDisk.ps1:15 char:20
+ Remove-PSSession -PSSession $session
+ ~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Remove-PSSession], Paramet
erBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm
ands.RemovePSSessionCommand
要通过 PSSession 远程运行命令,请使用
Invoke-Command
:或者,您可以使用
$session = New-PSSession $vmcomputer
创建会话,然后稍后使用它Invoke-Command -Session $session -ScriptBlock {...}
,但仅当您想在脚本中多次重复使用会话时我才会这样做。在我的示例中使用
-ComputerName
类似方法只需跳过创建/删除 PSSession 的步骤