【问题标题】:String manipulation on each noteproperty value对每个 note 属性值进行字符串操作
【发布时间】:2017-08-16 07:03:54
【问题描述】:

尝试了许多不同的方法来尝试使其正常工作。这是我能想到的最接近的非工作示例。

如果我还想摆脱 $ 和 ; 我想摆脱具有空值的 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($_)
    }
}

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

【问题讨论】:

  • 字符串在 .NET 中是不可变的,因此 String.Replace 不会修改字符串。 -like ';'-like '$' 也将寻找完全匹配。
  • 请举例说明什么可以实现相同的目标?

标签: string powershell foreach


【解决方案1】:

还有一点需要注意;如果您正在运行从 Get-Member 获取对象的替换,那么您一开始就没有接触到原始对象。

您可以通过运行另一个 Get-Member 来亲自查看这一点,您的 ForEach-Object 用于查看正在通过管道传递的内容(剧透,它是 Microsoft.PowerShell.Commands.MemberDefinition

您还可以通过对一个带有 1 个Get-Member 管道的字符串运行它然后将它与第二个 Get-Member 管道进行比较来更好地看到这一点:

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

VS

"asfdasf" | Get-Member | Get-Member(这将作为 MemberDefinition 对象返回,因为您实际上是在获取 Get-Member 结果的成员)

正在研究更好的方法,将很快更新此答案。

【讨论】:

    【解决方案2】:

    这就是我想出的。首先,您需要通过查找这些成员然后使用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('$', '')
            }
        }
        $_
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-13
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      相关资源
      最近更新 更多