gpt4 book ai didi

powershell - Powershell函数返回无效对象

转载 作者:行者123 更新时间:2023-12-03 01:29:44 25 4
gpt4 key购买 nike

这里有2个等效的代码样本,唯一的区别是第一个样本使用函数,而其他样本不使用。

此代码失败,因为函数返回无效的对象:

function Initialize-Table
{
param (
[parameter(Mandatory = $false)]
[string] $TableName = "InstallationTable"
)

# Create Table object
$InstallTable = New-Object System.Data.DataTable "$TableName"

# Define Columns
$UserColumn = New-Object System.Data.DataColumn User, ([string])
$InstallColumn = New-Object System.Data.DataColumn InstallRoot, ([string])

# Add the Columns
$InstallTable.Columns.Add($UserColumn)
$InstallTable.Columns.Add($InstallColumn)

return $InstallTable
}

Write-Host "Initialize-Table"
Write-Host "***************************"
$InstallTable = Initialize-Table

if (!$InstallTable)
{
Write-Warning "Table not initialized"
exit
}

但是,除了将功能代码直接放入脚本中并且该表有效之外,以下内容完全相同!
Write-Host "Initialize-Table"
Write-Host "***************************"
$TableName = "InstallationTable"
# Create Table object
$InstallTable = New-Object System.Data.DataTable "$TableName"

# Define Columns
$UserColumn = New-Object System.Data.DataColumn User, ([string])
$InstallColumn = New-Object System.Data.DataColumn InstallRoot, ([string])

# Add the Columns
$InstallTable.Columns.Add($UserColumn)
$InstallTable.Columns.Add($InstallColumn)

if (!$InstallTable)
{
Write-Warning "Table not initialized"
exit
}

为什么我的功能不起作用(第一个示例)?这是该死的代码。

最佳答案

根据PowerShell官方文档,即使没有包含Return关键字的语句,每个语句的结果也将作为输出返回。诸如C或C#之类的语言仅返回return关键字指定的一个或多个值。

but when you return a collection from your script block or function, PowerShell automatically unrolls the members and passes them one at a time through the pipeline. This is due to PowerShell's one-at-a-time processing





要强制脚本块或函数将集合作为单个对象返回到管道,请使用 一元数组表达式带有NoEnumerate参数的Write-Output

例如 return Write-Output -NoEnumerate $InstallTable;或return(,$ InstallTable);

所以下面的代码片段效果很好
function Initialize-Table
{
param (
[parameter(Mandatory = $false)]
[string] $TableName = "InstallationTable"
)

# Create Table object
$InstallTable = New-Object System.Data.DataTable "$TableName"

# Define Columns
$UserColumn = New-Object System.Data.DataColumn User, ([string])
$InstallColumn = New-Object System.Data.DataColumn InstallRoot, ([string])

# Add the Columns
$InstallTable.Columns.Add($UserColumn)
$InstallTable.Columns.Add($InstallColumn)


return Write-Output -NoEnumerate $InstallTable;
}

Write-Host "Initialize-Table"
Write-Host "***************************"
$InstallTable = Initialize-Table

if (!$InstallTable)
{
Write-Warning "Table not initialized"
exit
}

关于powershell - Powershell函数返回无效对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59474963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com