我在 powershell 中运行一个命令行程序,将我们的 \servername\files 文件夹作为运行文件夹。即使我使用的是 Push-Location(这是我在谷歌搜索时找到的唯一解决方案),我也会收到“不支持 UNC 路径”错误。给我这个错误的最简单的代码如下:
Push-Location \\servername\files
cmd.exe \c ping 10.1.10.10
Pop-Location
我在 powershell 中运行一个命令行程序,将我们的 \servername\files 文件夹作为运行文件夹。即使我使用的是 Push-Location(这是我在谷歌搜索时找到的唯一解决方案),我也会收到“不支持 UNC 路径”错误。给我这个错误的最简单的代码如下:
Push-Location \\servername\files
cmd.exe \c ping 10.1.10.10
Pop-Location
PetSerAl 是正确的,您从 cmd 而不是 Powershell 获得此响应。如果您首先配置了 PSDrive,这将起作用,但我不知道这对您的用例是否非常有效:
New-PSDrive -Name S -PSProvider FileSystem -Root \\servername\files -Persist
Push-Location
Set-Location S:\
cmd.exe /c ping 10.1.1.1
Pop-Location
Get-PSDrive S | Remove-PSDrive
*-位置按设计工作,我将在下面演示。
演示---
PS C:\Scripts> (Get-CimInstance -ClassName CIM_OperatingSystem).Caption
Microsoft Windows Server 2012 R2 Standard
PS C:\Scripts> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
4 0 -1 -1
PS C:\Scripts> Test-Path -Path '\\FileServer01\Data'
True
PS C:\Scripts> $pwd
Path
----
C:\Scripts
PS C:\Scripts> Push-Location -Path '\\FileServer01\Data'
PS Microsoft.PowerShell.Core\FileSystem::\\FileServer01\Data> $pwd
Path
----
Microsoft.PowerShell.Core\FileSystem::\\FileServer01\Data
至于这个……
cmd.exe \c ping 10.1.10.10
...不是从 UNC 运行,而是从您的主机运行,您推送到共享的事实毫无意义。
如果共享有您要运行的 exe,则没有理由更改到该位置来运行它。只需使用定义的方法通过 PowerShell 运行外部命令(请参阅下面的链接),只需使用 UNC 路径,而无需先切换到那里。即使运行远程 exe 仍然意味着使用主机中的 cmd.exe。
PS Microsoft.PowerShell.Core\FileSystem::\\FileServer01\Data> Pop-Location
PS C:\Scripts> $pwd
Path
----
C:\Scripts
PS C:\Scripts>
运行外部命令,总是需要特别考虑。
PowerShell:运行可执行文件 https://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx
解决 PowerShell 中的外部命令行问题 https://devblogs.microsoft.com/scripting/solve-problems-with-external-command-lines-in-powershell
在 Powershell 中运行外部命令的 5 大技巧 https://powershelleverydayfaq.blogspot.com/2012/04/top-5-tips-for-running-external.html
使用 Windows PowerShell 运行旧的命令行工具(及其最奇怪的参数) https://blogs.technet.microsoft.com/josebda/2012/03/03/using-windows-powershell-to-run-old-command-line -工具和他们最奇怪的参数
在 PowerShell 中执行外部命令正确 https://mnaoumov.wordpress.com/2015/01/11/execution-of-external-commands-in-powershell-done-right https://mnaoumov.wordpress.com/2015 /03/31/execution-of-external-commands-native-applications-in-powershell-done-right-part-2 https://mnaoumov.wordpress.com/2015/04/05/execution-of-external-命令-native-applications-in-powershell-done-right-part-3
报价细节
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules https://trevorsullivan.net/2016/07/20/powershell-quoting
Push-Location 将保存您所在的位置,但由于您没有将您的位置更改为非 UNC 位置来执行 cmd.exe 程序,因此它会抱怨。
只需在 cmd.exe 调用之前放置一个 Set-Location 以确保您不在 UNC 路径上。就像是:
设置位置 $env:APPDATA
会工作。