Не получает ожидаемого результата при использовании Invoke-VMScript для запроса wmi диска - PullRequest
0 голосов
/ 19 сентября 2019

Добрый день

Я пытаюсь добавить информацию о пути к диску к оригинальному сценарию ниже, который соответствует жестким дискам виртуальной машины и Windows.

http://www.van -liehout.com/2009/12/match-vm-and-windows-harddisks-using-powercli/

Когда один и тот же код выполняется с использованием Invoke-VMScript, для DiskID и SCSI нет результатовцифры.

$code = @'
$Volumes = Get-WmiObject  Win32_Volume | Where-Object {$_.DriveType -eq "3" -and $_.Label -ne "System Reserved"}

ForEach ($Volume in $Volumes)
   { 
   ""  | Select-Object -Property     @{N="Caption";E={$Volume.Caption}},
   @{N="Disk";E={Invoke-Command -ScriptBlock {(Get-Partition | Where-Object {$_.AccessPaths -like $Volume.Caption}).DiskNumber}}},
   @{N="SCSI Id";E={Invoke-Command -ScriptBlock {
$Disk = (Get-Partition | Where-Object {$_.AccessPaths -like $Volume.Caption}).DiskNumber
$SCSI = Get-WmiObject -Class Win32_DiskDrive | Where-Object {$_.Index -eq $Disk} 
"$($SCSI.SCSIPort):$($SCSI.SCSITargetID)" 
 } } } 
   }   
'@

Invoke-VMScript -ScriptText $code -vm DBS103  -GuestUser 'user' -GuestPassword 'usrpw' -ScriptType Powershell


    ScriptOutput
-----------------------------------------------------------------
|  Caption                    Disk                       SCSI Id
|  -------                    ----                       -------
|  C:\                                                   :
|  D:\                                                   :
|  E:\                                                   :
|  F:\                                                   :
|  F:\MSSQL11.MSSQLSERVER\...                            :
|  E:\MSSQL11.MSSQLSERVER\...                            :
|  F:\MSSQL11.MSSQLSERVER\...                            :
|  F:\MSSQL11.MSSQLSERVER\...                            :
|  F:\MSSQL11.MSSQLSERVER\...                            :
|  F:\MSSQL11.MSSQLSERVER\...                            :
|  F:\MSSQL11.MSSQLSERVER\...                            :
-----------------------------------------------------------------

Когда приведенные ниже коды выполняются на сервере, результаты показывают номера DiskID и SCSI.

$Volumes = Get-WmiObject  Win32_Volume | Where-Object {$_.DriveType -eq "3" -and $_.Label -ne "System Reserved"}

ForEach ($Volume in $Volumes)
   { 
   ""  | Select-Object -Property     @{N="Caption";E={$Volume.Caption}},
   @{N="Disk";E={Invoke-Command -ScriptBlock {(Get-Partition | Where-Object {$_.AccessPaths -like $Volume.Caption}).DiskNumber}}},
   @{N="SCSI Id";E={Invoke-Command -ScriptBlock {
$Disk = (Get-Partition | Where-Object {$_.AccessPaths -like $Volume.Caption}).DiskNumber
$SCSI = Get-WmiObject -Class Win32_DiskDrive | Where-Object {$_.Index -eq $Disk} 
"$($SCSI.SCSIPort):$($SCSI.SCSITargetID)" 
 } } } 
   }   

Результаты приведены ниже.

-------                                                                    ---- -------
C:\                                                                           0 2:0
D:\                                                                           1 2:1
E:\                                                                           2 2:2
F:\                                                                           3 2:3
F:\MSSQL11.MSSQLSERVER\MSSQL\DATA01\                                          4 2:4
E:\MSSQL11.MSSQLSERVER\MSSQL\LOG01\                                           5 2:5
F:\MSSQL11.MSSQLSERVER\MSSQL\DATA02\                                          6 2:6
F:\MSSQL11.MSSQLSERVER\MSSQL\BCK\                                             7 2:8
F:\MSSQL11.MSSQLSERVER\MSSQL\DATA03\                                          8 2:9
F:\MSSQL11.MSSQLSERVER\MSSQL\DATA04\                                          9 2:10
F:\MSSQL11.MSSQLSERVER\MSSQL\BCK2\                                           10 2:11

Заранее благодарим за руководство.

...