Diferencia entre $ Var ++ y $ Var = $ Var + [int] 1

He encontrado un hábito un tanto extraño de Powershell y me gustaría entender cómo sucede esto.

    $CurrentADgroups = (Get-ADGroup -filter * -properties GroupCategory -server $ADSERVER).name
    $Row = [int] 1
    $CurrentADgroups | Foreach {$Sheet2.Cells.Item($Row,1) = $_; $Row++}


Foreach : Exception setting "Item": "Exception from HRESULT: 0x800AC472"
At C:\Script\SCRIPT-2.0.ps1:229 char:28
+         $CurrentADgroups | Foreach {$Sheet2.Cells.Item($Row,1) = $_; $Row++}
+                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [ForEach-Object], SetValueInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterParameterizedPropertySetValueTI,Microsoft.PowerShell.Commands.ForEachObjectCommand

¡Esto funciona!:

    $CurrentADgroups = (Get-ADGroup -filter * -properties GroupCategory -server $ADSERVER).name
    $Row = [int] 1
    $CurrentADgroups | Foreach {$Sheet2.Cells.Item($Row,1) = $_; $Row = $Row + [int]1}

¿Es una cuestión de tiempo? Porque en mi opinión $ Row ++ y $ Row = $ Row + [int] 1 hacen exactamente lo mismo. Ellos cuentan hacia arriba, uno por uno.

¡Gracias por adelantado!

EDIT1: No cambié absolutamente nada además de la $ Row entre las pruebas, especialmente con AD y Excelsheet.

0
No puedo ver ningún valor diferente
agregado el autor XXInvidiaXX, fuente
No conozco Powershell, pero la única diferencia que veo en el comportamiento "tradicional" es que x ++ y x = x + 1 devuelven valores diferentes (el primero devuelve el valor como fue antes del incremento, este último devuelve el nuevo valor).
agregado el autor Medinoc, fuente

1 Respuestas

Pruebas

Probé con este código:

foreach ($n in (1..10)) {

    write-host $var
    write-host $var2
    $var++
    $var2 = $var2 + [int]1
    write-host $var
    write-host $var2

    write-host ("-" * 40)
}

y si lo ejecuta, puede ver que no hay absolutamente ninguna diferencia en el comportamiento.

También puede usar $ var.GetType() para ver que ambos son de hecho Int32 .

No estoy seguro de si hay una mejor manera de probar esto ...

Me gustaría ir con lo que funciona mientras tanto. Buena pregunta sin embargo.


Sugerencia

Tal vez puedas dividir tu código y poner write-host y $ var.gettype() para probar las variables en cada etapa, para que puedas ver si hay hay diferencias cuando ejecuta su código en particular.

0
agregado
He intentado lo que dijiste, y siempre hay exactamente el mismo resultado. Mi sugerencia es que tal vez $ row ++ se ejecute más rápido (y, por lo tanto, colapse con el objeto com?) Que $ row = $ row + [int] 1. Pero no sé cómo probar eso.
agregado el autor XXInvidiaXX, fuente