Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
How many times have you gotten a WMI-Object and had to scroll through screens of null values? Here's a quick way to generate a new PSCustomObject that has those values removed. Note that this is NOT the same object type as the input object, and it does not have any of the methods the original object has. It only has the properties. However the returned object's .__Base property contains the full object.
function Remove-NullValue {
param(
[Parameter(
Position = 0,
Mandatory = $true,
ValueFromPipeline = $true,
ValueFromPipelineByPropertyName =$true
)]
[Alias('Object')]
[Object[]]$inputObject
);
process {
foreach ($object in $inputObject) {
$outputObject = New-Object -TypeName PsObject;
Add-Member -InputObject $outputObject -MemberType ScriptMethod -name AddNoteProperty -value {
Add-Member -InputObject $this -MemberType NoteProperty -name $args[0] -value $args[1]
};
Get-Member -MemberType *Propert* -InputObject $object | % {
$name = $_.name;
if ($object.$name) {
$outputObject.AddNoteProperty($name, $object.$name);
}
}
$outputObject.AddNoteProperty('__Base', $object);
$outputObject;
}
}
}
New-Alias -Name rnv -Value Remove-NullValue;
Remember, this returns a PSCustomObject, not the original object.