Como eu crio um alias (ou função) do PowerShell que contém uma opção?

2

Estou aprendendo o PowerShell, então estou fazendo coisas assim muito:

Get-Command | Out-String -Stream | ss child 

( ss é um alias para select-string ).

Estou ficando cansado de digitar Out-string -Stream o tempo todo, então no Unix eu acabei de criar um alias para ele. No entanto, isso não funciona no Powershell.

  • Eu criei como um alias e ele errou (acho que entendi isso).
  • Eu criei como uma função, mas engole toda a minha saída
  • Eu criei como um filtro, e isso também não produziu saída.

Como posso fazer isso?

Usando * child * como o argumento é provavelmente a melhor maneira de fazer esta tarefa em particular, mas eu estou realmente usando isso como um exemplo para aprender a escrever funções PS.

Eu só quero que a função substitua a parte 'Out-string -Stream', de modo que, em vez de:

Get-Command | Out-String -Stream | ss child   

Eu poderei escrever:

Get-Command | oss | ss child 

Suponho que preciso usar ValueFromPipeline ou a variável $ input, como Matt mostra.

Ok, eu entendi. Eu acho que preciso dizer explicitamente para ler o pipeline. Em vez de:

function oss { Out-String -Stream } 

Eu preciso dizer:

function oss { $input | Out-String -Stream } 

Eu me pergunto como perdi isso na documentação?

    
por jonathan 23.07.2011 / 07:00

2 respostas

1

O que você quer dizer com uma função engole toda a sua saída?

Eu tentei isso e recebi as mesmas saídas:

function MySS {
    [cmdletbinding()]
    param (
        [string] $SearchString
    )
    Process {
        Get-Command | Out-String -Stream | Select-String -Pattern $SearchString
    }
}

Executar Get-Member e GetType na saída retornam da mesma forma a função e o comando canalizado.

EDIT: Se você queria para nós outras funções de origem

function MySS2 {
    [cmdletbinding()]
    param (
        [Parameter(
                    Mandatory = $True,
                    ValueFromPipeline = $true)]
        $input,
        [Parameter(
                    Mandatory = $True,
                    ValueFromPipeline = $false,
            Position = 0)]
        [string] $SearchString
    )
    Process {
        $input | Out-String -Stream | Select-String -Pattern $SearchString
    }
}

por exemplo,

Get-Command | MySS2 "Get"
get-help get-alias | MySS2 "Get"

EDIT: forma mais simples (string de seleção comentada):

function MyOSS {
    param ($input)
    $input | Out-String -Stream #| Select-String "Get"
}

EDIT: edição final eu acho! : -)

Eu vejo que você descobriu sozinho Jonathan - feliz por ter ajudado e eu não sabia que você poderia usar $ input sem declarar isso como um parâmetro. Isso é legal.

    
por 23.07.2011 / 11:35
1

FWIW:

  • Eu tenho usado essa função de substituição de grep , bem, desde que eu esteja usando o PowerShell:

    function grep { $input | out-string -stream | sls $args }

  • As versões atuais do PowerShell (> = 3,0) têm um alias para Select-String ( sls ) e uma função de atalho para Out-String -Stream ( oss ). Get-Command também tem seu próprio alias, gcm . Assim, a forma abreviada padrão para o seu comando é gcm | oss | sls child

  • Caracteres curinga são permitidos no parâmetro Get-Command name , o que significa que gcm *child* basicamente faz isso (e é claro que é muito mais rápido)

por 31.08.2017 / 17:06