Powershell "UNC-пути не поддерживаются", но я использую Push-Location - PullRequest
0 голосов
/ 29 мая 2019

Я запускаю программу командной строки в powershell, работающую в нашей папке \ servername \ files в качестве рабочей папки.Я получаю сообщение об ошибке «UNC-пути не поддерживаются», хотя я использую Push-Location (это единственное решение, которое я нахожу при поиске).Простейший код, который дает мне эту ошибку, выглядит следующим образом:

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

Ответы [ 3 ]

2 голосов
/ 29 мая 2019

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
0 голосов
/ 30 мая 2019

* - Местоположение работает, как задумано, как я продемонстрирую ниже.

Демо ---

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, который работает с вашего хоста, тот факт, что вы перешли на общий ресурс, не имеет смысла.

Если у общего ресурса есть исполняемый файл, который вы хотите запустить, то нет причин переходить в это место для его запуска. Просто используйте определенные методы для запуска внешних команд (см. Ссылку ниже) через 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

Лучшие 5 советов по запуску внешних команд в Powershell 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-tools-and-their-weirdest-parameters

Выполнение внешних команд в 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-commands-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

0 голосов
/ 29 мая 2019

Push-Location сохранит то, где вы находитесь, но, поскольку вы не изменили свое местоположение на местоположение, отличное от UNC, для запуска программы cmd.exe, он жалуется.

Просто поместите Set-Location передвызов cmd.exe, чтобы убедиться, что вы не находитесь на пути UNC.Что-то вроде:

Set-Location $ env: APPDATA

будет работать.

...