Я написал функцию Deploy-App
которую наши разработчики используют в VisualStudio 2017, в Build Events > Post-build event command line
чтобы опубликовать свое приложение в сетевой папке.
Я написал другую функцию, которая называется Invoke-Unlock
которая разблокирует папки + файлы, которые заблокированы на удаленном сервере, прямо с их компьютера.
Прямо сейчас они сначала выполняют Invoke-Unlock
в PowerShell, чтобы разблокировать приложение в общем сетевом ресурсе, а затем развернуть приложение в VisualStudio.
Теперь я Invoke-Unlock
в Deploy-App
чтобы разработчикам больше не приходилось делать это вручную. Они могут просто вызвать его с помощью переключателя, подобного этому Deploy-App xy -InvokeUnlock
.
В Invoke-Unlock
я использую Get-SmbShare
и Get-SmbOpenFile
. Все работало нормально при использовании этой функции вручную, но если они используют ее в VisualStudio, они получают следующее сообщение об ошибке:
9> Get-SmbShare : The term 'Get-SmbShare' is not recognized as the name of a cmdlet, function, script file, or operable
9> program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
9> At \\server\install$\Powershell-Scripts\Functions\Invoke-Unlock.ps1:28 char:22
9> + $LocalPath = Get-SmbShare -CimSession $Session | ? { $_.Name ...
9> + ~~~~~~~~~~~~
9> + CategoryInfo : ObjectNotFound: (Get-SmbShare:String) [], CommandNotFoundException
9> + FullyQualifiedErrorId : CommandNotFoundException
9>
9> Get-SmbOpenFile : The term 'Get-SmbOpenFile' is not recognized as the name of a cmdlet, function, script file, or
9> operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
9> again.
9> At \\server\install$\Powershell-Scripts\Functions\Invoke-Unlock.ps1:32 char:9
9> + Get-SmbOpenFile -CimSession $Session | ? { $_.Path -like "$En ...
9> + ~~~~~~~~~~~~~~~
9> + CategoryInfo : ObjectNotFound: (Get-SmbOpenFile:String) [], CommandNotFoundException
9> + FullyQualifiedErrorId : CommandNotFoundException
9>
Команды Smb
доступны начиная с PowerShell 4.0. Все разработчики имеют PowerShell 5.1 на Windows 10.
Так почему же команды не распознаются? VisualStudio каким-то образом использует другую версию PowerShell? У кого-нибудь есть идея?
Изменить: я добавил ipmo SmbShare
в начале Invoke-Unlock
, чтобы убедиться, что модуль был загружен также в VisualStudio, но затем я получаю это сообщение об ошибке:
ipmo : The specified module 'SmbShare' was not loaded because no valid module file was found in any module directory.
Это заставляет меня думать, что VisualStudio не использует каталоги модуля PowerShell по умолчанию?