2017-07-10 78 views
0

是否有可能獲得$ _的數量。在foreach管道中變量?powershell,foreach,獲取行數

例子:

$a = 1..9 
$a | foreach {if ($_ -eq 5) { "show the line number of $_"}} 

我希望你知道我的意思。

謝謝!

+0

你試圖讓'$ _'值,鄰你試圖獲得'$ _'的數組索引嗎?你的示例代碼中顯示的值很好。 – TheMadTechnician

回答

3

Array.IndexOf Method.NET框架)

搜索指定的對象,並返回其第一 出現的索引在一個一維陣列中或在範圍中的 數組中的元素。

例子

PS D:\PShell> $a = "aa","bb","cc","dd","ee" 

PS D:\PShell> $a.IndexOf('cc') 
2 

PS D:\PShell> $a=101..109 

PS D:\PShell> $a.IndexOf(105) 
4 

PS D:\PShell> $a |foreach {if ($_ -eq 105) {"$($a.IndexOf($_)) is the line number of $_"}} 
4 is the line number of 105 

PS D:\PShell> 
+0

謝謝,IndexOf是我需要的! 也許我的英語應該更好地描述我的問題更清楚。 ;-) – Stoffi

0

如果你試圖讓腳本文件名和行號,你可以使用$ MyInvocation變量的函數調用來獲取在腳本文件的行號該函數被調用。

保存在PS1腳本文件如下:

function Get-CurrentLineNumber { 
    return $MyInvocation.ScriptLineNumber 
} 

function Get-CurrentFileName { 
    return $MyInvocation.ScriptName 
} 

1..9 | % { 
    if ($_ -eq 5) { 
    "{0}:{1} value is {2}" -f (Get-CurrentFileName), (Get-CurrentLineNumber), $_ 
    } 
} 

腳本運行之後,你應該得到類似以下的輸出:

// C:\用戶\鮑勃\桌面\測試名爲.ps1:11值是5

從poshoholic的博客在這裏無恥借: https://poshoholic.com/2009/01/19/powershell-quick-tip-how-to-retrieve-the-current-line-number-and-file-name-in-your-powershell-script/