![](/img/trans.png)
[英]You cannot call a method on a null-valued expression in powershell with excel
[英]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-
$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.