[英]Powershell Parameter passing issue
我有一個奇怪的人,我已經搜索了現有的問答並沒有找到匹配的文件。 我已經使用基本格式的參數驗證編寫了函數
function FunctioName
{
[CmdletBinding()]
Param(
[parameter(Mandatory)]
[String]$VariableName
)
當我如上所述將參數設置為Mandatory時,我得到一個參數綁定異常,指示已傳遞空值。 在調試中運行腳本,我可以看到傳遞的函數參數不為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訪問它們。鍵。 我知道這真的很奇怪,也無法真正想到這可能是什么
有沒有其他人遇到過類似的問題。
你錯過了一個爭論。
Function Test
{
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True)]
[String]
$Variable
)
Write "$Variable"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.