繁体   English   中英

powershell '您不能在空值表达式上调用方法'

[英]powershell 'You cannot call a method on a null-valued expression'

$DrivesObject = Get-Disk | Sort-Object -Property Number 
$DrivesTable = New-Object System.Data.DataTable
$DrivesTable.Columns.AddRange(@("Number", "FriendlyName", "SerialNumber"))
try
{
    foreach ($drive in $DrivesObject)
    { [void]$DrivesTable.Rows.Add(($drive.Number), ($drive.FriendlyName).Trim(), ($drive.SerialNumber).Trim()) }
}
catch
{ Write-Host $_.Exception.Message; Exit }
$DrivesTable

在我运行此脚本的地方,我收到错误消息“您无法在空值表达式上调用方法。” 但是,如果我将 ($drive.SerialNumber).Trim()) 替换为 ($drive.SerialNumber),则脚本运行不会出错。 请帮助为什么添加 .Trim() 会出错

由于 Trim() 是一种方法,因此必须设置一个值才能使用它。 在您的情况下,并非所有磁盘都存在 SerialNumber,但这不是问题(取决于磁盘的固件)。

如果对象/变量/属性不存在 (NULL),则方法将不起作用并抛出错误。 在使用这种方法之前,您需要检查一下。

您要么使用@iRon 提到的技巧,将所有内容括在双引号中(即使输入为 NULL,也会创建一个字符串),或者您需要明确检查 $NULL。

使用 PS 7,您还可以使用“NULL 条件运算符”

请参阅: https : //docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_operators?view=powershell-7#null-conditional-operators--and-

PS7 示例:

$nullVar = $null

Write-Host 'Default property accessor (will throw an error)' -ForegroundColor Yellow
Write-Host ("`t{0,-10}: {1}" -f 'toString', $nullVar.toString())
Write-Host ("`t{0,-10}: {1}" -f 'trim', $nullVar.trim())

Write-Host 'Null-conditional operators (works wihtout errors)' -ForegroundColor Yellow
Write-Host ("`t{0,-10}: {1}" -f 'toString', ${nullVar}?.toString())
Write-Host ("`t{0,-10}: {1}" -f 'trim', ${nullVar}?.trim())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM