2017-03-23 23 views
0

は、この作業をしようとするさまざまな方法を試しました。これは私が思い付くことができるもっとも近い非実例です。各noteproperty値の文字列操作

私もnullを持つNotePropertyアイテムを取り除きたいと思っています。残りの値を残しておいて、オブジェクトの任意のNoteProperty値の文字を返すことができますか?次のコード例で何が間違っているか教えてください。

$JournalObject | Get-Member -MemberType NoteProperty | ForEach-Object { 
    if ($JournalObject.$_.Value -like ';') 
    { 
    $JournalObject.$_.Value.Replace(';', '') 
    } 
    if ($JournalObject.$_.Value -like '$') 
    { 
    $JournalObject.$_.Value.Replace('$', '') 
    } 
    if ($JournalObject.$_.Value -eq $null) 
    { 
    $JournalObject.PSObject.Properties.Remove($_) 
    } 
} 

親切! あなたの助けを期待してください:)

+1

文字列は.NETでは不変です。したがって、 'String.Replace'は文字列を変更しません。 '-like ';''と '' like '$' 'は完全一致を探します。 – PetSerAl

+0

同じ目標を達成するために何がうまくいくかの例は何ですか? – SynxUK

答えて

0

何かにも注意してください;あなたが置換を実行している場合、それはGet-Memberからオブジェクトになっています。最初のオブジェクトには触れていません。あなたのForEach-Objectがパイプライン(スポイラー、それはだMicrosoft.PowerShell.Commands.MemberDefinition

あなたはまた、文字列に対してそれを実行することにより、この少し良く見ることができ通過させているものを確認することです別のGet-Memberを実行して、自分のためにこれを見ることができます

"asfdasf" | Get-Member(これは予想される文字列型を返すであろう)

VS:1 Get-Memberと第Get-Memberパイプと比較次いでパイプ

"asfdasf" | Get-Member | Get-Member(MemberDefinitionオブジェクトとして、この意志のカムバック、あなたは文字通りをGet-Member結果のメンバーを取得しているので)

がより良いアプローチに取り組んで、すぐにこの答えを更新します。

0

これは私が思いついたものです。まず、返されていないプロパティを切り捨てて、存在しなくなるメンバーをループさせないようにする必要があります。そのメンバーを見つけてselect-objectを除外します。

次に、ループして値を固定することができます。

$members = $JournalObject | Get-Member -MemberType NoteProperty | select -expandproperty name 
$removelist = $JournalObject | % { 
    foreach ($member in $members) { 
     if ($_.$member -eq $null) { 
      $member 
     } 
    } 
} 
$uremovelist = $removelist | select -unique 
$prunedJournalObject = $JournalObject | select * -ExcludeProperty $uremovelist 
$members = $prunedJournalObject | Get-Member -MemberType NoteProperty | select -expandproperty 
$prunedJournalObject | % { 
    foreach ($member in $members) { 
     if ($_.$member -match ';') { 
      $_.$member = $_.$member.Replace(';', '') 
     } 
     if ($_.$member -match '$') { 
      $_.$member = $_.$member.Replace('$', '') 
     } 
    } 
    $_ 
}