Powershell:如何创建自定义对象并将其传递给PowerShell中的功能?

时间:2016-03-09 23:39:02

标签: powershell

我想在PowerShell中创建一个包含属性的自定义对象,然后将该对象传递给一个函数。我找到了创建自定义对象的在线示例,但它使用了HashTable。但是,我有单个对象的属性,而不是一个对象数组。

  1. 如果可能的话,我想创建单个对象而不是 哈希表。
  2. 如果要使用HashTables,我该如何检索 对象并将其传递给函数?
  3. 以下是我的代码示例:

    Y

    编辑1
    谢谢@Frode和@Matt。我不知道'返回'声明也会返回其他结果。以下是否有效?

    x

2 个答案:

答案 0 :(得分:7)

来自about_return重要的是知道

  

在Windows PowerShell中,即使没有包含Return关键字的语句,每个语句的结果也会作为输出返回。

所以Frode said你将得到一个字符串数组。你想要整体回归你的对象而不是它的部分。如果函数的目的只是返回该自定义对象,那么您可以将该语句缩减为单行。

function CreateObject()
{      
    return New-Object -TypeName PSObject -Property @{     
        'TargetServer' = "ServerName"
        'ScriptPath' = "SomePath"
        'ServiceName' = "ServiceName"
    }
}

如果你至少拥有PowerShell 3.0,那么你可以使用[pscustomobject]类型转换来完成同样的事情。

function CreateObject()
{      
    return [pscustomobject] @{     
        'TargetServer' = "ServerName"
        'ScriptPath' = "SomePath"
        'ServiceName' = "ServiceName"
    }
}

请注意,在这两种情况下,return关键字都是可选的,但要知道它仍然可以用作函数的逻辑出口(所有输出直到该点仍然返回)。

如果您不需要将函数的结果保存在变量中,您也可以将其链接到下一个函数中。

Function2 (CreateObject)

答案 1 :(得分:4)

您正在创建一个对象。哈希表只是占位符,用于在将它们转换为对象之前定义所有属性。

删除以write-output开头的三行,你应该很好。它们是不必要的,并使您的函数返回一个数组而不仅仅是您想要的对象。如果您只想在测试时向屏幕显示值,请使用write-host