2015-04-15 30 views
0

在的NuGet的軟件包管理器控制檯在Visual Studio中(我用的2010旗艦版),下面的代碼工作,併成功激活工具箱窗口:差異觀察到的B/W NuGet包管理器控制檯和滑動PowerShell控制檯

$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() 

我得到的錯誤:

方法調用失敗,因爲[系統.__ ComObject]不包含 一個名爲「項」的方法。
在C:\用戶\ AMS \桌面\ ATS \ AddTypeSample.ps1:114字符:18
+ $ DTE.Windows.Item < < < <(「{B1E99781-AB81-11D0-B683-00AA00A3EE26} 「).Activate()
+ CategoryInfo:InvalidOperation:(項目:字符串)[],的RuntimeException
+ FullyQualifiedErrorId:MethodNotFound

我知道的NuGet的Preps其控制檯,以便,例如,在$dte variab le可以立即使用,而無需執行任何操作。我如何設置我的PS腳本,以使命令能夠像NuGet控制檯一樣無縫工作?

我在Windows 7旗艦版上使用PowerShell版本2。

+0

(注意:完全不熟悉NuGet)在這兩種情況下,'$ dte.Windows'是什麼? –

+0

@EtanReisner NuGet控制檯中'$ dte.Windows'的輸出是一系列以'AutoHides'開始並以'OutstandingEventCount'結尾的重複屬性;在PowerShell控制檯中,輸出是「System .__ ComObject」重複九次。 – Sabuncu

+0

'$ dte.windows [0] .gettype()'怎麼辦? (我假設它是重複數組)。 –

回答

1

我不認爲你想要做什麼是可能的。在Visual Studio中的包管理器控制檯中,您的PowerShell腳本在完全不同的主機內運行,該主機提供對Visual Studio環境的訪問。這是$ dte變量的來源。當您在普通的PowerShell控制檯窗口中運行腳本時,您正在使用不知道Visual Studio的默認PowerShell主機。

查看MSDN上的Writing a Windows PowerShell Host Application以獲取有關Windows PowerShell主機的更多詳細信息。您可以使用Get-Host cmdlet檢查腳本運行的是哪個主機。

+0

我明白了,你所說的包管理器控制檯提供的魔法不能在簡單的控制檯中輕鬆複製。 – Sabuncu