Powershell移动项目访问被拒绝

时间:2017-03-20 22:23:47

标签: powershell move

使用按钮运行PS表单。按下按钮会执行某些操作然后调用模块。我需要使用模块将文件夹从D:\ FolderName01 \ MyFolderName移动到D:\ FolderName02。

我以管理员身份登录。 Server 2012-R2

当按下按钮并且自动脚本运行时,代码会运行 NOT

DOES 在编辑代码时运行没有问题,我突出显示它并使用"运行选择"。

这就是整个模块。没有其他事情要做。

代码:

 function MoveTheFolder($VariableName){

    if ( -not (Test-Path "D:\FolderName02") ) {
       md "D:\FolderName02"}

    cd -Path d:\
    Move-Item -Path "D:\FolderName01\$VariableName" -Destination "D:\FolderName02" -Force

 }

创建FolderName02时没有问题。 $ VariableName传递给模块,并且基于断点分析和实际错误消息是正确的。原始路径是DVD驱动器(F :)上的.iso文件。

给出的错误是

move-item: Access to the path '[D:\FolderName01\$VariableName]' is denied.

我可以使用Windows资源管理器手动移动文件夹,因此它们似乎与打开的应用程序无关。

2 个答案:

答案 0 :(得分:1)

PowerShell 2.0您需要在复制之前创建目录。

在PowerShell 3.0中,您无需创建,因为Move-Item或Copy-Item将为您创建。

获取文件。我们可以将Get-ChildItem与开关-Recurse一起使用,因为它将获取包含子文件夹的第一个目录中的所有文件。获取文件和文件夹后,我们会使用选项Move-Item将其传输到-Force。请注意,Move-Item会将文件移动到新目录。如果这是你想要的,那么我们需要使用Copy-Item。我还添加了-Verbose开关进行调试。让我们知道哪些文件不起作用。

Function MoveTheFolder($VariableName){
if ( -not (Test-Path "D:\FolderName02") ) {New-Item "D:\FolderName02\$VariableName" -Type Directory}
        cd D:\ #You do not need this, but its ok. 
Get-ChildItem -Path "D:\FolderName01\$VariableName\*" -Recurse | Move-Item -Destination "D:\FolderName02\$VariableName" -Force -Verbose
Get-ChildItem -Path "D:\FolderName01\$VariableName\*" -Recurse | Copy-Item -Destination "D:\FolderName02\$VariableName" -Force -Verbose
        }

让我知道这是否有效。

答案 1 :(得分:1)

所以Zach的解决方案虽然不完全正确,但却让我得到了实际答案。这是工作代码:

Function MoveTheFolder($VariableName){
    if ( -not (Test-Path "D:\FolderName02") ) {
        New-Item "D:\FolderName02\$VariableName" -Type Directory
    }
    Get-ChildItem -Path "D:\FolderName01\$VariableName\" | Move-Item -Destination "D:\FolderName02\$VariableName" -Force
    Remove-Item -Path "D:\Folder01\$VariableName" -Force
}

摆脱了通配符和-recurse,因为我想要的只是文件夹名,不需要枚举其中的文件。