在Visual Studio中的NuGet包管理器控制台(我正在使用2010 Ultimate)中,以下代码可以正常激活工具箱窗口:
$dte.windows.Item("{B1E99781-AB81-11D0-B683-00AA00A3EE26}").activate()
但是相同的代码在独立的PowerShell控制台会话中不起作用。这是我正在使用的脚本:
# Note: Start PowerShell console with the -STA switch.
# Get reference to VS2010 automation object (COM).
$DTE = New-Object -ComObject VisualStudio.DTE.10.0
$DTE.Solution.Open("C:\wfa1\wfa1.sln")
$DTE.MainWindow | %{$_.gettype().InvokeMember("Visible","SetProperty",$null,$_,$true)}
$DTE.Windows.Item("{B1E99781-AB81-11D0-B683-00AA00A3EE26}").Activate()
$DTE.Quit()
我得到的错误:
方法调用失败,因为[System .__ ComObject]不包含 一个名为'Item'的方法。
在C:\ users \ ams \ Desktop \ ATS \ AddTypeSample.ps1:114 char:18
+ $ DTE.Windows.Item<<<< ( “{B1E99781-AB81-11D0-B683-00AA00A3EE26}”)。激活()
+ CategoryInfo:InvalidOperation :( Item:String)[],RuntimeException
+ FullyQualifiedErrorId:MethodNotFound
我知道NuGet会准备它的控制台,例如,$dte
变量可以立即使用,无需做任何事情。如何设置我的PS脚本,以便命令可以像在NuGet的控制台中一样无缝地工作?
我在Windows 7旗舰版上使用PowerShell版本2。
答案 0 :(得分:1)
我不认为你想做的事情是可能的。在Visual Studio中的程序包管理器控制台内部,PowerShell脚本在完全不同的主机内运行,该主机提供对Visual Studio环境的访问。这就是$ dte变量的来源。在普通的PowerShell控制台窗口中运行脚本时,您使用的是默认的PowerShell主机,它不了解Visual Studio。
有关Windows PowerShell主机的详细信息,请查看MSDN上的Writing a Windows PowerShell Host Application。您可以使用Get-Host cmdlet检查运行脚本的主机。