Как я пишу сценарий PowerShell, который принимает конвейерный вход?

Используйте компонент affix, включенный в Bootstrap. Начните с 'navbar-static-top', и это изменит его на fixed, когда будет достигнута высота вашего заголовка (содержимое над панелью навигации) ...

$('#nav').affix({
      offset: {
        top: $('header').height()
      }
}); 

http://bootply.com/107973

75
задан Peter Mortensen 28 May 2017 в 23:19
поделиться

3 ответа

Это работает, и, вероятно, есть другие способы сделать это:

foreach ($i in $input) {
    $i
}

17:12:42 PS> 1..20 | . \ cmd-input.ps1
1
2
3
- снип -
18
19
20

Выполните поиск по запросу "powershell $ input variable", и вы найдете дополнительную информацию и примеры.
Вот пара:
Функции и фильтры PowerShell PowerShell Pro!
(см. Раздел «Использование специальной переменной PowerShell« $ input »»)
«Скрипты, функции и блоки скриптов имеют доступ к переменной $ input, которая обеспечивает перечислитель для элементов во входящем конвейере».
или
$ input gotchas «PowerBlog PowerShell Дмитрия и не только
« ... в основном $ input в перечислителе, который обеспечивает доступ к имеющемуся конвейеру ».

Для командной строки PS, а не Командная строка DOS Командный процессор Windows.

40
ответ дан 24 November 2019 в 11:32
поделиться

В версии 2 вы также можете принимать ввод конвейера (по propertyName или byValue), добавлять псевдонимы параметров и т. Д .:

function Get-File{
    param(  
    [Parameter(
        Position=0, 
        Mandatory=$true, 
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true)
    ]
    [Alias('FullName')]
    [String[]]$FilePath
    ) 

    process {
       foreach($path in $FilePath)
       {
           Write-Host "file path is: $path"
       }
    }
}


# test ValueFromPipelineByPropertyName 
dir | Get-File

# test ValueFromPipeline (byValue) 

"D:\scripts\s1.txt","D:\scripts\s2.txt" | Get-File

 - or -

dir *.txt | foreach {$_.fullname} | Get-File
112
ответ дан 24 November 2019 в 11:32
поделиться

Вы можете написать фильтр, который является частным случаем функции, например:

filter SquareIt([int]$num) { $_ * $_ }

, или вы можете создать аналогичную функцию, например, так:

function SquareIt([int]$num) {
  Begin {
    # Executes once before first item in pipeline is processed
  }

  Process {
    # Executes once for each pipeline object
    $_ * $_
  }

  End {
    # Executes once after last pipeline object is processed
  }
}

Вышеупомянутое работает как интерактивная функция Definiton или если в сценарии может быть разбит на ваш глобальный сеанс (или другой сценарий). Однако в вашем примере указано, что вам нужен сценарий, поэтому здесь он находится в сценарии, который можно использовать напрямую (точки не требуются):

  --- Contents of test.ps1 ---
  param([int]$num)

  Begin {
    # Executes once before first item in pipeline is processed
  }

  Process {
    # Executes once for each pipeline object
    $_ * $_
  }

  End {
    # Executes once after last pipeline object is processed
  }

В PowerShell V2 это немного изменилось с "расширенными функциями", которые включают функции с теми же функциями привязки параметров у скомпилированных командлетов. См. Это сообщение в блоге для примера различий. Также обратите внимание, что в этом случае с расширенными функциями вы не используете $ _ для доступа к объекту конвейера. С помощью расширенных функций объекты конвейера привязываются к параметру так же, как и с командлетом.

23
ответ дан 24 November 2019 в 11:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: