Não sou novato no PowerShell, mas também não sou fluente nele, então postei meu problema aqui para possível assistência.
Estou logado no Windows PowerShell ISE como administrador, tenho o módulo PowerCLI instalado e estou logado no servidor Hyper V que hospeda nossas máquinas virtuais. Tenho um script PS que itera por várias VMs e expande o espaço em disco nelas para atingir 30 GB de espaço livre. No entanto, tenho tido que redimensionar essas unidades para o espaço recém-alocado, uma máquina de cada vez, usando o PSSession. Tenho procurado uma maneira de usar o script PS para iterar por uma lista de arquivos de texto dessas máquinas e redimensioná-las, assim como o outro script faz para expandir as unidades. Depois de alguma pesquisa, percebi que poderia usar o PSSession para fazer exatamente isso. Criei um script para fazer isso e ele funciona bem até chegar à parte de redimensionamento do script abaixo.
Resize-Partition -DriveLetter $drive_letter -Size $size.SizeMax
Recebo a mensagem de erro "Resize-Partition: Size Not Supported Extended information: The partition is already the requested size." Verifico as máquinas de teste e o volume estendido está corretamente estendido, mas a partição não foi redimensionada para fazer a quantidade recém-fornecida de espaço livre em disco. O script está postado abaixo. A mensagem de erro completa que recebo será postada abaixo do script.
Não sei o que estou perdendo aqui e toda a ajuda fornecida é bem-vinda.
Roteiro:
$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
}
Mensagem de erro:
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
Para executar comandos remotamente via PSSession, use
Invoke-Command
:Como alternativa, você pode usar
$session = New-PSSession $vmcomputer
para criar a sessão e usá-la mais tarde comInvoke-Command -Session $session -ScriptBlock {...}
, mas eu só faria isso se quisesse reutilizar uma sessão várias vezes em um script.Usar
-ComputerName
como no meu exemplo apenas ignora as etapas de criação/remoção de PSSessions