Alternativen für diverse Funktionalitäten in DSM 2015.2

Durch die Änderungen im Policy-Bereich mit DSM-Version 2015.2, müssen eventuell manche Ihrer Scripts oder Applikationen angepasst werden. Insbesondere durch den Wegfall von Objekttypen, Eigenschaften, Methoden oder Aufzählungswerten kann es dazu kommen, dass bestehender Code nicht mehr funktioniert beziehungsweise einen Fehler verursacht. In diesem Abschnitt haben wir einige potentiell betroffene Aktionen aufgeführt.



Optionswert PrepareForReinstall der Eigenschaft OperationMode an Computer-Objekten:


Die Anweisungen


$MyComputer.OperationMode = "PrepareForReinstall"

$MyComputer.Update()


beziehungsweise über den Aufruf der entsprechenden Methode


$MyComputer.PrepareForReinstall()

       

funktionieren nicht mehr und liefern stattdessen eine Fehlermeldung.


Die Ursache liegt darin, dass der Wert PrepareForReinstall für die Eigenschaft OperationMode (Computer.OperationMode) nicht mehr gültig ist.


Als Abhilfe können, falls sinnvoll, die Anweisungen


$MyComputer.OperationMode = "Inactive"

$MyComputer.Update()


beziehungsweise


$MyComputer.Deactivate()


verwendet werden. Im Rahmen einer Neuinstallation kann


$MyComputer | Reinstall-EmdbComputer <Optionen> -- ohne -StartImmediate


ohne den Schalter -StartImmediately ausgeführt werden. Nach Abschluss der Aktion hat der Computer dann für OperationMode den Wert Inactive.


Hinweis: Für DSM Versionen vor DSM 2015.2 wird vom Reinstall-EmdbComputer Cmdlet der Wert von OperationMode auf PrepareForReinstall gesetzt.



Eigenschaften ServerRolloutState und ExecutionMode von Policy-Instanzen:


Die Anweisungen


$MyPolicyInstance.ServerRolloutState = "<Wert>"

$MyPolicyInstance.ExecutionMode = "<Wert>"

$MyPolicyInstance.Update()

       

funktionieren nicht mehr und liefern stattdessen eine Fehlermeldung.


Die Ursache für dieses neue Verhalten ist, dass die Eigenschaften ServerRolloutState und ExecutionMode von Policy-Instanzen sind jetzt als schreibgeschützt definiert worden.


1. Reinstallation von Policy-Instanzen


Das heißt, für die Reinstallation von Policy-Instanzen muss jetzt statt über diesen bisher verwendeten Code


$MyPolicyInstance.ServerRolloutState = "ToBeRedelivered"

$MyPolicyInstance.ExecutionMode = "Reinstall"

$MyPolicyInstance.Update()


entweder die Reinstall()-Methode


$MyPolicyInstance.Reinstall()


oder die folgenden Anweisungen


$MyPolicyInstance.ReinstallRequestNumber++

$MyPolicyInstance.Update()


verwendet werden.


Hinweis: Für DSM Versionen vor DSM 2015.2 werden beim Aufruf-der Reinstall()-Methode die Eigenschaften ServerRolloutState und ExecutionMode verwendet.


2. Reparatur von Policy-Instanzen


Das heißt, für die erneute Ausführung von Policy-Instanzen im Repair-Modus muss jetzt statt über diesen bisher verwendeten Code


$MyPolicyInstance.ServerRolloutState = "ToBeRedelivered"

$MyPolicyInstance.ExecutionMode = "Repair"

$MyPolicyInstance.Update()


entweder die Repair()-Methode


$MyPolicyInstance.Repair()


oder die folgenden Anweisungen


$MyPolicyInstance.RepairRequestNumber++

$MyPolicyInstance.Update()


verwendet werden.


Hinweis: Für DSM Versionen vor DSM 2015.2 werden beim Aufruf-der Repair()-Methode die Eigenschaften ServerRolloutState und ExecutionMode verwendet.



Funktionale Erweiterungen TargetID:Resolve... für LDAP Filter bei SOAP API GetPolicyList (EmdbHelpers.GetEmdbPolicyList)


Die funktionalen Erweiterungen TargetID:Resolve... stehen nicht mehr zur Verfügung. Ihre Verwendung liefert eine Fehlermeldung.


Abhilfe:

1. Erweiterung TargetID:ResolveDirect


$MyTarget = Get-EmdbComputer ...

$MyTarget.GetPolicies()

$MyTarget.GetPolicies($null, "ThisItemIsTarget") # $null = bedeutet alle Policy-Typen


2. Erweiterung TargetID:ResolveGroups


$MyTarget = Get-EmdbComputer ...

$MyTarget.GetPolicies($null, "ThisItemHierarchyIsTarget") # $null = bedeutet alle Policy-Typen


Hinweis: Dieses Kommando liefert, im Gegensatz zu TargetID:ResolveGroups, auch Policies für dynamische Gruppen.


3. Erweiterung TargetID:ResolveHierarchical


$MyTarget = Get-EmdbComputer ...

$MyTarget.GetPolicies($null, "ThisItemGroupsIsTarget") # $null = bedeutet alle Policy-Typen


4. Erweiterung TargetID:ResolveDirectIn


a) Bisher möglicher Ansatz (EmdbHelpers: GetEmdbPolicyList, GetEmdbPolicies):


$targets = Get-EmdbComputer ...

$drive = $targets[0].Drive

$ids = $targets | % { $_.ID }

$in = [string]::Join(",", $ids)

$ldap = New-Object NwcServices.EnteoV6Tools.Blsadministration.BlsLdapUrl $null, "subtree", $null, "TargetId:ResolveDirectIn=$($in)" # <path>, <scope>, <attributes>, <filter>

$ids = [NwcServices.EnteoV6Tools.Blsadministration.EmdbHelpers]::GetEmdbPolicyList($drive, $ldap) | % { $_.ID }

$policies = [NwcServices.EnteoV6Tools.Blsadministration.EmdbHelpers]::GetEmdbPolicies($drive, $ids)


b) Basierend auf Zuweisungszielen (Methode GetPolicies am Zuweisungsziel)


$targets = Get-EmdbComputer ...

# .GetPolicies() = alle Policy-Typen, oder z.B. .GetPolicies("SwPolicy") = nur Software-Policies ...

$policies = $targets | % { $_.GetPolicies() } | sort -Property ID -Unique


c) Basierend auf Policy-Typen (Methode GetPolicies am BlsEmdb Laufwerk)


$targets = Get-EmdbComputer ...

$drive = $targets[0].Drive

$lookup = @{}; $targets | % { $lookup[$_.ID] = $_ }

# .GetPolicies() = alle, oder z.B. .GetPolicies("SwPolicy") = nur Software-Policies ...

$policies = $drive.GetPolicies() | where { @($_.TargetObjectList | where { $lookup.ContainsKey($_.TargetObjectID) }).Count -gt 0 }


d) Basierend auf Policy-Typen (EmdbHelpers: GetEmdbPolicyList, GetEmdbPolicies)


$targets = Get-EmdbComputer ...

$drive = $targets[0].Drive

$ids = $targets | % { $_.ID }

$in = [string]::Join(",", $ids)

$ldap = New-Object NwcServices.EnteoV6Tools.Blsadministration.BlsLdapUrl $null, "subtree", $null, "SchemaTag=SwPolicy" # <path>, <scope>, <attributes>, <filter>

$ids = [NwcServices.EnteoV6Tools.Blsadministration.EmdbHelpers]::GetEmdbPolicyList($drive, $ldap) | % { $_.ID }

$ldap = New-Object NwcServices.EnteoV6Tools.Blsadministration.BlsLdapUrl $null, "subtree", $null, "SchemaTag=PnpPolicy" # <path>, <scope>, <attributes>, <filter>

$ids += [NwcServices.EnteoV6Tools.Blsadministration.EmdbHelpers]::GetEmdbPolicyList($drive, $ldap) | % { $_.ID }

$policies = [NwcServices.EnteoV6Tools.Blsadministration.EmdbHelpers]::GetEmdbPolicies($drive, $ids)


Hinweis: Eine SOAP Anfrage pro Policy(-Schema)-Typ scheint erforderlich. Ein LDAP Filter, wie bei

$ldap = New-Object NwcServices.EnteoV6Tools.Blsadministration.BlsLdapUrl $null, "subtree", $null, "(|(SchemaTag=SwPolicy)(SchemaTag=PnpPolicy))"

wäre denkbar und syntaktisch korrekt - wird jedoch vom BLS so nicht akzeptiert. Der LDAP Filter, wie bei

$ldap = New-Object NwcServices.EnteoV6Tools.Blsadministration.BlsLdapUrl $null, "subtree", $null, "(|(PolicySchemaTag=SwPolicy)(PolicySchemaTag=PnpPolicy))"

wird vom BLS zwar akzeptiert und korrekt interpretiert, ist jedoch so nirgends beschrieben .


Hinweis: Unabhängig von der Beschaffung von $targets benötigt ...

a)   : zwei SOAP Aufrufe (GetEmdbPolicyList, GetEmdbPolicies)

b)   : ein SOAP Aufruf pro Zuweisungsziel (<target>.GetPolicies(...))

c)   : zwei SOAP Aufrufe pro Policy-Typ (<drive>.GetPolicies(...)) [* wenn ein Policy-Typ nicht vertreten ist, entfällt der zweite SOAP Aufruf]

d)   : ein SOAP Aufruf pro Policy-Typ (GetEmdbPolicyList) plus ein SOAP Aufruf (GetEmdbPolicies) [* ist a) am ähnlichsten]


Hinweis: a) und d) liefern MdsPolicy Objekte, b) und c) liefern EmdbPolicy Objekte

( Umwandlung MdsPolicy zu EmdbPolicy z.B.: $emdbPolicies = [NwcServices.EnteoV6Tools.Blsadministration.EmdbItem]::AsEmdbItem($mdsPolicies, $drive) )