は、$ForEach
自動変数をオフに示す(以下)コードブロックが存在するが、それはまた、バッチ内のサブルーチンのような構文を有します。私は、このコードがどのように機能するのか、どのような言語構造が呼び出されているのかについてのドキュメントは見つけることができません。私はそれがPowerShell v5の追加だと信じていますが、リリースノートを読んでも私を助けませんでした。 :tokenLoop foreach ($token in $tokens)
は何を表していますか? (少なくともバージョン2.0以降)のPowerShell
バージョン3.0とアップ
においてabout_Foreachの例:PowerShellのcmdサブルーチン構文? <a href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_foreach?view=powershell-5.1&viewFallbackFrom=powershell-Microsoft.PowerShell.Core" rel="nofollow noreferrer">this about page</a>で
function Get-FunctionPosition {
[CmdletBinding()]
[OutputType('FunctionPosition')]
param(
[Parameter(Position = 0, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
[ValidateNotNullOrEmpty()]
[Alias('PSPath')]
[System.String[]]
$Path
)
process {
try {
$filesToProcess = if ($_ -is [System.IO.FileSystemInfo]) {
$_
}
else {
Get-Item -Path $Path
}
foreach ($item in $filesToProcess) {
if ($item.PSIsContainer -or $item.Extension -notin @('.ps1', '.psm1')) {
continue
}
$tokens = $errors = $null
$ast = [System.Management.Automation.Language.Parser]::ParseFile($item.FullName, ([REF]$tokens), ([REF]$errors))
if ($errors) {
Write-Warning "File '$($item.FullName)' has $($errors.Count) parser errors."
}
:tokenLoop foreach ($token in $tokens) {
if ($token.Kind -ne 'Function') {
continue
}
$position = $token.Extent.StartLineNumber
do {
if (-not $foreach.MoveNext()) {
break tokenLoop
}
$token = $foreach.Current
} until ($token.Kind -in @('Generic', 'Identifier'))
$functionPosition = [pscustomobject]@{
Name = $token.Text
LineNumber = $position
Path = $item.FullName
}
Add-Member -InputObject $functionPosition -TypeName FunctionPosition -PassThru
}
}
}
catch {
throw
}
}
}
で
while
文の中break
に関連して説明されています。 [about_break](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_break?view=powershell-5.1)を参照してください。 –これは、使用するループのラベルですbreakステートメントこれが常にPowerShellの一部であったのか、特定のバージョン@JeffZeitlinを追加したのか分かりますか?私は、「これはXで追加されました」というのは、約ページに見つかりませんでした。 – TheIncorrigible1
@ TheIncorrigible1ラベルは少なくともv 3.0以降でpsになっています(v3言語仕様で記述されています) –