【问题标题】:Cannot find path because it doesn't exist找不到路径,因为它不存在
【发布时间】:2018-12-28 18:16:14
【问题描述】:

我编写了以下 PowerShell 脚本来执行远程 Office 卸载。

$computers = @("WGBCZC4253TQY")

foreach ($computer in $computers) {
    Copy-Item -Force -Recurse -Verbose -Path \\sgblon340012\O365\Remove-PreviousOfficeInstalls -Destination \\$computer\C$\temp200718\

    Invoke-Command -ComputerName $computer -ScriptBlock {
        & { 
            Set-ExecutionPolicy -ExecutionPolicy Bypass -Force -Verbose
            cd C:\temp200718\Remove-PreviousOfficeInstalls -Verbose
            . .\Remove-PreviousOfficeInstalls.ps1
            Remove-PreviousOfficeInstalls
            Set-ExecutionPolicy -ExecutionPolicy Bypass -Force -Verbose
        }
    }

    Remove-Item -Force -Recurse \\$computer\C$\temp200718 -Verbose
}

但它会生成以下关于路径不存在的错误,即使您可以清楚地看到它确实存在,因为文件刚刚被复制!

详细:对目标“项目:\\sgblon340012\O365\Remove-PreviousOfficeInstalls 目标:\\WGBCZC4253TQY\C$\temp200718\”执行“复制目录”操作。 详细:对目标“目标:\\WGBCZC4253TQY\C$\temp200718\”执行“创建目录”操作。 详细:对目标“项目:\\sgblon340012\O365\Remove-PreviousOfficeInstalls\OffScrub03.vbs 目标:\\WGBCZC4253TQY\C$\temp200718\OffScrub03.vbs”执行“复制文件”操作。 详细:对目标“项目:\\sgblon340012\O365\Remove-PreviousOfficeInstalls\OffScrub07.vbs 目标:\\WGBCZC4253TQY\C$\temp200718\OffScrub07.vbs”执行“复制文件”操作。 详细:对目标“项目:\\sgblon340012\O365\Remove-PreviousOfficeInstalls\OffScrub10.vbs 目标:\\WGBCZC4253TQY\C$\temp200718\OffScrub10.vbs”执行“复制文件”操作。 详细:对目标“项目:\\sgblon340012\O365\Remove-PreviousOfficeInstalls\OffScrubc2r.vbs 目标:\\WGBCZC4253TQY\C$\temp200718\OffScrubc2r.vbs”执行“复制文件”操作。 详细:对目标“项目:\\sgblon340012\O365\Remove-PreviousOfficeInstalls\OffScrub_O15msi.vbs 目标:\\WGBCZC4253TQY\C$\temp200718\OffScrub_O15msi.vbs”执行“复制文件”操作。详细:对目标“项目:\\sgblon340012\O365\Remove-PreviousOfficeInstalls\OffScrub_O16msi.vbs 目标:\\WGBCZC4253TQY\C$\temp200718\OffScrub_O16msi.vbs”执行“复制文件”操作。 详细:对目标“项目:\\sgblon340012\O365\Remove-PreviousOfficeInstalls\README.md 目标:\\WGBCZC4253TQY\C$\temp200718\README.md”执行“复制文件”操作。 详细:对目标“项目:\\sgblon340012\O365\Remove-PreviousOfficeInstalls\README_Remove-PreviousOfficeInstalls.md 目标:\\WGBCZC4253TQY\C$\temp200718\README_Remove-PreviousOfficeInstalls.md”执行“复制文件”操作。 详细:对目标“项目:\\sgblon340012\O365\Remove-PreviousOfficeInstalls\Remove-PreviousOfficeInstalls.ps1 目标:\\WGBCZC4253TQY\C$\temp200718\Remove-PreviousOfficeInstalls.ps1”执行“复制文件”操作。 详细:对目标“绕过”执行操作“Set-ExecutionPolicy”。找不到路径“C:\temp200718\Remove-PreviousOfficeInstalls”,因为它不存在。 + CategoryInfo : ObjectNotFound: (C:\temp200718\R...sOfficeInstalls:String) [Set-Location], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand + PSComputerName : WGBCZC4253TQY 术语“.\Remove-PreviousOfficeInstalls.ps1”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。 + CategoryInfo : ObjectNotFound: (.\Remove-PreviousOfficeInstalls.ps1:String) [], CommandNotFoundException +fullyQualifiedErrorId:CommandNotFoundException + PSComputerName : WGBCZC4253TQY 术语“Remove-PreviousOfficeInstalls”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。 + CategoryInfo : ObjectNotFound: (Remove-PreviousOfficeInstalls:String) [], CommandNotFoundException +fullyQualifiedErrorId:CommandNotFoundException + PSComputerName:WGBCZC4253TQY VERBOSE:对目标“绕过”执行操作“Set-ExecutionPolicy”。 详细:对目标“\\WGBCZC4253TQY\C$\temp200718”执行“删除目录”操作。 详细:对目标“\\WGBCZC4253TQY\C$\temp200718\OffScrub03.vbs”执行“删除文件”操作。 详细:对目标“\\WGBCZC4253TQY\C$\temp200718\OffScrub07.vbs”执行“删除文件”操作。 详细:对目标“\\WGBCZC4253TQY\C$\temp200718\OffScrub10.vbs”执行“删除文件”操作。详细:对目标“\\WGBCZC4253TQY\C$\temp200718\OffScrubc2r.vbs”执行“删除文件”操作。 详细:对目标“\\WGBCZC4253TQY\C$\temp200718\OffScrub_O15msi.vbs”执行“删除文件”操作。 详细:对目标“\\WGBCZC4253TQY\C$\temp200718\OffScrub_O16msi.vbs”执行“删除文件”操作。 详细:对目标“\\WGBCZC4253TQY\C$\temp200718\README.md”执行“删除文件”操作。详细:对目标“\\WGBCZC4253TQY\C$\temp200718\README_Remove-PreviousOfficeInstalls.md”执行“删除文件”操作。 详细:对目标“\\WGBCZC4253TQY\C$\temp200718\Remove-PreviousOfficeInstalls.ps1”执行“删除文件”操作。

【问题讨论】:

  • 我对您在这里所做的事情感到困惑,但似乎错误来自文件夹C:\temp200718\Remove-PreviousOfficeInstalls,因为我看到文件已复制到新目的地。那么ps1脚本remove-previousofficeinstalls可能不在那个路径中,也许你应该放一个完整的路径或者脚本可以定位的东西而不是`.`作为旁注,请不要将执行策略设置为Bypass。跨度>
  • 引用你的路径。 Remove-PreviousOfficeInstalls 现在用作路径的一部分(作为字符串),作为 .ps1 文件的名称,也是您要执行的函数的名称。这里是 cd C:\temp200718\Remove-PreviousOfficeInstalls 命令失败

标签: powershell


【解决方案1】:

这是一个 PowerShell 陷阱。如果将文件夹复制到不存在的目标文件夹,PowerShell 将创建目标文件夹,然后复制源文件夹的 content。如果要将整个源文件夹复制到目标文件夹,请确保目标文件夹已经存在:

$src = '\\sgblon340012\O365\Remove-PreviousOfficeInstalls'
$dst = "\\${computer}\C$\temp200718"
if (-not (Test-Path -LiteralPath $dst)) {
    New-Item -Type Directory -Path $dst | Out-Null
}
Copy-Item -Path $src -Destination "${dst}\" -Force -Recurse -Verbose

或者,您可以指定完整的目标路径:

$src = '\\sgblon340012\O365\Remove-PreviousOfficeInstalls'
$dst = "\\${computer}\C$\temp200718\Remove-PreviousOfficeInstalls"
Copy-Item -Path $src -Destination "${dst}\" -Force -Recurse -Verbose

但是,如果该目标文件夹由于某种原因已经存在,该命令会将整个源文件夹复制到目标文件夹,从而创建一个路径\\${computer}\C$\temp200718\Remove-PreviousOfficeInstalls\Remove-PreviousOfficeInstalls\。所以不建议走这条路。坚持第一个例子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2017-06-01
    • 2015-01-19
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多