PSCX Invoke-BatchFile来世

我还是比较新的PowerShell,请耐心等待。 为什么PowerShell控制台在使用PSCX的Invoke-BatchFile cmdlet之后performance得很糟糕?

C:\> cd C:\> cd .\Kellekek C:\Kellekek> cd .. C:\> C:\> Invoke-BatchFile 'C:\Kellekek\Microsoft Visual Studio 12.0\VC\vcvarsall.bat' amd64 C:\> cd # Directory Stack: --- ---------------- -> 0 C:\ C:\> cd .\Kellekek C:\Kellekek C:\Kellekek> cd .. C:\ C:\> 

在使用cmdlet之前,一切似乎都正常。 在使用它之后,好像另一个实用程序会在每次调用时都接pipe'cd'并返回powershell对象,我认为这是一个单独的额外行(已经非常恼人),或者看起来几乎是'ls' 。

为什么是这样? 有没有办法摆脱这种行为?

在此先感谢,Máté

从模块运行命令导入该模块 – 因此,当您运行该命令时,您导入了PSCX模块。

PSCX将“CD”别名更改为指向他们的“Set-LocationEx”命令,该命令会自动跟踪位置logging,以便您轻松导航到之前的位置。 当你不带任何参数地调用Set-LocationEx时,他们会向你显示堆栈(为什么不用参数运行CD呢?

注意,为了将batch file的环境变化导入到PowerShell中,我使用了PoshCode中的脚本: http ://poshcode.org/3547

PS:他们也(默认情况下)使用写主机回应你的新位置。 您可以通过设置首选项variables来closures该行为:

 $Pscx:Preferences.CD_EchoNewLocation = $False 

因为每个人都知道使用写主机被认为是有害的 ,对吗? 当我没有要求-Passthru的时候,用它来写出目录path非常奇怪,所以你可以为这个bug投票;-)

PPS:不幸的是,虽然PSCX创build了偏好驱动器,PSCX似乎并没有保持偏好的改变(我不知道为什么,但我会看看,如果我能找出)。 无论如何,要知道您的首选项,您需要编辑Pscx.UserPreferences.ps1的副本,然后在导入PSCX模块时将path作为-Arg传递给该文件(这意味着您不能依赖自动导入)。 显然这是一个痛苦:

 Import-Module Pscx -Arg ~\Documents\WindowsPowerShell\Pscx.UserPreferences.ps1 

“显示”目录堆栈是PSCX cdreplace的基本function。 如果您不想使用replaceCDfunction,则可以将Pscx.UserPreferences.ps1文件configuration为不通过设置此部分来加载它:

 ModulesToImport = @{ CD = $false ... 

然后在导入模块时传入文件的path:

 Import-Module Pscx -Arg $home\Documents\WindowsPowerShell\Pscx.UserPreferences.ps1 

不幸的是,你需要首先加载Pscx。 如果您使用PowerShell的自动加载模块function,PSCX将始终加载默认值。

但是,在摆脱CD之前,我鼓励通过CD播放一堆不同的目录,然后尝试cd -在您的cd历史logging中备份一个目录,然后尝试cd +向前移动。 现在当你执行cd你可以看到完整的历史。 尝试执行cd 1将您带到插槽1中指定的目录。