Используя методы where () и foreach (), вы можете указать параметр.
Function DoThings {
Param ($user)
Process {
$_.memberof.Where{
$_ -match "Team_" }.foreach{
Remove-ADGroupMember $_ $user.samaccountname}
}
}#did things
Указав свой ввод в качестве параметра, вы можете получить доступ к исходному объекту с именем параметра.
DoThings $Userlist
В качестве альтернативы, чтобы поддерживать доступность конвейера, вы можете превратить функцию в расширенную функцию, чтобы позволить параметру явно принимать входные данные конвейера.
Function DoThings {
[cmdletbinding()]
param([Parameter(ValueFromPipeline = $true)]$user)
Process {
$_.memberof.where{
$_ -match "Team_" }.foreach{
Remove-ADGroupMember $_ $user.samaccountname}
}
}#did things
Будет работать как
$Userlist DoThings
Базовая функция будет принимать входные данные конвейера, но доступна только через автоматическую переменную $ _.В моем тестировании с использованием автоматической переменной $ input есть доступ к начальным свойствам объекта, но, по-видимому, ее можно использовать только один раз для каждой функции.
Вместо присвоения значения временной переменной гораздо элегантнее использовать функциирасширенная функция.
Тот же метод можно использовать с командлетами ForEach-Object и Where-Object без создания новой переменной.