Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PS] Bewerkingen met NoteProperties

Pagina: 1
Acties:

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Waarom er een onderscheid gemaakt wordt tussen Property, CodeProperty, AliasProperty,NoteProperty en ScriptProperty snap ik nog steeds niet. Echt goed gedocumenteerd is dat niet en de MVP die onlangs aan enkele collega's een cursus PS Administration gaf wist het eigenlijk ook niet echt. Geweldig.

Het verder uitstekende PowerShell 2/0 TFM van Sapien Press laat me in de steek, evenals Essential PowerShell van Addison-Wesley en de Windows PowerShell Scripting Guide van MS Press. Idem dito bij Windows PowerShell van Sams en Windows PowerShell Cookbook van O'Reilly.

Seriously, guys,...

Waarom kan je andere dan gewone Properies niet opvragen met $foo.bar? Een | Select-Object in een $var steken is niet echt efficiënt werken.

Wat ik nu wil wordt al helemaal moeilijk, maar als iemand (lees: de weinige PSers hier) ideeën heeft: shoot!

Volgende codefragment:
PowerShell:
1
2
3
4
5
6
7
    $agentUpgradeNeeded | Add-Member -MemberType NoteProperty -Name "TOTAL" -Value $arrFullEpoOldAgents.Count 
    ForEach ($objDomain in $arrDomain)
        {
        $arrTemp = $arrFullEpoOldAgents | Where-Object  {$_.Domain -EQ $objDomain}
        $agentUpgradeNeeded | Add-Member -MemberType NoteProperty -Name $objDomain -Value $arrTemp.Count
        }
    $agentUpgradeNeeded | Add-Member -MemberType NoteProperty -Name "OTHER" -Value ($arrFullEpoOldAgents.Count - "<...de som van de anderen...>")


In een custom object worden allerlei NoteProperties (gewone gaan blijkbaar niet) gestoken zodat ik per domein een mooi overzicht heb van (in dit geval) het aantal machines dat nog draaien op de oude ePO server. Die output ziet er ongeveer zo uit in zijn rauwe vorm:

PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
TOTAL    : 14580
DOMAIN0  : 2156
DOMAIN1  : 56 
DOMAIN2  : 1457
DOMAIN3  : 1222
DOMAIN4  : 745
DOMAIN5  : 101
DOMAIN6  : 47
DOMAIN7  : 655
DOMAIN8  : 2214
DOMAIN9  : 1579
OTHER    : ?


OTHER is, eenvoudigweg, [TOTAL - ∑alle andere noteproperties] (behalve het totaal zelf uiteraard). Ik zou dit kunnen oplossen door alles om te zetten naar variabelen, maar dat is een verdomd inefficiënte en onoverzichtelijke (dit is maar een fragmentje code, ik heb zo nog een paar identieke ForEach constructies) methode.

Een (virtueel) koekje voor wie hier een en ander van weet.

  • Meekoh
  • Registratie: April 2005
  • Laatst online: 17-11 22:19
Als ik het dus goed begrijp ben je op zoek naar een makkelijke manier om al die andere properties (alles ex TOTAL en OTHER) bij elkaar op te tellen, zodat je dit weer van TOTAL kan aftrekken right?

Klinkt misschien heel stom maar is het dan niet makkelijker om dat subtotaaltje in een apart object te douwen?
dus zoiets als:
code:
1
$subTotal = $subTotal + $arrTemp.count

Dan kun je daarna dit doen:
code:
1
    $agentUpgradeNeeded | Add-Member -MemberType NoteProperty -Name "OTHER" -Value ($arrFullEpoOldAgents.Count - $subTotal)

Computer says no


  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Meekoh schreef op woensdag 25 augustus 2010 @ 20:14:
Als ik het dus goed begrijp ben je op zoek naar een makkelijke manier om al die andere properties (alles ex TOTAL en OTHER) bij elkaar op te tellen, zodat je dit weer van TOTAL kan aftrekken right?

Klinkt misschien heel stom maar is het dan niet makkelijker om dat subtotaaltje in een apart object te douwen?
dus zoiets als:
code:
1
$subTotal = $subTotal + $arrTemp.count

Dan kun je daarna dit doen:
code:
1
    $agentUpgradeNeeded | Add-Member -MemberType NoteProperty -Name "OTHER" -Value ($arrFullEpoOldAgents.Count - $subTotal)
Het beantwoordt niet mijn theoretische vraag, maar wel mijn praktisch vraagstuk. Verbluffend eenvoudig trouwens. Mijn dank is groot!

Koekjes!

Afbeeldingslocatie: http://www.newenglandsite.com/restaurants/custys-cookie-bar.jpg

  • Meekoh
  • Registratie: April 2005
  • Laatst online: 17-11 22:19
mmmm Cookies :Y)
je theoretische vraag was dus eigenlijk meer over waarom je niet $object.property kan doen?
Is dat niet omdat de manier waarop je het nu doet ervoor zorgt dat $object een array is?
Een array benader je door $object[x] waarbij x de rij uit de array is.
doe eens $object | gm en kijk wat voor object het nu precies is...

Computer says no


  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Meekoh schreef op donderdag 26 augustus 2010 @ 14:11:
mmmm Cookies :Y)
je theoretische vraag was dus eigenlijk meer over waarom je niet $object.property kan doen?
Is dat niet omdat de manier waarop je het nu doet ervoor zorgt dat $object een array is?
Een array benader je door $object[x] waarbij x de rij uit de array is.
doe eens $object | gm en kijk wat voor object het nu precies is...
Oei, ik had je antwoord niet gezien blijkbaar. De vraag was eigenlijk waarom ik $foo.bar niet kon aanspreken.

Wel, intussentijd heb ik uitgevonden dat het wel lukt, maar een syntaxprobleem was. Je moet creatief zijn met het herbevestigen dat het over een variabele gaat. Je krijgt dan van dit soort constructies:

code:
1
$($($($($_."Host Name")).ToString())).PadLeft($x)


Zwoegen om geen vergissingen met haakjes te maken, echt waar.