PowerShell函数中的第一个参数失去了它的价值?

时间:2012-07-10 23:59:16

标签: powershell

这是我用.\GetEMSInstallers调用的函数。由于某种未知原因,第一个参数总是失去其值:

function Get-EMSInstallers {

param (
    $ems_for_amx_source = '\\server\ems_path',
    $installers_dir = 'D:\installers'
)

process {

    if (!(Test-Path "$installers_dir\EMS4AMX")) {
        "Copying files and folders from $ems_for_amx_source to $installers_dir\EMS4AMX"
        copy $ems_for_amx_source "$installers_dir\EMS4AMX" -rec -force
    }
}

}
Get-EMSInstallers $args

当我打电话给我时,我得到了这个输出:

Copying files and folders from  to D:\installers\EMS4AMX
Copy-Item : Cannot bind argument to parameter 'Path' because it is an empty array.
At C:\Users\ad_ctjares\Desktop\Scripts\Ems\GetEMSInstallers.ps1:12 char:17
+             copy <<<<  $ems_for_amx_source "$installers_dir\EMS4AMX" -rec -force
    + CategoryInfo          : InvalidData: (:) [Copy-Item], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyArrayNotAllowed,Microsoft.PowerShell.Commands.CopyI
   temCommand

1 个答案:

答案 0 :(得分:1)

当你没有向Get-EMSInstallers传递任何参数时,你仍然有一个$ args数组 - 它只是空的。所以$ ems_for_amx_source参数设置为这个空数组。

换句话说,解决这个问题:

if ($args)
{
  Get-EMSInstallers $args
}
else
{
  Get-EMSInstallers
}

可能还有更强大的方法可以做到这一点 - 如果想到的话,我可能会在稍后修改它。 :-)但是那无论如何都会让你开始。