[C#/PoSh] Value wordt pas in 2e instantie returned

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Mijn script vraagt informatie op van DPM servers, oa. wanneer de eerste en de laatste backup was.
Dat ziet er zo uit (Powershell):

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ForEach ($DataSource in $DataSources)
    {
    If ($DataSource.UnderActiveProtectionFromPS -EQ $True)
        {
        $SiteDetails = Invoke-Expression "\\spvfilebru005\Services\ACA\ICT\Wintel\Desktop\ShareNone\Scripts\PoSh\Get-SiteDetails\Get-SiteDetails.ps1 $($DPMServer.Name) -NoGui"
        $DataObject = New-Object System.Object
        $DataObject | Add-Member -MemberType Noteproperty -Name "DPM Server" -Value $DPMServer.Name
        $DataObject | Add-Member -MemberType Noteproperty -Name "Protection Group" -Value $DataSource.ProtectionGroupName
        $DataObject | Add-Member -MemberType Noteproperty -Name "Server" -Value $($DataSource.ProductionServerName.ToUpper().Replace(".$($env:USERDNSDOMAIN.ToUpper())",""))
        $DataObject | Add-Member -MemberType Noteproperty -Name "Data Source" -Value $DataSource.DataSourceName
        $DataObject | Add-Member -MemberType Noteproperty -Name "Size" -Value ($DataSource.ReplicaSize / 1GB)
        $DataObject | Add-Member -MemberType Noteproperty -Name "Oldest Recovery Point" -Value $DataSource.OldestRecoveryPoint.DateTime
        $DataObject | Add-Member -MemberType Noteproperty -Name "Latest Recovery Point" -Value $DataSource.LatestRecoveryPoint.DateTime
        $DataObject | Add-Member -MemberType Noteproperty -Name "Address" -Value $($SiteDetails.Address + ", " + $SiteDetails."Zip Code" + " " + $SiteDetails.City)
        $DataObject | Add-Member -MemberType Noteproperty -Name "Speed" -Value $SiteDetails."Main Speed (Session)"
        $DetailedData += $DataObject
        }
    }


Die code werkt, maar bij die twee property's (OldestRecoveryPoint en LatestRecoveryPoint) gebeurt er iets bizar: ik krijg de waarde Monday, January 01, 0001 12:00:00 AM terug.

Even checken in shell en dan blijkt dat ik in eerste instantie telkens die default value terug krijg en pas in tweede instantie de echte waarde (voor elk object, niet enkel voor het eerste in mijn voorbeeld):

code:
1
2
3
4
5
PS C:\> $x = Get-Datasource A_DPM_SERVER.MYDOMAIN.COM
PS C:\> $x[0].OldestRecoveryPoint.DateTime
Monday, January 01, 0001 12:00:00 AM
PS C:\> $x[0].OldestRecoveryPoint.DateTime
Friday, January 04, 2013 11:57:19 AM


Ik dacht een tenenkrullende maar gemakkelijke oplossing te hebben door bovenstaande als volgt aan te passen:
C#:
1
2
3
4
$DataSource.OldestRecoveryPoint.DateTime | Out-Null
$DataObject | Add-Member -MemberType Noteproperty -Name "Oldest Recovery Point" -Value $DataSource.OldestRecoveryPoint.DateTime
$DataSource.LatestRecoveryPoint.DateTime | Out-Null
$DataObject | Add-Member -MemberType Noteproperty -Name "Latest Recovery Point" -Value $DataSource.LatestRecoveryPoint.DateTime


Maar helaas: dit werkt ook niet. Er moet blijkbaar enige tijd tussen de twee request zitten alvorens het lukt, want als ik het in de shell zeer snel na elkaar simuleer gebeurt hetzelfde.

code:
1
2
3
4
5
PS C:\> $x = Get-Datasource A_DPM_SERVER.MYDOMAIN.COM
PS C:\> $x[0].OldestRecoveryPoint.DateTime
Monday, January 01, 0001 12:00:00 AM
PS C:\> $x[0].OldestRecoveryPoint.DateTime
Monday, January 01, 0001 12:00:00 AM


Hoe los ik dit nu op? Ik kan in principe bovenstaande manier gebruiken en pakweg 500ms pauzeren tussen de twee requests, maar 1) dat lijkt me voer voor TDWTF; en 2) dat zou mijn code enorm vertragen aangezien die toch 2000+ keer opgeroepen wordt: 1x per protected datasource en er zijn 4 datasources per server bij mij. In een park met 800 servers and counting loopt dat wel op.

Waarschijnlijk pak ik deze class, System.ValueType, verkeerd aan. Als iemand weet hoe hier - netjes - mee om te gaan, dan hoor ik het graag.

[ Voor 3% gewijzigd door YellowOnline op 10-01-2013 12:43 . Reden: Formatting ]


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Call me stupid. Ik heb dat probleem bijna een jaar geleden ook gehad en er over geblogged Title TK: SCDPM Scripting: Trouble with LastRecoveryPoint :F