Это может произойти, потому что $width
- это массив. Если вы запустите $width.PsObject
, вы увидите, что значение BaseObject
будет коллекцией, которая может содержать $null
. Когда вы запускаете $width[0]
, вы можете возвращать значение $null
. Вам нужно будет использовать другой индекс с вашим текущим кодом.
Однако вы можете отфильтровать значения $null
с самого начала с Where
.
$width = (Get-WmiObject -Class Win32_DesktopMonitor | Where ScreenWidth).ScreenWidth
$width = $width | Foreach-Object { $_ / 2 }
С вашей попыткой, по крайней мере, в моей системе $width
возвращает массив.
$width.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
$width
1920
$width.PsObject | Select-Object BaseObject
BaseObject
----------
{$null, 1920}
$width[0] # Index 0 contains the $null
$width[1] # Index 1 contains the size
1920