Defina o parâmetro na função, que armazenará seus dados. Em seguida, verifique se o parâmetro é fornecido e aja de acordo. Você pode ter que fazer alguns ajustes devido à maneira como o PowerShell passa os dados para programas externos , mas a ideia básica permanece.
Exemplo de barebone:
Uso:
'foo', '', 'bar' | Invoke-Python
Aqui estou passando um array para a função Invoke-Python
.
Resultado:
- 'foo' será canalizado para o python
- Em seguida, a função encontrará um parâmetro vazio e invocará o python interativo
- Depois de sair do python interativo, a função canalizará 'bar' para o python
Invoke-Python
function:
function Invoke-Python
{
[CmdletBinding()]
Param
(
# This parameter will catch your input data
[Parameter(ValueFromPipeline = $true)]
[string]$InputObject
)
# This block runs when pipeline is initialized.
# It doesn't have access to the parameters,
# they are not yet parsed at this time.
Begin
{
# Set path to the python
$PythonPath = 'c:\python27\python.exe'
}
# This block runs for each pipeline item
Process
{
# Check, is there anything passed in the InputObject parameter
if($InputObject)
{
Write-Host 'We have some data, let''s pipe it into the python'
$InputObject | & $PythonPath @('-c', 'print repr(raw_input())')
}
else
{
Write-Host 'No data, let''s just launch interactive python'
& $PythonPath
}
}
}