从my answer on my question here可以看出,出于某种原因,当我从Visual Studio中的代码运行PowerShell时,通过调用powershell.Invoke或启动新的PowerShell进程,它不包括所有手动启动Windows PowerShell命令提示符时包含的PSModulePaths。
如果我在常规Windows PowerShell命令提示符下执行(Get-Item Env:\PSModulePath).Value -Split ';'
,我将获得以下7个路径:
C:\Users\Dan Schroeder\Documents\WindowsPowerShell\Modules\
C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\
C:\Program Files\WindowsPowerShell\Modules
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\
C:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\
C:\Program Files\Microsoft Security Client\MpProvider\
C:\Program Files (x86)\\Code Owls LLC
但是,如果我从代码运行它,我会得到以下3条路径:
C:\Users\Dan Schroeder\Documents\WindowsPowerShell\Modules\
C:\Users\Dan Schroeder\Documents\WindowsPowershell\Modules
C:\Program Files (x86)\Code Owls LLC\StudioShell\bin\\..\\..
为什么这些如此不同?由于我从代码运行时不包含C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\
,因此大量默认内置cmdlet不可用(例如Get-Date
,Test-Path
等。)
答案 0 :(得分:0)
我找到了问题的原因,这个问题隐藏在我的问题中。我卸载了StudioShell(Visual Studio PowerShell扩展),现在一切正常。看起来该扩展中存在一个错误。
在我的问题中,你可以看到它是我从Visual Studio运行时列出的最后一个PSModulePath,它有一个相对路径,其余部分都有一个绝对路径。
我将为StudioShell打开一个新错误来修复此错误。