كيفية يتكرر خلال مجموعة بيانات في بوويرشيل؟

StackOverflow https://stackoverflow.com/questions/804133

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا أحاول مهمة "جدا" بسيطة لقيم إخراج كل الصفوف من DataSet:

for ($i=0;$i -le $ds.Tables[1].Rows.Count;$i++)
{
  Write-Host 'value is : ' + $i + ' ' + $ds.Tables[1].Rows[$i][0]
}

ويعطي الانتاج ...

value is :  +0+ +System.Data.DataSet.Tables[1].Rows[0][0] 
value is :  +1+ +System.Data.DataSet.Tables[1].Rows[1][0] 
value is :  +2+ +System.Data.DataSet.Tables[1].Rows[2][0] 
value is :  +3+ +System.Data.DataSet.Tables[1].Rows[3][0] 
value is :  +4+ +System.Data.DataSet.Tables[1].Rows[4][0] 
value is :  +5+ +System.Data.DataSet.Tables[1].Rows[5][0] 
value is :  +6+ +System.Data.DataSet.Tables[1].Rows[6][0] 

وكيف يمكنني الحصول على القيمة الفعلية من العمود؟

هل كانت مفيدة؟

المحلول

والتقييم سلسلة بوويرشيل تدعو ToString () على مجموعة البيانات. من أجل تقييم أي خصائص (أو استدعاءات الأسلوب)، لديك لإجبار تقييم بواسطة إحاطة التعبير في $()

for($i=0;$i -lt $ds.Tables[1].Rows.Count;$i++)
{ 
  write-host "value is : $i $($ds.Tables[1].Rows[$i][0])"
}

وبالإضافة إلى ذلك foreach يسمح لك لتكرار خلال مجموعة أو طائفة دون الحاجة إلى معرفة طول.

وإعادة كتابة (وتحريرها للترجمة) -

foreach ($Row in $ds.Tables[1].Rows)
{ 
  write-host "value is : $($Row[0])"
}

نصائح أخرى

وفيما يلي مثال عملي (بناء مجموعة بيانات من الموقع الحالي الخاص بك):

$ds = new-object System.Data.DataSet
$ds.Tables.Add("tblTest")
[void]$ds.Tables["tblTest"].Columns.Add("Name",[string])
[void]$ds.Tables["tblTest"].Columns.Add("Path",[string])

dir | foreach {
    $dr = $ds.Tables["tblTest"].NewRow()
    $dr["Name"] = $_.name
    $dr["Path"] = $_.fullname
    $ds.Tables["tblTest"].Rows.Add($dr)
}


$ds.Tables["tblTest"]

و$ds.Tables["tblTest"] هو الكائن الذي يمكنك التلاعب تماما مثل أي كائن بوويرشيل أخرى:

$ds.Tables["tblTest"] | foreach {
    write-host 'Name value is : $_.name
    write-host 'Path value is : $_.path
}

ومحلل هو وجود مشكلة وصل سلسلة الخاص بك. جرب هذا:

write-host 'value is : '$i' '$($ds.Tables[1].Rows[$i][0])

تعديل: هل تستخدم علامات الاقتباس المزدوجة قد يكون أيضا أكثر وضوحا منذ يمكنك تضمين عبارات ضمن سلسلة مقتبسة:

write-host "value is : $i $($ds.Tables[1].Rows[$i][0])"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top