Захват Verbose Advance от переключателя -Вер-переключателя в PowerShell V2

StackOverflow https://stackoverflow.com//questions/25043328

Вопрос

Я столкнулся с интересной проблемой сегодня, что меня озадачено.Мне нужно запечатлеть вывод из эластичного потока и записывать его на STDOUT.

Это может быть достигнуто с этим:

# Create a PowerShell Command 

$pscmd = [PowerShell]::Create() 

# Add a Script to change the verbose preference. 
# Since I want to make sure this change stays around after I run the command I set UseLocalScope to $false. 
# Also note that since AddScript returns the PowerShell command, I can simply call Invoke on what came back. 
# I set the return value to $null to suppress any output 

$null = $psCmd.AddScript({$VerbosePreference = "Continue"},$false).Invoke() 

# If I added more commands, I'd be adding them to the pipeline, so I want to clear the pipeline 

$psCmd.Commands.Clear() 

# Now that I've cleared the pipeline, I'll add another script that writes out 100 messages to the Verbose stream 

$null = $psCmd.AddScript({Write-verbose "hello World" }).Invoke() 

# Finally, I'll output the stream 

$psCmd.Streams.Verbose
.

Теперь интересная часть заключается в том, что я должен был создать функцию, называемую Hello-World, и использовать [CmdletBinding()], чтобы наследовать переключатель -Вер, я больше не могу занять вывод:

Function Hello-World {
    [CmdletBinding()]
    Param()

    Write-Verbose "hello world"
}

...
$null = $psCmd.AddScript({Hello-World -Verbose }).Invoke() 
...
.

Я предполагаю, что функция уделяется собственным многословным потоком, и эта видимость потока теряется, но я не уверен.Это связано с [CmdletBinding()]?

избегая стенограммы, есть ли способ выполнить это?

Спасибо!

Это было полезно?

Решение

Спасибо @jasonmorgan, ниже это решение, которое кажется, работает.Мне нужно было объявить функцию в PSCMD I сделали:

$pscmd = [PowerShell]::Create() 

$null = $psCmd.AddScript({$VerbosePreference = "Continue"},$false).Invoke()
$null = $psCmd.AddScript({
  function Hello-World {
    [CmdletBinding()]
    Param()
    Write-Verbose "hello world"
  }
}, $false).Invoke() 

$psCmd.Commands.Clear() 

$null = $psCmd.AddScript({Hello-World -Verbose }).Invoke() 

$psCmd.Streams.Verbose
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top