为什么目录被重定向到C:\?

时间:2019-04-04 05:32:26

标签: powershell

我有以下脚本可以远程删除文件夹/文件

$Directory = "E:\Data"
Invoke-Command -Computer $Server -ScriptBlock { 
    param ($dir, $name)

$f = Get-ChildItem -Path $dir | Where {$_.Name -Match "$name"}
If ($f) {
    $f | Foreach {
        Remove-Item $_ -confirm:$false -Recurse -Verbose 
    }
}
else {
    Write-Verbose "No file found"
}
} -ArgumentList $Directory, $DB

由于某种原因,它尝试在C:\users\documents中查找文件……尽管我在E:\Data处明确定义了目录参数

  

找不到路径'C:\ Users \ Documents \ file.3.db',因为它没有   存在。

因此file.3.db实际上存在于E:\Data上……但是以某种方式将其与C:\目录合并了……该文件不存在并且输出了该错误消息。我很困惑那是怎么回事

编辑: 下面的代码工作正常,但是我将其更新为上面的代码,因为我想要文件检查...尽管现在这使代码不再起作用:

Invoke-Command -Computer $Server -ScriptBlock { 
    param ($dir, $name)
    Get-ChildItem -Path $dir | 
        Where {$_.Name -Match "$name"} | 
            Remove-Item -confirm:$false -Recurse -Verbose 
} -ArgumentList $Directory, $DB

1 个答案:

答案 0 :(得分:2)

您可以在本地调试所有调试程序,然后查看问题。通常,您还需要选择带有-ExpandProperty的全名。

$Directory = "d:\temp"
Invoke-Command -Computer $Server -ScriptBlock { 
    param ($dir, $name)

    Write-Output "dir='$dir', name='$name'"

    $f = Get-ChildItem -Path $dir | Where {$_.Name -Match $name} | Select -ExpandProperty FullName
    if ($f) {
        $f | Foreach {
            Remove-Item $_ -confirm:$false -Verbose -WhatIf
        }
    }
    else {
        Write-Verbose "No file found"
    }
} -ArgumentList $Directory, "test*"

注意:我在Remove-Item调用中添加了-WhatIf进行测试,因此没有删除计算机中的任何数据。我还删除了-Recurse,因为这对我来说毫无意义...但是您当然可以将其重新添加到我的测试代码中。

据此,我认为您可以使最终解决方案正常工作。