我试图弄清楚是什么决定了是否从 PowerShell 函数返回一个值,并且我遇到了一些奇怪的情况。about_return 文档说:
在 PowerShell 中,每个语句的结果都会作为输出返回,即使没有包含 Return 关键字的语句也是如此。
但这似乎掩盖了细节。如果我运行这个:
function My-Function {
1
[System.Console]::WriteLine("Hello")
$null
$true
$false
0
2
}
Run Code Online (Sandbox Code Playgroud)
运行此命令将返回一个数组(并打印“Hello”):
1
True
False
0
2
Run Code Online (Sandbox Code Playgroud)
这意味着它$null不会自动返回。然后我尝试递增,因为我正在函数中使用它:
function My-Function {
$n = 1
$n
$n++
($n++)
-join @(1, 2, 3)
(-join @(1, 2, 3))
}
Run Code Online (Sandbox Code Playgroud)
返回:
1
2
123
123
Run Code Online (Sandbox Code Playgroud)
所以,$n被$n++退回了,但($n++)不是吗?但与另一个运算符 ( -join) 相比,每种情况都是相同的。为什么将括号括起来$n++会阻止它被返回,并且为什么其他运算符没有相同的行为?这更加令人困惑,因为=运算符似乎以相反的方式工作:
function My-Function {
($n = 1)
$n
$n++
($n++)
} …Run Code Online (Sandbox Code Playgroud) Get-ADusercmdlet的示例:
$Users = Get-ADuser -Filter *
Run Code Online (Sandbox Code Playgroud)
在大多数情况下它会返回多个 ADuser 对象,但它是什么“集合”类型?文档只说它会返回一个或多个 Microsoft.ActiveDirectory.Management.ADUser 的用户对象。
尝试使用例如,($Users -is [System.Collections.ArrayList])但我无法确定“集合”类型?
在官方文档中提到这Length是 的一个别名Count,但是我发现它们的行为不同的一种情况。此外,如果我ForEach用 替换 method ForEach-Object,Length将会发出 3 。有人能解释一下吗?
> (1..3).ForEach({$_}).Length
1
1
1
Run Code Online (Sandbox Code Playgroud)
> (1..3).ForEach({$_}).Count
3
Run Code Online (Sandbox Code Playgroud)