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

问题描述 投票:0回答:1

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

$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
powershell
1个回答
2
投票

您可以在本地调试所有这些并查看问题。主要是,您还需要使用-ExpandProperty选择FullName。

$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,因为这对我没有意义......但是你可以把它添加回我的测试代码当然。

由此,我认为您可以使您的最终解决方案正常运行。

© www.soinside.com 2019 - 2024. All rights reserved.