每个noteproperty值的字符串操作

时间:2017-03-23 15:49:04

标签: string powershell foreach

尝试了许多尝试使其工作的不同方法。这是我能提出的最接近的非工作范例。

我想摆脱带有空值的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($_)
    }
}

最诚挚的问候!! 希望得到你的帮助:)

2 个答案:

答案 0 :(得分:0)

还要注意的事情;如果您正在运行从Get-Member获取对象的替换,则不会触及原始对象。

您可以通过运行另一个Get-Member来查看此内容,ForEach-Object是您要查看通过管道的内容(剧透,Microsoft.PowerShell.Commands.MemberDefinition

您还可以通过将1 Get-Member管道传输到字符串上然后将其与第二个Get-Member管道进行比较来更好地看到这一点:

"asfdasf" | Get-Member(这将返回预期的String类型)

VS

"asfdasf" | Get-Member | Get-Member(这会作为一个MemberDefinition对象回归,因为你真的得到了Get-Member结果的成员)

采用更好的方法,很快就会更新这个答案。

答案 1 :(得分: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('$', '')
        }
    }
    $_
}