我试图从函数中获取包含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
}
答案 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
}