我正在修补一个PowerShell脚本,它将为我处理一些文件(这是最终学习PowerShell的一个很好的借口!)在脚本中我有一套基本的日志功能,可以在标准中登录到屏幕格式,例如LogOk($ message),LogInfo($ message)等
我也有这个功能,它可以让我以相同的方式将一些设置记录到控制台:
function LogSetting($varName, $varVal)
{
echo " Setting $varName = «$varVal»"
}
(注意:其他函数是单参数,这是唯一一个有两个参数的函数)
示例电话:
$myVariableName = "example content"
LogSetting("myVariableName", $myVariableName)
问题是该调用的控制台输出如下所示:
Setting myVariableName example content = «»
但它应该是这样的:
Setting myVariableName = «example content»
我尝试了各种格式组合,甚至是这样的事情:
function LogSetting($varName, $varVal)
{
echo " Setting $varName / $varVal blah"
}
然后产生这个:
Setting myVariableName example content / blah
我甚至做到这一点,试图在函数中隔离这两个参数,看看我是否能找出导致问题的原因:
function LogSetting($varName, $varVal)
{
echo " Setting.... "
echo " $varName"
echo " $varVal"
}
但是输出看起来像这样:
Setting....
myVariableName example content
(a blank line is here)
(是的,输出结尾有一个空行,除非我在那里输入内容,否则不会显示)
显然有些事情搞砸了,但仅适用于此功能。所有其他函数都正确地将输出写入控制台,即使使用尖括号(我用它来包裹路径,以使意外的前导/尾随空间明显)。
为什么这个功能没有正确写入控制台?
答案 0 :(得分:4)
使用LogSetting "myVariableName" $myVariableName
拨打电话。
使用("myVariableName", $myVariableName)
传递时,实际上是使用1参数调用数组,第2个参数为null,因为您不使用param
和[Parameter(Mandatory=$true)]
,你没有看到错误。
注意:在ISE中调试并设置断点并检查变量将有助于您将来对此类内容进行故障排除。
Hit Line breakpoint on 'D:\test\t1.ps1:3'
[DBG]: PS C:\Windows\System32\WindowsPowerShell\v1.0>> $varname
myVariableName
example content
[DBG]: PS C:\Windows\System32\WindowsPowerShell\v1.0>> $varname.Count
2
[DBG]: PS C:\Windows\System32\WindowsPowerShell\v1.0>> $varVal
[DBG]: PS C:\Windows\System32\WindowsPowerShell\v1.0>> $varVal -eq $null
True