Hallo zusammen,
mal wieder stehe ich vor einem Problem und brauche eure Unterstützung. Ich versuche gerade einige Funktionen aus dem SCCM SDK vom VBS ins AutoIT zu portieren. Bin dabei auf ein Problem gestoßen, welches ich mir erstmal nicht erklären kann und auch keine Lösung dafür finde. Dabei geht es um speichern von Objekten in einem Array und Übergabe des Arrays als Parameter an weitere Objekte. So, lange Rede kurzer Sinn, hier erstmal die beiden Funktionen
1. Original VBS aus dem SDK
Sub AddTaskSequenceGroup(connection, taskSequence, name, description)
Dim group
Dim steps
Dim operands
' Create and populate the group.
Set group = connection.Get("SMS_TaskSequence_Group").SpawnInstance_
group.Name=name
group.Description=description
group.Enabled=True
group.ContinueOnError=False
Set condition = connection.Get("SMS_TaskSequence_Condition").SpawnInstance_
Set oExpression = connection.Get("SMS_TaskSequence_VariableConditionExpression").SpawnInstance_
oExpression.Variable = "TESTVAR"
oExpression.Operator = "equals"
oExpression.Value = "1.0.0.0"
' Add the condition.
operands=Array(oExpression)
condition.Operands=operands
group.Condition=condition
' Add step to task sequence
steps = Array(group)
taskSequence.Steps = steps
End Sub
Alles anzeigen
2. Meine AutoIT Portierung
[autoit]
Func AddTaskSequenceGroup($oConnection, $oTaskSequence, $sName, $sDescription)
Local $oGroup
Local $aSteps[1]
Local $aOperands[1]
$oGroup = $oConnection.Get("SMS_TaskSequence_Group").SpawnInstance_()
$oGroup.Name = $sName
$oGroup.Description = $sDescription
$oGroup.Enabled = True
$oGroup.ContinueOnError = False
$oCondition = $oConnection.Get("SMS_TaskSequence_Condition").SpawnInstance_()
$oExpression = $oConnection.Get("SMS_TaskSequence_VariableConditionExpression").SpawnInstance_()
$oExpression.Variable = "TESTVAR"
$oExpression.Operator = "equals"
$oExpression.Value = "1.0.0.0"
ReDim $aOperands[UBound($oCondition.Operands)+1]
$aOperands[UBound($oCondition.Operands)] = $oExpression
$oCondition.Operands = $aOperands
$oGroup.Condition = $oCondition
ReDim $aSteps[UBound($oTaskSequence.Steps)+1]
$aSteps[UBound($oTaskSequence.Steps)] = $oGroup
$oTaskSequence.Steps = $aSteps
EndFunc
Als Ergebnis kommt beim Original eine Tasksequence mit einem Step, der Gruppe raus und diese hat eine Variable als Condition. So wie es sein soll. Bei meiner Variante kommt erstmal auch eine Tasksequence mit einem Step, der Gruppe raus, diese hat aber keine Condition. Ich habe stark die Vermutung das es an dieser Zuweisung liegt:
Wenn ich mich nicht irre erzeut doch die erste Zeile ein eindimensionales Array mit einem Feld, welches den Index 0 hat. Diesem Feld wird gleichzeitig das Objekt oExpression zugewiesen. Rein theoretisch könnte man doch diese Zuweisung auch durch folgende ersetzen
Leider funktioniert dieses Beispiel nicht. Wenn ich die Zuweisung so modifiziere, bekomme ich beim Ausführen vom VBS folgende Fehlermeldung:
Microsoft VBScript runtime error: Object doesn't support this property or method: 'operands'
Dieser Code entspricht aber ziemlich genau dem AutoIT Code von oben (vereinfacht dargestellt):
Local $aOperands[1]
$aOperands[0] = $oExpression
$oCondition.Operands = $aOperands
Was mich auch zu der Vermutung geführt hat, das es mit der Array Zuweisung zu tun hat. Die Frage ist ob man die VBS Zuweisung
operands=Array(oExpression) irgendwie in AutoIT realisieren kann. Vielleich gibt es auch eine ganz andere Möglickeit. Evtl anstatt eines Arrays eine Collection oder eine ArrayList zu verwenden. Ich weiss aber nicht wie man sowas realisieren kann.
Vielen Dank schon mal...
Freue mich über eure Antworten