Chcę utworzyć funkcję PowerShell, która wylicza niektóre dane i uruchamia blok skryptu we wszystkich wystąpieniach.Funkcja PowerShell z sparametryzowanym blokiem skryptowym
Teraz mam (nie jest to rzeczywisty kod, ale ilustruje mój problem):
function Invoke-TenTimes
{
[CmdletBinding()]
param
(
[Parameter(Mandatory=$true, Position=0)]
[ScriptBlock]$Action
)
process
{
$digits = 0..10
$digits | % {
$Action.Invoke($_);
}
}
}
umieścić tę funkcję w moim module. Jednak nie otrzymam żadnego wyniku, gdy zadzwonię:
Invoke-TenTimes { $_ }
Dane wyjściowe są puste (nic nie jest wyświetlane).
Jeśli zadzwonię
Invoke-TenTimes { $_ -eq $null }
mam dziesięć true
. W rzeczywistości widzę, że $_
ma wartość null.
Jaki jest właściwy sposób wypełniania $_
?
Co doprowadza mnie do szału, jest to, że jeśli mogę umieścić tę funkcję i połączenie w tym samym pliku ps1, to działa (ale chcę przekazać blok skryptu na żądanie):
function Invoke-TenTimes
{
[CmdletBinding()]
param
(
[Parameter(Mandatory=$true, Position=0)]
[ScriptBlock]$Action
)
process
{
$digits = 0..10
$digits | % {
$Action.Invoke($_);
}
}
}
Invoke-TenTimes { $_ }
Dzięki! to rozwiązało mój problem i mogę teraz użyć bloku skryptu z $ _ :). –