【问题标题】:PowerShell hash-table return valuesPowerShell 哈希表返回值
【发布时间】:2015-08-25 17:29:18
【问题描述】:

我有一个从哈希表返回值的简单脚本:

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

【问题讨论】:

  • 您应该编辑您的问题以修复代码格式。

标签: function powershell hashtable return-value


【解决方案1】:

您正在终止您的字符串,然后使用$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-DebugWrite-Verbose 的要点是,您仅在设置首选项时才能看到输出(并且您不应在字符串中添加 DEBUG:,它将为您添加)。我怀疑Write-Verbose 更适合您的工作。

要快速测试是否有效,其实可以酌情添加-Debug-Verbose

例如:

Write-Verbose "Name2   = $($Values["name2"])" -Verbose

【讨论】:

  • Write-Debug :找不到接受参数“+”的位置参数。在 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 ("DEBUG: Name1 = " + $Values["name1"]) 奇怪的是它不起作用。
  • 在写调试中带括号,我没有得到任何输出..但没有错误
  • 其中一些需要括号,我已经编辑了问题。如果您遇到这些错误,是不是另一个错误?
  • @Brian,我采取了不同的方法:$Values = getvalues($Name) $name1 = $Values["name1"] $name2 = $Values["name2"] $name3 = $values ["name3"] #write-Verbose ("Name1 = " + $Values["name1"]) #write-Verbose "Name2 = $($Values["name2"])" #write-Verbose ("Name3 = { 0}" -f $Values["name3"]) Write-Verbose ("Name1 = ") $name1 Write-Verbose ("Name2 = ") $name2 Write-Verbose ("Name3 = ") $name3
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多