Powershell参数传递问题

时间:2017-07-01 02:52:23

标签: powershell

我有一个奇怪的问题,我搜索过现有的Q& A并且找不到匹配项。 我使用基本格式

使用参数验证编写了我的函数
function FunctioName
{
    [CmdletBinding()]
    Param(
    [parameter(Mandatory)]
    [String]$VariableName
    )

当我将参数设置为Mandatory时,我得到一个参数绑定异常,表明传递了空值。在debug中运行脚本我可以看到传递的函数参数不是null并且是一个有效的字符串。 当我以完全相同的方式运行脚本而没有强制标志时,字符串被传递到函数中并且它正确执行。 有没有人有任何想法,可能是什么问题。这个问题正在影响我的应用程序中的许多功能,有趣的是,受影响的函数似乎只有一个参数函数,多个参数似乎没有受到影响。

好的,谢谢你们的反馈,非常感谢。顺便说一句,我正在使用PowerShell 5。 进一步研究这个问题,我进一步研究它发现变量作为字符串数组传递给函数,但是一个空字符串值被附加到数组中,我认为这是问题的原因。这是它开始变得有趣的地方,我需要提供更多的背景。

我正在运行的脚本查询活动目录以查找满足特定条件的用户属性,匹配的那些我创建了一个字符串数组,每个值都是用户,主机名和其他属性属性的分隔值。 为了确保我获得最新的值,我使用ASDI GetInfo方法,这似乎触发了奇怪的行为。

在高级别,功能是

Function GetuserAttr
{
   $inscopeusers = New-Object System.Collections.ArrayList
   $accountlist = (Get-ADUser -Filter { attribute1 -eq "value"} -Properties attribute1).SamAccountName

 foreach ($user in $accountlist)
{
    $DN = getDN($user)   # basically a funtion I wrote to create ASDI object for user account.
    $DN.GetInfo()  # this method call appears to cause issues
    $attr1 = $DN.Get("Attribute1")
    $attr2 = $DN.Get("Attribute2")
    $hoststring = "$($user)|$($attr1)|$($attr2)"
    $inscopeusers.Add($hoststring) > null
}
return $inscopeusers
}

在这个函数中返回的字符串数组被输入到许多其他函数中,其中一个是给出我最初提出的错误的函数。 问题是,当我使用GetInfo方法时,此函数返回的数组在数组中包含多个空值,当我删除命令时,数组没有空字符串。 当我在其他函数中对数组进行操作时,看起来当使用GetInfo方法时,数组会丢失一些属性,这更奇怪。因此,例如,我能够使用foreach循环迭代数组值,但我不能通过索引访问数组值,例如$ array [1]。 通过简单地在函数中注释掉GetInfo方法调用,返回的数组似乎正常运行,您可以通过索引访问数组值。

我还有另一个函数也使用GetInfo并返回一个哈希表,当我尝试对返回的哈希表进行操作时,我无法使用键值(例如$ hashtable ['key'])访问值,但我可以使用它来访问它们$ hashtable.key。我知道这真的很奇怪,不能真正想到它可能是什么

是否有其他人遇到类似的问题。

1 个答案:

答案 0 :(得分:0)

你错过了一个论点。

Function Test
{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True)]
        [String]
        $Variable
    )

    Write "$Variable"
}