2015-01-16 3 views
0

나는 가지고있는 목록을 기반으로 Powershell을 사용하여 .NET DataTable에서 소수의 행을 제거하려고합니다.조건부로 PowerShell에서 DataTable 행을 삭제 하시겠습니까?

$Global:dt = New-Object System.Data.Datatable 
$dt.Columns.Add("Name") 
$dt.Columns.Add("AccountID") 

내가 제대로 내 데이터 테이블을 채우는하고 알고

여기 내 데이터 테이블 선언입니다 : 여기 내 응축 코드입니다. 여기에 내가 시도하고 조건부 뭔가 삭제 내 코드입니다 :

$testname = "John Smith" 

foreach ($id in $DeleteIDs) 
{ 
    $dt.Select("Name = '" + $testname + "' AND AccountId = '" + $id + "'").Delete() 
} 

내가 미쳤다고 할 수는 있지만이 나를 위해 내가 그것을 시도 처음 일을 맹세. 이 System.Data.DataRow은 Delete 방법을 포함하지 않는 말한다

Method invocation failed because [System.Data.DataRow[]] doesn't contain a method named 'Delete'. 
At P:\My Documents\Scripts\myLoc\myScript.ps1:152 char:9 
+   $dt.Select("Name= '" + $testname+ "' AND AccountId = '" + $id + "' ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : MethodNotFound 

:하지만 지금 나는 다음과 같은 오류가 발생하고있다. 나는 이것이 시도가 아님을 안다. 중단 점을 배치하고 $dt | gm을 실행하면 다음과 같은 결과를 얻습니다.

PS C:\WINDOWS\system32>> $dt | gm 


    TypeName: System.Data.DataRow 
+2

'System.Data.DataRow []'에는 삭제 방법이 없지만 미묘하지만 중요한 차이점이 있습니다.이 시점에서'DataRow' 배열을 다루고 있습니다. 각 객체의 delete 메소드에 액세스하려면 컬렉션을 반복해야합니다. – arco444

답변

0

덕분에 @ arco444 덕분에 내가 가진 문제를 정확히 찾아 낼 수있었습니다. 그리고 나는 미치지 않았다.

제거하려는 데이터 세트가 계속 변경되고 있습니다.

올바르게 실행되었을 때, 내가 $testname을 검색 한 곳에서 전체 데이터 세트에 해당 이름의 인스턴스가 단 하나뿐입니다.

오늘 스크립트를 실행했을 때 $testname의 여러 인스턴스가 있으므로 행 배열로 사용했습니다. 다음과 같은 고정 된 모든 것 :

foreach ($id in $DeleteIDs) 
{ 
    $rows = $dt.Select("Name = '" + $testname + "' AND AccountId = '" + $id + "'").Delete() 

    foreach($row in $rows) 
    { 
      row.Delete() 
    } 
} 

가변 변수는 각 행에 대한 포인터 배열을 저장하므로 각 변수를 수동으로 찾아 삭제할 수 있습니다.

+0

당신의 대답에, 나는 당신이 할당에 .Delete()를 가져서는 안되며, row.Delete()에 달러 기호가 있어야한다고 생각합니다. – JohnG

관련 문제