无法从Powershell中的函数中获取值

时间:2017-06-12 13:04:18

标签: powershell active-directory ldap

我试图从函数中获取包含2个值的值,一个是从当前方法指向的,另一个值是null

我期望从函数中打印出$convertAccountEx值,但它没有给我任何东西。我试图为$null提供$convertAccountEx值,但没有任何变化。

function ConvertTo-Date(){

        Param ($accountEx,$convertAccountEx)

        if($accountEx.accountExpires -eq 0){
                $convertAccountEx = "Never"
            }
        else{
                $convertAccountEx = [DateTime]::FromFileTime($AccountEx.accountExpires)                
        }

}

$userObjects = $ADSearch.FindAll()

foreach ($user  in $userObjects){

         $accountEx = $user.Properties.Item("accountExpires")
         ConvertTo-Date -accountEx $accountEx.accountExpires -convertAccountEx $convertAccountEx

         $convertAccountEx
}

1 个答案:

答案 0 :(得分:1)

您的代码应如下所示:

function ConvertTo-Date(){

        Param ($accountEx)

        if($accountEx.accountExpires -eq 0){
                $convertAccountEx = "Never"
            }
        else{
                $convertAccountEx = [DateTime]::FromFileTime($AccountEx.accountExpires)                
        }

        $convertAccountEx

}

$userObjects = $ADSearch.FindAll()

foreach ($user  in $userObjects){

        $accountEx = $user.Properties.Item("accountExpires")
        ConvertTo-Date -accountEx $accountEx.accountExpires

}

您遇到的问题称为范围界定。我们的想法是,您创建的每个变量都应该独占其运行范围。因此,根据定义,函数内部的var与外部的var不同,即使它们共享名称。在你的例子中解决这个问题的一个简单方法是,只返回你函数的值(通过调用它)。

我建议的是:不要只返回值,而是将其附加到您创建的对象上。这是一个(非常)简单的例子:

function Add-Info {
    Param( $user )
    $user | Add-Member -NotePropertyName NewProperty -NotePropertyValue 'SomeValue'
    $user
}