Powershell奇怪的参数行为

时间:2018-02-09 10:43:10

标签: powershell

首先,我只是粘贴$PSVersionTable.PSVersion的结果,显然,它显示了powershell的版本......

You are now entering PowerShell : <name>
PS D:\aDirectory> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1

下面我有一个函数DoSomeSqlForMe,它定义了两个参数$sql$logFile

调用函数时,会将$sql传递给它。 $logFile继承自父脚本(但也可以传入)。

function DoSomeSqlForMe
{
    param
    (
        [string]$sql,
        [string]$logFile
    )

    #Do some stuff with $sql and $logfile
}

EDIT - 函数被调用如下(这是直接复制+对同一函数的其他调用的典型):

DoSomeSqlForMe $sql

我的问题是当$logFile被设置为参数但是在调用方法时没有传入($logFile仍然可用作继承的var)我得到 Exception message : The argument is null or empty.

然而,当我简单地删除$ logFile作为参数时,我的日志文件中充满了看起来像我(在东方语言中未受过教育)的内容,如普通话 - 渮浡一遍又一遍地重复。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题是,如果您在调用函数时未提供$logFile参数(例如DoSomeSqlForMe $arbitrarySql),则默认情况下$null会被分配到$logFile参数。要将之前定义的$logFile变量默认分配给函数参数,您必须按如下方式调整函数。

function DoSomeSqlForMe
{
    param
    (
        [string]$sql,
        [string]$logFile = $logFile
    )

    #Do some stuff with $sql and $logfile
}

但我建议用两个参数调用你的函数(即DoSomeSqlForMe -sql $arbitrarySql -logFile $logFile