$ Var ++和$ Var = $ Var + [int]之间的差异1

时间:2013-12-17 08:14:23

标签: excel powershell com active-directory

我遇到了一个有点奇怪的Powershell习惯,想了解这是怎么发生的。

    $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

这有效!:

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

这是时间问题吗?因为在我看来$ Row ++和$ Row = $ Row + [int] 1完全一样。他们一个接一个地向上计数。

提前致谢!

EDIT1:除了测试之间的$ Row之外我什么都没改变 - 尤其是AD和Excel表格。

1 个答案:

答案 0 :(得分:1)

测试

我测试了这段代码:

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)
}

如果你运行它,你会发现行为完全没有区别。

你也可以使用$ var.GetType()来确定它们都是Int32

我不确定是否有更好的方法来测试这个......

我会选择同时适用的方法。好问题。


建议

也许您可以分解代码并添加一些write-host$var.gettype()来测试每个阶段的变量,以便在运行代码时可以看到是否存在任何差异特别是。