Vida após a morte do Invoke-BatchFile do PSCX

1

Eu ainda sou novo no PowerShell, então tenha paciência comigo. Por que o console do PowerShell se comporta de maneira estranha depois de usar o cmdlet Invoke-BatchFile do PSCX?

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:\>

Antes de usar o cmdlet, tudo parece funcionar bem. Depois de usá-lo, parece que outro utilitário iria assumir 'cd' e retornar objetos powershell em cada invocação, o que eu vejo como uma linha extra solo (já bastante irritante), ou algo que parece quase um trecho de 'ls' .

Por que isso? Existe uma maneira de se livrar desse comportamento?

Obrigado antecipadamente, Máté

    
por Meteorhead 16.07.2014 / 14:27

2 respostas

1

A execução de um comando a partir de um módulo importa esse módulo - assim, quando você executa esse comando, você importou o módulo PSCX.

O PSCX altera o alias "CD" para apontar para o comando "Set-LocationEx", que rastreia automaticamente o histórico de localização para que você possa navegar facilmente até os locais anteriores. Quando você chama Set-LocationEx sem parâmetros, eles mostram a pilha (por que else você executaria o CD sem parâmetros, afinal?)

Nota lateral, para importar alterações de ambiente de arquivos em lote para o PowerShell, eu uso esse script do PoshCode em vez disso: link

P.S .: Eles também (por padrão) usam o Write-Host para ecoar seu novo local. Você pode desativar esse comportamento definindo a variável de preferência:

$Pscx:Preferences.CD_EchoNewLocation = $False

Como todos sabem que usar write-host é considerado prejudicial certo? Usá-lo para escrever o caminho do diretório para fora quando eu não pedi um -Passthru é muito estranho, então você pode votar em esse bug ; -)

P.S .: Infelizmente, embora o PSCX tenha criado uma unidade de preferências, o PSCX não parece persistir nas mudanças de preferência (não sei por que, mas vou ver se consigo descobrir). De qualquer forma, para tornar suas preferências conhecidas, você precisa editar uma cópia do Pscx.UserPreferences.ps1 e e passar o caminho para esse arquivo como -Arg ao importar o módulo PSCX (o que significa que você pode não dependem de importação automática). Obviamente, isso é uma dor:

Import-Module Pscx -Arg ~\Documents\WindowsPowerShell\Pscx.UserPreferences.ps1
    
por 20.07.2014 / 06:33
0

"Exibir" a pilha de diretórios é uma função básica da substituição do CD do PSCX. Se você não quiser usar a funcionalidade de substituição de CD, você pode configurar o arquivo Pscx.UserPreferences.ps1 para não carregá-lo, definindo esta seção da seguinte forma:

ModulesToImport = @{
    CD = $false
    ...

E, em seguida, passando o caminho para o arquivo assim ao importar o módulo:

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

Infelizmente, você precisará carregar o Pscx explicitamente primeiro. Se você usar o recurso de módulo de carregamento automático do PowerShell, o PSCX sempre será carregado com valores padrão.

No entanto, antes de se livrar do CD, incentivo a brincar com cd para vários diretórios diferentes e, em seguida, tente cd - para voltar um diretório em seu histórico de cd e tente cd + avançar. Agora, quando você executar cd , poderá ver o histórico completo. Tente executar cd 1 para levá-lo ao diretório especificado no slot 1.

    
por 22.07.2014 / 16:56

Tags