Remove-Item:无法将参数绑定到参数“Path”,因为它为空

Remove-Item:无法将参数绑定到参数“Path”,因为它为空

下午好

我已经创建了以下 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。但是,如果我调用scripthello则会输出,但一旦该script函数运行完毕,$path函数内部的变量将不再可访问。

要修复,请在可以访问变量$path的地方定义变量Remove-Item,例如在脚本函数之前。

要了解有关 Powershell 范围的更多信息,请参阅 Microsoft 的完整文档。

https://technet.microsoft.com/en-us/library/hh847849.aspx

答案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

相关内容