【问题标题】:In a Powershell script, some commands don't recognize PS Drive在 Powershell 脚本中,某些命令无法识别 PS Drive
【发布时间】:2020-10-30 02:35:10
【问题描述】:

以下脚本使用 new-psdrive 命令映射网络驱动器。 它使用 get-content 将 XML 文件的内容加载到变量中。 截断的行修改 XML 对象。 然后它使用 XML 保存方法来保存文件。 该脚本给出错误“异常调用“保存”,参数为“1”:“找不到路径'M:\folder3\pems.xml'的一部分。”

clear
Remove-PSDrive M

New-PSDrive -Name M -Root "\\server1\share\folder1\folder2\" -PSProvider FileSystem
$uncpath = "\\server1\share\folder1\folder2\"

$xmlfileDrive = "M:\folder3\pems.xml"
$xmlfileUNC = $uncpath+"folder3\pems.xml"

Get-ChildItem M: 
Get-ChildItem $uncpath

#####Truncated code that manipulates $xmlfile
#####Calls outside executables that don't support UNC paths.

[xml]$scheme = Get-Content $xmlfileDrive
$scheme.Save($xmlfileDrive)

如果我改变最后一行

$scheme.Save($xmlfileDrive)

$scheme.Save($xmlfileUNC)

没有出现错误,脚本正常运行。 请注意,无论我使用哪个变量,倒数第二行的“Get-Content”命令都能正常工作。并且“Get-ChildItem”命令给出相同的结果。

为什么有些命令会识别映射的驱动器而有些则不能?

我已经在 Powershell 5 和 7 中对此进行了测试。

【问题讨论】:

  • 您确定folder3 存在于`\\server1\share\folder1\folder2` 路径中吗?
  • $scheme.Save() 不是 PowerShell 命令 - 它是一种原生 .NET 方法,并且 .NET 对 PSDrives 一无所知,因此您看到的行为

标签: powershell


【解决方案1】:

我通过在“New-PSDrive”命令中添加“-persist”解决了这个问题。之后,save() 方法和我对可执行文件的所有外部调用都识别了驱动器。

正如 Mathias R Jesson 所说,任何不是本地 Powershell 命令的命令都无法识别 PSDrive 对象(除非使用 -persist)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2015-09-10
    相关资源
    最近更新 更多