调用远程 powershell 命令不返回所有结果
Invoking remote powershell command not returning all results
我是 powershell 的新手,我正在尝试调用远程 powershell 命令来 return 驱动器的大小,但我遇到了麻烦。
如果我直接在服务器上 运行 下面的命令,那么我得到的结果是 4。
import-module virtualmachinemanager
$checks = get-vm -Name DC1 | get-scvmcheckpoint
foreach ($disk in $checks){
$disk.virtualdiskdrives.virtualharddisks.size
}
然后我尝试使用以下命令远程 运行 命令,但没有得到结果。 $checks 变量包含许多其他值。
$session = New-PSSession -ComputerName VM01 -ConfigurationName Microsoft.Powershell32 -Credential administrator
$checks = Invoke-Command -Session $session -ArgumentList VM01 -ScriptBlock {
import-module virtualmachinemanager
get-vm -Name DC1 | get-scvmcheckpoint
}
foreach ($disk in $checks){
$disk.virtualdiskdrives.virtualharddisks.size
}
这里最有可能的问题(尚未在实际 VMM 服务器上测试代码)是从远程会话 return 编辑的对象被序列化和反序列化。这里有一个参考 How objects are sent to and from remote sessions.
为了解决这个问题,我建议在远程机器上完成所有处理,并且只使用 return 简单的 PS 对象。
$session = New-PSSession -ComputerName VM01 -ConfigurationName Microsoft.Powershell32 -Credential administrator
$checks = Invoke-Command -Session $session -ArgumentList VM01 -ScriptBlock {
import-module virtualmachinemanager
$disks = get-vm -Name DC1 | get-scvmcheckpoint
foreach ($disk in $disks){
$disk.virtualdiskdrives.virtualharddisks.size
}
}
foreach ($disk in $checks){
write-host "Disk size = $disk"
}
我是 powershell 的新手,我正在尝试调用远程 powershell 命令来 return 驱动器的大小,但我遇到了麻烦。
如果我直接在服务器上 运行 下面的命令,那么我得到的结果是 4。
import-module virtualmachinemanager
$checks = get-vm -Name DC1 | get-scvmcheckpoint
foreach ($disk in $checks){
$disk.virtualdiskdrives.virtualharddisks.size
}
然后我尝试使用以下命令远程 运行 命令,但没有得到结果。 $checks 变量包含许多其他值。
$session = New-PSSession -ComputerName VM01 -ConfigurationName Microsoft.Powershell32 -Credential administrator
$checks = Invoke-Command -Session $session -ArgumentList VM01 -ScriptBlock {
import-module virtualmachinemanager
get-vm -Name DC1 | get-scvmcheckpoint
}
foreach ($disk in $checks){
$disk.virtualdiskdrives.virtualharddisks.size
}
这里最有可能的问题(尚未在实际 VMM 服务器上测试代码)是从远程会话 return 编辑的对象被序列化和反序列化。这里有一个参考 How objects are sent to and from remote sessions.
为了解决这个问题,我建议在远程机器上完成所有处理,并且只使用 return 简单的 PS 对象。
$session = New-PSSession -ComputerName VM01 -ConfigurationName Microsoft.Powershell32 -Credential administrator
$checks = Invoke-Command -Session $session -ArgumentList VM01 -ScriptBlock {
import-module virtualmachinemanager
$disks = get-vm -Name DC1 | get-scvmcheckpoint
foreach ($disk in $disks){
$disk.virtualdiskdrives.virtualharddisks.size
}
}
foreach ($disk in $checks){
write-host "Disk size = $disk"
}