这是我用.\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
答案 0 :(得分:1)
当你没有向Get-EMSInstallers传递任何参数时,你仍然有一个$ args数组 - 它只是空的。所以$ ems_for_amx_source参数设置为这个空数组。
换句话说,解决这个问题:
if ($args)
{
Get-EMSInstallers $args
}
else
{
Get-EMSInstallers
}
可能还有更强大的方法可以做到这一点 - 如果想到的话,我可能会在稍后修改它。 :-)但是那无论如何都会让你开始。