String 对每个noteproperty值进行字符串操作
尝试了许多不同的方法,试图让这个工作。这是我能想到的最接近的不起作用的例子 如果我还想去掉$and,我想去掉带有空值的NoteProperty项;对象中任何NoteProperty值中的字符,而将其余的值留在后面。有人能告诉我下面的代码示例有什么问题吗String 对每个noteproperty值进行字符串操作,string,powershell,foreach,String,Powershell,Foreach,尝试了许多不同的方法,试图让这个工作。这是我能想到的最接近的不起作用的例子 如果我还想去掉$and,我想去掉带有空值的NoteProperty项;对象中任何NoteProperty值中的字符,而将其余的值留在后面。有人能告诉我下面的代码示例有什么问题吗 $JournalObject | Get-Member -MemberType NoteProperty | ForEach-Object { if ($JournalObject.$_.Value -like ';') {
$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($_)
}
}
最亲切的问候!!
希望你的帮助:)一些需要注意的事情;如果您正在运行从
Get Member
获取其对象的替换,那么您一开始就没有触及原始对象
您可以通过运行另一个Get Member
来查看这一点,其中您的ForEach对象
将查看通过管道传递的内容(spoiler,它是Microsoft.PowerShell.Commands.MemberDefinition
)
您还可以通过对一个带有1Get Member
piped的字符串运行它,然后将其与另一个Get Member
piped的字符串进行比较,更好地了解这一点:
“asfdasf”| Get Member
(这将返回预期的字符串类型)
VS
“asfdasf”| Get Member | Get Member
(这将作为MemberDefinition对象返回,因为您实际上是在获取Get Member结果的成员)
正在研究更好的方法,不久将更新此答案。这就是我的想法。首先,您需要删除不返回的属性,这样您就不会在不再存在的成员上循环,方法是查找这些成员,然后使用
选择对象排除这些成员
然后可以循环并修复这些值
$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('$', '')
}
}
$_
}
字符串在.NET中是不可变的,因此String.Replace
不会修改字符串。也像“;”一样
和-如“$”
将寻找精确匹配。请举例说明如何实现相同的目标?