Evi*_*cat 1 powershell types return function
如何强制 Powershell 函数返回数组?
这个简单的函数例如,如果“C:\Newfolder”仅包含 1 个元素,则它不会返回数组。
function Get-AlwaysArray
{
$returnArray = gci "C:\New folder"
Write-Output $returnArray
}
(Get-AlwaysArray).Gettype()
Run Code Online (Sandbox Code Playgroud)
已经有一个线程在这里有一个非常好的赞成答案,但不幸的是,没有一个答案有效。
这是我尝试过的:
function Get-AlwaysArray {
[Array]$returnArray = gci "C:\New folder"
Write-Output $returnArray
}
(Get-AlwaysArray).Gettype()
function Get-AlwaysArray {
$returnArray = @(gci "C:\New folder")
Write-Output @($returnArray)
}
(Get-AlwaysArray).Gettype()
function Get-AlwaysArray {
$returnArray = @(gci "C:\New folder")
Write-Output @($returnArray | Where-Object {$_})
}
(Get-AlwaysArray).Gettype()
function Get-AlwaysArray {
[Object[]]$returnArray = @(gci "C:\New folder")
Write-Output @($returnArray | Where-Object {$_})
}
(Get-AlwaysArray).Gettype()
Run Code Online (Sandbox Code Playgroud)
唯一可行的方法是
function Get-AlwaysArray {
$returnArray = gci "C:\New folder"
Write-Output $returnArray
}
@(Get-AlwaysArray).Gettype()
Run Code Online (Sandbox Code Playgroud)
但我不想在每次调用我的函数时添加这个。
我究竟做错了什么?
小智 10
首先,使用数组子表达式运算符@( ... )。该运算符以数组形式返回一个或多个语句的结果。如果只有一项,则数组只有一个成员。
$returnArray = @( Get-ChildItem "F:\PowerShell\A" )
Run Code Online (Sandbox Code Playgroud)
将Write-Output与开关-NoEnumerate结合使用以防止 PowerShell 展开阵列。
Write-Output -NoEnumerate $returnArray
Run Code Online (Sandbox Code Playgroud)
您还可以使用Write-Output有效地获得相同的结果,而无需使用-NoEnumerate,方法是使用下面的语法。
Write-Output ,$returnArray
Run Code Online (Sandbox Code Playgroud)
$returnArray前面的逗号有效地创建一个新数组,并将$returnArray作为其唯一元素。然后,PowerShell 展开这个新的单元素数组,将原始$returnArray完整返回给调用者。
| 归档时间: |
|
| 查看次数: |
11452 次 |
| 最近记录: |