Я пишу командный файл, который выполняет Powershell script, который в одной точке перебирает элементы с путями UNC в качестве атрибутов и использует Get-ChildItem
на этих путях. В минимальной версии это то, что происходит в моих скриптах:
Master.bat
powershell -ExecutionPolicy ByPass -File "Slave.ps1"
Slave.ps1
$foo = @{Name = "Foo"}
$foo.Path = "\\remote-server\foothing"
$bar = @{Name = "Bar"}
$bar.Path = "\\remote-server\barthing"
@( $foo, $bar ) | ForEach-Object {
$item = Get-ChildItem $_.Path
# Do things with item
}
Проблема, с которой я сталкиваюсь, заключается в том, что при запуске Master.bat он терпит неудачу при Get-ChildItem
с ошибкой в строках
get-childitem : Cannot find path '\\remote-server\foothing' because it does not exist.
Однако, кажется, он работает отлично, если я запускаю файл Slave.ps1 напрямую, используя Powershell. Почему это может происходить только при запуске файла Master.bat?
Вещи, которые я пробовал
- Предоставление UNC-путей с помощью
FileSystem::
с поставщиками http://powershell.org/wp/2014/02/20/powershell-gotcha-unc-paths-and-providers/ - Убедитесь, что в реальных путях нет странных символов.
- Используя параметр
-literalPath
вместо простого параметра-path
дляGet-ChildItem
- Запуск
Get-ChildItem \\remote-server\foothing
в PowerShell и последующее подтверждение подключения к удаленному серверу