从 VisualStudio 2017 调用时无法识别 PowerShell 命令

从 VisualStudio 2017 调用时无法识别 PowerShell 命令

我编写了一个名为的函数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 起可用。所有开发人员都在 Windows 10 上安装了 PowerShell 5.1。

那么为什么命令无法识别?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 模块目录?

答案1

在这种情况下,常见的问题是 Visual Studio 2017 是 32 位的,因此默认情况下会调用 32 位版本的 PowerShell。但是在 64 位 Windows 上手动启动 PowerShell 时,您使用的是 64 位版本的 PowerShell。

这导致 PowerShell 在 Visual Studio 内部的执行方式与在 Visual Studio 外部的执行方式不同。

解决方案是使用以下语法从 Visual Studio 中专门调用 64 位版本:

%WINDIR%\SysNative\WindowsPowerShell\v1.0\PowerShell.exe

相关内容