下午好
我已经创建了以下 powershell
function script{
param (
[string]$path = {"C:\PowerShellTest\Med Rec\1\", "C:\PowerShellTest\Med Rec\2\", "C:\PowerShellTest\Med Rec\3\"}
)
}
Get-ChildItem $path -Recurse | Select-Object Directory,Name,CreationTime | Export-Csv "C:\PowerShellTest\Med Rec\text.csv" -Force -NoTypeInformation
Remove-Item -Recurse -Path $path
当我运行它时收到以下错误
Remove-Item : Cannot bind argument to parameter 'Path' because it is null.
At C:\PowerShellTest\New folder\Content Deleted Daily at 1AM.ps1:9 char:28
+ Remove-Item -Recurse -Path $path
+ ~~~~~
+ CategoryInfo : InvalidData: (:) [Remove-Item], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.RemoveItemCommand
我不知道为什么它不工作。
答案1
您的$path
变量超出了调用范围Remove-Item
。
看一下这个例子:
function script{
$path = "hello";
echo $path;
}
echo $path;
在最后一行调用时echo $path
,由于没有放置值,因此不会输出任何内容$path
。但是,如果我调用script
,hello
则会输出,但一旦该script
函数运行完毕,$path
函数内部的变量将不再可访问。
要修复,请在可以访问变量$path
的地方定义变量Remove-Item
,例如在脚本函数之前。
要了解有关 Powershell 范围的更多信息,请参阅 Microsoft 的完整文档。
答案2
我通过创建一个别名(我希望它是正确的术语)解决了这个问题。
$path = “C:\PowerShellTest\MedRec\1\”、“C:\PowerShellTest\MedRec\2\”、“C:\PowerShellTest\MedRec\3\”
Get-ChildItem $path -Recurse | Select-对象名称,创建时间 | Export-Csv "C:\PowerShellTest\MedRec\text.csv" -Force -NoTypeInformation
获取 ChildItem $path -Recurse | 删除项目 -Recurse -Force