Powershell 打印行号、列号、文件路径.ps1

本文介绍如何在PowerShell中获取当前代码执行的位置信息,包括行号、列号、文件路径和函数名。通过`[System.Diagnostics.StackTrace]`获取堆栈信息,`$MyInvocation`获取调用信息,以及在异常处理中获取错误位置。
摘要由CSDN通过智能技术生成


# 此API有Bug,结果值为0,原因未知?
function GetCodeLocation($skipFrames=1){
    $st = [System.Diagnostics.StackTrace]::new($skipFrames, $true)
    $sf = $st.GetFrame(0)
    $rowNo = $sf.GetFileLineNumber()
    $colNo = $sf.GetFileColumnNumber()
    $file = $sf.GetFileName()
    $func = $sf.GetMethod().Name
    "在文件{0} 函数{1} 第{2}行,第{3}列的信息:{4}" -f $file, $func, $rowNo, $rowNo, $sf
}
function Test1{
    # 获取执行语句的行号、列号
    $kipFrames = 1
    GetCodeLocation -skipFrames $kipFrames

    # 获取执行函数的行号、列号
    $kipFrames = 0
    GetCodeLocation -skipFrames $kipFrames
}
#Test1

Function Test2(){
    '调用函数 Test2() 的位置: 行 {0}, 列 {1}' -f $MyInvocation.ScriptLineNumber, $MyInvocation.OffsetInLine
    #"`n`$MyInvocation 所有属性信息如下:"
    #$MyInvocation | Get-Member -force
    #"`n`$MyInvocation 所有实值信息如下:"
    #$MyInvocation | Format-List * -force
    #"`n`$MyInvocation 所有实值信息如下:"
    #$MyInvocation | Format-List -Property *
    #"`n`$MyInvocation 所有实值信息(M字母开头)如下:"
    #$MyInvocation | Format-List M*
    #"`n`$MyInvocation 所有实值信息如下:"
    #$MyInvocation | Select *
    #"`n`$MyInvocation 所有实值信息(包括子类、子成员)如下:"
    #$MyInvocation | format-custom *
}
Test2

# 捕获异常行号、列号
Function Test3(){
    trap{
        $info=$_.InvocationInfo
        "在第{0}行,第{1}列捕获到异常:{2}" -f $info.ScriptLineNumber, $info.OffsetInLine, $_.Exception.Message
        continue
    }
    Get-Service | foreach {1/0}
}
#Test3

exit

################################################################################################################################

# 当前测试版本 Powershell  5.1
# $PSVersionTable                                                             
# PSVersion                      5.1.22621.963                                            

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值