0

我在 powershell 中运行一个命令行程序,将我们的 \servername\files 文件夹作为运行文件夹。即使我使用的是 Push-Location(这是我在谷歌搜索时找到的唯一解决方案),我也会收到“不支持 UNC 路径”错误。给我这个错误的最简单的代码如下:

Push-Location \\servername\files
cmd.exe \c ping 10.1.10.10
Pop-Location
4

3 回答 3

2

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
于 2019-05-29T18:59:22.847 回答
0

*-位置按设计工作,我将在下面演示。

演示---

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

于 2019-05-30T05:00:36.677 回答
0

Push-Location 将保存您所在的位置,但由于您没有将您的位置更改为非 UNC 位置来执行 cmd.exe 程序,因此它会抱怨。

只需在 cmd.exe 调用之前放置一个 Set-Location 以确保您不在 UNC 路径上。就像是:

设置位置 $env:APPDATA

会工作。

于 2019-05-29T18:23:09.280 回答