尝试了许多尝试使其工作的不同方法。这是我能提出的最接近的非工作范例。
我想摆脱带有空值的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($_)
}
}
最诚挚的问候!! 希望得到你的帮助:)
答案 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('$', '')
}
}
$_
}