Parenthesis Powershell functions (1个答案)
4年前关闭。
我正在修改将为我处理一些文件的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)
(是的,在输出末尾有一个空行,除非我在其中输入内容,否则它不会显示)
显然有些事情搞砸了,但是
仅用于此函数。所有其他功能都可以正确地将输出写入控制台,即使带有尖括号(我用来包装路径,以使偶然的前导/后导空格明显)也是如此。
为什么此功能无法正确写入控制台?
用LogSetting "myVariableName" $myVariableName
调用。
当您使用("myVariableName", $myVariableName)
传递时,实际上是使用1参数(它是一个数组)进行调用,而2nd参数为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