我有一个奇怪的问题,我搜索过现有的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。我知道这真的很奇怪,不能真正想到它可能是什么
是否有其他人遇到类似的问题。
答案 0 :(得分:0)
你错过了一个论点。
Function Test
{
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True)]
[String]
$Variable
)
Write "$Variable"
}