从 powershell 中 select 语句的结果中获取行数

问题描述 投票:0回答:1

我使用以下代码创建一个小型内存数据库,该数据库从 CSV 文件读取其源代码。当我使用 select 语句查询时,行数始终返回零,即使我知道记录位于数据中。

$inMemDB = New-Object System.Data.Datatable
[void]$inMemDB.Columns.Add("sEmailAddress")
[void]$inMemDB.Columns.Add("sSamAccountName")
[void]$inMemDB.Columns.Add("nPhoneNumber")
[void]$inMemDB.Columns.Add("sFirstName")
[void]$inMemDB.Columns.Add("sLastName")
[void]$inMemDB.Columns.Add("sDisplayName")
[void]$inMemDB.Columns.Add("sDepartment")

$recordCount = 0
Import-Csv $cachedEmpCSV |       
        ForEach-Object {
            [void]$inMemDB.Rows.Add($_.'sEmailAddress',$_.'sSamAccountName',$_.'nPhoneNumber',$_.'sFirstName',$_.'sLastName',$_.'sDisplayName',$_.'sDepartment' )
        }

Write-Host $inMemDB.Rows.Count

$oRs = ($inMemDB.Select("sEmailAddress = '[email protected]'"))
Write-Host $oRs.Rows.Count
        
If ($oRS.Rows.Count -eq 1) {
    Write-Host $oRs.sSamAccountName
}
powershell in-memory-database
1个回答
0
投票

DataTable.Select
输出
DataRow[]
DataRow
实例没有
.Rows
属性。在您的示例中,
$oRs.Rows
为空,因此
$oRs.Rows.Count
也为空,应更改为简单的
$oRs.Count

$inMemDB = [System.Data.Datatable]::new()
$inMemDB.Columns.AddRange(@('sSamAccountName', 'sEmailAddress'))
$null = $inMemDB.Rows.Add('foo', 'bar')
$result = $inMemDB.Select("sEmailAddress = 'bar'")
$result.Count # => 1
© www.soinside.com 2019 - 2024. All rights reserved.