PowerShell实现统计函数嵌套深度_PowerShell

当你调用某个函数时,PowerShell会增加一次嵌套层次。当一个函数调用了另一个函数,或着脚本,也会增加嵌套层次。今天分享一个函数,它能告诉你的脚本嵌套的层次:

function Test-NestLevel
{
$i = 1
$ok = $true
do
{
try
{
$test = Get-Variable -Name Host -Scope $i
}
catch
{
$ok = $false
}
$i++
} While ($ok)

$i
}

当你调用的函数具有递归调用时,上面的函数非常有用,来看一个调用的示例:

function Test-Diving
{
param($Depth)

if ($Depth -gt 10) { return }

"Diving deeper to $Depth meters..."

$currentDepth = Test-NestLevel
"calculated depth: $currentDepth"

Test-Diving -depth ($Depth+1)
}

Test-Diving -depth 1
 

当你运行Test-Diving时,函数会调用自己10次。函数使用一个参数来控制嵌套层次,而Test-NestLevel负责返回确切的深度数。

注意这里有个区别:Test-NestLevel返回绝对的嵌套层次,参数会纪录这个函数调用自己多少次。如果Test-Diving被嵌入到另外一个函数中,绝对深度和相对深度会不同。

 

PS C:\> Test-Diving -Depth 1
diving deeper to 1 meters...
calculated depth: 1
diving deeper to 2 meters...
calculated depth: 2
diving deeper to 3 meters...
calculated depth: 3
diving deeper to 4 meters...
calculated depth: 4
diving deeper to 5 meters...
calculated depth: 5
diving deeper to 6 meters...
calculated depth: 6
diving deeper to 7 meters...
calculated depth: 7
diving deeper to 8 meters...
calculated depth: 8
diving deeper to 9 meters...
calculated depth: 9
diving deeper to 10 meters...
calculated depth: 10

PS C:\> & { Test-Diving -Depth 1 }
diving deeper to 1 meters...
calculated depth: 2
diving deeper to 2 meters...
calculated depth: 3
diving deeper to 3 meters...
calculated depth: 4
diving deeper to 4 meters...
calculated depth: 5
diving deeper to 5 meters...
calculated depth: 6
diving deeper to 6 meters...
calculated depth: 7
diving deeper to 7 meters...
calculated depth: 8
diving deeper to 8 meters...
calculated depth: 9
diving deeper to 9 meters...
calculated depth: 10
diving deeper to 10 meters...
calculated depth: 11

PS C:\>

Test-NestLevel总会返回从当前代码的作用域到全局作用域的嵌套深度。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索函数
, 统计
, powershell
嵌套深度
powershell 统计行数、嵌套深度、代码嵌套深度、嵌套深度不能 4层、函数嵌套深度,以便于您获取更多的相关知识。

时间: 2024-11-17 00:30:59

PowerShell实现统计函数嵌套深度_PowerShell的相关文章

PowerShell实现统计函数嵌套深度

  这篇文章主要介绍了PowerShell实现统计函数嵌套深度,本文分享一个函数,可以实现统计脚本执行的嵌套层次,需要的朋友可以参考下 当你调用某个函数时,PowerShell会增加一次嵌套层次.当一个函数调用了另一个函数,或着脚本,也会增加嵌套层次.今天分享一个函数,它能告诉你的脚本嵌套的层次: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function Test-NestLevel { $i = 1 $ok = $true do {

PowerShell实现获取进程所有者_PowerShell

适用于PowerShell 3.0或者和更高版本. Get-Process 能够获取当前运行的所有进程的列表,但是它不会返回进程的所有者信息,如果在PowerShell查询进程的所有者信息,我们需要调用WMI服务.下面给出一个例子. 复制代码 代码如下: filter Get-ProcessOwner {   $id = $_.ID   $info = (Get-WmiObject -Class Win32_Process -Filter "Handle=$id").GetOwner(

Powershell互斥参数使用实例_PowerShell

有时Powershell的函数需要互斥,让用户只能在其中二选一. 要给脚本创建一组互斥的参数,可以给他们打上不同的属性标志,同时确保它们的唯一性(假设不能自动识别参数类型). function Test-ParameterSet { [CmdletBinding(DefaultParameterSetName='number')] param ( [int] [Parameter(ParameterSetName='number', Position=0)] $id, [string] [Par

PowerShell String对象方法小结_PowerShell

从之前的章节中,我们知道PowerShell将一切存储在对象中,那这些对象中包含了一系列中的称之为方法的指令.默认文本存储在String对象中,它包含了许多非常有用的处理文本的命令.例如,要确定一个文件的扩展名,可以使用LastIndexOf()获取最后一个字符"."的位置,继续使用Substring()获取扩展名子串. PS> $path = "C:\prefs.js" PS> $path.Substring( $path.LastIndexOf(&q

PowerShell中正则表达式使用例子_PowerShell

本文介绍PowerShell中正则表达式的使用,PowerShell的正则表达式与微软其它语言的正则表达式是一样的,使用非常方便. 正则表达式本身是怎么回事,本文不做讨论,反正PowerShell还是用的微软的那一套正则表达式规则,学VB.ASP.C#等语言时都应该学过.我们只谈谈在PowerShell中,怎么去用正则表达式. 先给出一个任务,使用PowerShell在d:\1.txt文件中,找到夹在数字串中的字母串.1.txt的内容如下: 复制代码 代码如下: 1 12 12aaa3 123b

PowerShell入门教程之快速学习PowerShell的几个方法_PowerShell

如何快速地掌握PowerShell呢?总的来说,就是要尽可能多的使用它,就像那句谚语说的:Practice makes perfect.当然这里还有一些原则和方法让我们可以遵循. 有效利用交互式环境 一般来说,PowerShell有两个主要的运行环境:PowerShell和PowerShell ISE.前者是PowerShell的运行环境,后者是PowerShell集成脚本环境,也就是编写脚本(.ps1)的地方.当然,你也可以使用记事本或者其他编辑器来编写脚本.对于初学者来说,一上来就写脚本绝对

在cmd中直接运行PowerShell脚本文件的方法_PowerShell

以前在cmd中执行powershell,我们都是这样: 复制代码 代码如下: PowerShell.exe -file a.ps1 现在想在cmd中这样执行: 复制代码 代码如下: a.ps1 此时需要将Powershell脚本的默认打开方式选择为Powershell.exe,可以鼠标右键操作. 也可以使用下面的cmd以管理员权限打开,然后运行命令: 复制代码 代码如下: ftype Microsoft.Powershellscript.1="%SystemRoot%\system32\wind

PowerShell入门教程之PowerShell有什么用?_PowerShell

PowerShell能干什么呢?就像序言中提到的那样,PowerShell首先是个Shell,定义好了一堆命令与操作系统,特别是与文件系统交互,能够启动应用程序,甚至操纵应用程序:第二,PowerShell允许将几个命令组合起来放到文件里执行,实现文件级的重用,也就是说有脚本的性质:第三,PowerShell能够能够充分利用.Net类型和COM对象,来简单地与各种系统交互,完成各种复杂的.自动化的操作. 一.与文件系统交互.运行应用程序 就像在Dos中一样,在PowerShell的交互界面上键入

Powershell小技巧之使用Jint引擎在PowerShell中执行Javascript函数_PowerShell

这里演示如何利用PowerShell将一段Javascript函数字符串交给Jint引擎去执行. 执行Javascript函数 .Net版的Javascript解释器 可以从Git上获取Jint的代码,也可以从nuget上下载Jint的程序集. Jint是一个面向.Net的Javascript解释器.Jint不会把Javascript编译成.Net字节码,所以它非常适用于脚本小且运行起来速度快的工程,或者运行在不同平台上的脚本. PowerShell调用 拿到Dll根据-Path参数直接使用Ad