我有一个简单的脚本来从哈希表中返回值:
param
(
[Parameter(Mandatory = $true)]
[string]$Name
)
function getvalues ($Name) {
$nameList= @{"CFT"=@{"name1"="text1"; "name2"="text2"}}
#return $nameList[$Name]
return ,$nameList
}
$Values = getvalues($Name)
write-Debug "DEBUG: Name1 = "$Values["name1"]
write-Debug "DEBUG: Name2 = "$Values["name2"]
当我运行它时,我收到以下错误:
Write-Debug : A positional parameter cannot be found that accepts argument '$null'.
At C:\MSFT\add-test.ps1:21 char:2
+ write-Debug "DEBUG: Name1 = "$Values["name1"]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Write-Debug], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.WriteDebugCommand
Write-Debug : A positional parameter cannot be found that accepts argument '$null'.
At C:\MSFT\add-test.ps1:22 char:2
+ write-Debug "DEBUG: Name2 = "$Values["name2"]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Write-Debug], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.WriteDebugCommand
答案 0 :(得分:3)
您正在终止字符串,然后使用$Values
查找。使用+
或将其嵌入字符串中,或使用-f
运算符:
write-Debug ("DEBUG: Name1 = " + $Values["name1"])
write-Debug "DEBUG: Name2 = $($Values["name2"])"
write-Debug ("DEBUG: Name3 = {0}" -f $Values["name3"])
注意表单1和3需要括号( )
。
关于您的评论,没有更多错误,也没有输出:
您确定您的调试首选项已设置为可以查看输出吗? Write-Debug
和Write-Verbose
的要点是,您只能在首选项设置时看到输出(并且您不应在字符串中添加DEBUG:
,它将为您添加)。我怀疑Write-Verbose
更适合你正在做的事情。
要快速测试它是否有效,您可以根据需要实际添加-Debug
或-Verbose
。
例如:
Write-Verbose "Name2 = $($Values["name2"])" -Verbose