相关疑难解决方法(0)

PowerShell 函数是否返回值由什么决定?

我试图弄清楚是什么决定了是否从 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)

powershell function powershell-7.0

11
推荐指数
1
解决办法
2176
查看次数

返回多个对象的 cmdlet,它是什么集合类型(如果有)?[电源外壳]

Get-ADusercmdlet的示例:

$Users = Get-ADuser -Filter *
Run Code Online (Sandbox Code Playgroud)

在大多数情况下它会返回多个 ADuser 对象,但它是什么“集合”类型?文档只说它会返回一个或多个 Microsoft.ActiveDirectory.Management.ADUser 的用户对象。

尝试使用例如,($Users -is [System.Collections.ArrayList])但我无法确定“集合”类型?

arrays collections powershell cmdlet

3
推荐指数
1
解决办法
332
查看次数

ForEach 方法后 PowerShell 长度的奇怪行为

官方文档中提到这Length是 的一个别名Count,但是我发现它们的行为不同的一种情况。此外,如果我ForEach用 替换 method ForEach-ObjectLength将会发出 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)

powershell

2
推荐指数
1
解决办法
560
查看次数