婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Powershell ISE的抽象語法樹編程示例

Powershell ISE的抽象語法樹編程示例

熱門標簽:電話智能外呼系統誠信合作 使用電話機器人電銷是否違法 真人和電話機器人對話 金融電銷公司怎么辦理外呼系統 雷霆電話機器人電話 安徽400電話辦理 信陽話務外呼系統怎么收費 湖州電銷防封卡 什么渠道可以找外呼系統客戶

有一個讓我非常喜歡Windows PowerShell ISE的理由,就是它將它的基礎腳本對象模型暴露給用戶,這樣就允許用戶按照自己的方式和需要去自定義腳本體驗。
自定義ISE的核心是$psISE對象。$psISE對象允許用戶去控制ISE許多方面的功能。你可以從這里獲取關于$psISE的分層對象模型的介紹,和與這些對象相關聯的功能。

這篇文章會討論你怎樣利用PowerShell公開提供的解釋器接口,來結合ISE對象模型魅力,去創建腳本分析和快速定位的工具。

想象一下,你不得不分析一個相對龐大的PowerShell腳本。那這個腳本可能是別人寫的,也有可能是你自己幾個月前寫的,扔了好久了。PowerShell ISE已經做了件非常棒的工作了,它提供了腳本環境。你可以通過添加Add-On(附加工具)來擴充它的功能,讓你的腳本體驗更好,更高效。從PowerShell 3.0開始,腳本的抽象語法樹(AST)就可以使用語法解釋器接口非常方便的獲取了。下面的腳本行會獲取當前打開的ISE中的腳本的AST:

復制代碼 代碼如下:

$AbstractSyntaxTree = [System.Management.Automation.Language.Parser]::
ParseInput($psISE.CurrentFile.Editor.Text, [ref]$null, [ref]$null)

接下來讓我們查詢腳本中所有的函數:

復制代碼 代碼如下:

$functionsInFile = $AbstractSyntaxTree.FindAll({$args[0] -is
 [System.Management.Automation.Language.FunctionDefinitionAst]}, $true)

撇開函數定位的定義,如果我們能回到光標之前出現的位置,那將太漂亮了。實現這個也非常簡單。我們所要做的只是存儲這些行號,然后按照反轉順序反轉他們。(是否有人已經知道了,“堆棧”)

下面的腳本塊展示了展示了Go-To Definition的實現。

復制代碼 代碼如下:

#Define some useful global variables
 
$global:__ISEGoToAddOncurrLine=1
 
$global:__ISEGoToAddOncurrcol=1
 
$global:__ISEGoToAddOnlineToGoTo=1
 
$global:__ISEGoToAddOncolToGoTo=1
 
#We need two stacks - one each for line and column
 
$global:__ISEGoToAddOnstackOfLine = New-Object System.Collections.Stack
 
$global:__ISEGoToAddOnstackOfCol = New-Object System.Collections.Stack
 
#This script block has the logic for the implementation of the Go-To definition functionality
 
$global:__ISEGoToAddOnscriptBlockGoTo =
 
{
 
$AbstractSyntaxTree =[System.Management.Automation.Language.Parser]::ParseInput($psISE.CurrentFile.Editor.Text,[ref]$null, [ref]$null)
 
$functionsInFile = $AbstractSyntaxTree.FindAll(
 
{$args[0] -is[System.Management.Automation.Language.FunctionDefinitionAst]}, $true)
 
#Get the text of the line where we have the cursor
 
$str = $psISE.CurrentFile.Editor.CaretLineText
 
#Store them on the stack for later use
 
$global:__ISEGoToAddOnstackOfLine.Push($psISE.CurrentFile.Editor.CaretLine)
 
$global:__ISEGoToAddOnstackOfCol.Push($psISE.CurrentFile.Editor.CaretColumn)
 
$global:__ISEGoToAddOncurrLine = $global:__ISEGoToAddOnstackOfLine.Peek()
 
$global:__ISEGoToAddOncurrcol = $global:__ISEGoToAddOnstackOfCol.Peek()
 
#Get the selected text so that it can be used for searching existing functions
 
$selectedFunction = $psISE.CurrentFile.Editor.SelectedText
 
#Ensure that the cursor is somewhere between the word boundaries of the function
 
$functionsInFile | %{if(($str.Contains($_.name)) `
 
–and ($global:__ISEGoToAddOncurrcol -ge
 
$str.IndexOf($_.name)) `
 
-and ($global:__ISEGoToAddOncurrcol -le
 
($str.IndexOf($_.name)+$_.name.length))
 
)
 
{$selectedFunction = $_.name}
 
}
 
if($selectedFunction -ne "")
 
{
 
#See if the selected function exists in the current open file
 
$functionToGoTo = $functionsInFile | ?{$_.name -eq "$selectedFunction"}
 
$global:__ISEGoToAddOnlineToGoTo = $functionToGoTo.Extent.StartLineNumber
 
$global:__ISEGoToAddOncolToGoTo = $functionToGoTo.Extent.StartColumnNumber
 
}
 
if($functionToGoTo -eq $null)
 
{
 
try
 
{
 
$comm = Get-Command -Name "$selectedFunction" -ErrorAction SilentlyContinue
 
$comm.Definition | Out-GridView
 
}
 
catch [System.Exception]
 
{
 
}
 
}
 
else
 
{
 
#Select the function definition, assuming the function name immediately follows the keyword 'function'
 
try
 
{
 
$psise.CurrentFile.Editor.Select($global:__ISEGoToAddOnlineToGoTo,
 
($global:__ISEGoToAddOncolToGoTo+9),
 
$global:__ISEGoToAddOnlineToGoTo,
 
($global:__ISEGoToAddOncolToGoTo+8+$selectedFunction.length+1))
 
}
 
catch [System.Exception]
 
{
 
}
 
}
 
}

補充一下,Go-To Definition 功能,如果當前Powershell會話中存在的話,以上腳本會顯示選中文本的定義。(另外,上面的腳本只是一個簡單的例子,假如你的“function”關鍵字和函數名出現在腳本的同一行。這在PowerShell中并不是必須的,所以如果你的腳本風格不同,你可能需要微調一下邏輯。)

接下來應當是在Add-on(附加工具)菜單上添加這些腳本,并把它作為選中腳本的一個命令。下面兩行就可以做這件事。

復制代碼 代碼如下:

$global:__ISEGoToAddOnsb1 =
{ $global:__ISEGoToAddOnscriptBlockGoTo | Out-Null}
$null=$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add(
"Go do definition", $global:__ISEGoToAddOnsb1, "F12")

現在來看看我們怎樣實現Go-Back 功能,使用我們定義的全局堆棧,幾行代碼即可:

復制代碼 代碼如下:

$global:__ISEGoToAddOnscriptBlockGoBack =
 
{
 
try
 
{
 
#Pop the line and column numbers from the stack to do a reverse traversal
 
$global:__ISEGoToAddOncurrLine =
 
$global:__ISEGoToAddOnstackOfLine.Pop()
 
$global:__ISEGoToAddOncurrcol =
 
$global:__ISEGoToAddOnstackOfCol.Pop()
 
$psISE.CurrentFile.Editor.SetCaretPosition(
 
$global:__ISEGoToAddOncurrLine, $global:__ISEGoToAddOncurrcol)
 
$psISE.CurrentFile.Editor.SelectCaretLine();
 
}
 
catch [System.Exception]
 
{
 
}
 
}
 
$global:__ISEGoToAddOnsb2 = { $global:__ISEGoToAddOnscriptBlockGoBack | Out-Null}
 
$null=$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("Go Back",$global:__ISEGoToAddOnsb2, "Shift+F12")

就到這里了,只用了一些PowerShell代碼就實現了Visual Studio中的Go-To Definition (轉向定義)和Go-Back(返回)功能。

你還可以繼續擴展這個腳本,讓它包含這些任務:諸如顯示腳本中所有函數,點擊函數轉到函數定義。作為大家進一步擴展功能的鼓勵,我給你看下我的 ISE附加工具現在的樣子。

擴展PowerShell ISE 中的 “附加工具”菜單

標簽:六盤水 山南 濟南 湛江 岳陽 運城 鶴崗 德州

巨人網絡通訊聲明:本文標題《Powershell ISE的抽象語法樹編程示例》,本文關鍵詞  Powershell,ISE,的,抽象,語法樹,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Powershell ISE的抽象語法樹編程示例》相關的同類信息!
  • 本頁收集關于Powershell ISE的抽象語法樹編程示例的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美日韩你懂得| 精品无人区卡一卡二卡三乱码免费卡| 欧美日韩国产精品自在自线| 波多野结衣欧美| 欧美日韩一卡二卡| 国产欧美日韩亚州综合 | 日韩av中文在线观看| 国产一区二三区好的| 色婷婷激情久久| 亚洲视频在线一区二区| 亚洲国产成人av网| 粉嫩av一区二区三区| 日韩精品一区二| 国产精品99久久久| 最好看的中文字幕久久| 极品尤物av久久免费看| 欧美v日韩v国产v| 国模冰冰炮一区二区| 欧美国产日韩a欧美在线观看| 国产精品69毛片高清亚洲| 久久久精品综合| 国产二区国产一区在线观看| 国产亚洲人成网站| 欧美三级在线播放| 国产一区二区美女诱惑| 国产精品久久久久永久免费观看 | 国产精品国产三级国产三级人妇 | 91免费精品国自产拍在线不卡| 久久精品一区二区三区不卡 | 中文字幕欧美区| 色就色 综合激情| 精品国产一区二区亚洲人成毛片| 国产一区二区影院| 香蕉影视欧美成人| 欧美va亚洲va| 欧美日韩精品系列| 蜜桃av一区二区| 美美哒免费高清在线观看视频一区二区| 欧美人牲a欧美精品| 国产乱码精品一区二区三区忘忧草| 亚洲你懂的在线视频| 欧美一区二区美女| 色婷婷精品大视频在线蜜桃视频| 国产精品主播直播| 国产精品99久久久| 国产一区二区三区四区五区入口| 亚洲午夜久久久久久久久久久| 亚洲精品写真福利| 亚洲va欧美va人人爽| 亚洲一区视频在线| 水蜜桃久久夜色精品一区的特点| 综合中文字幕亚洲| 亚洲一区视频在线观看视频| 亚洲精品中文字幕在线观看| 亚洲欧美日韩一区| 性做久久久久久免费观看 | 一本一本大道香蕉久在线精品| 国产一区二区视频在线| 国产精品一区二区久久不卡 | 激情另类小说区图片区视频区| 2023国产一二三区日本精品2022| 日韩欧美在线综合网| 久久亚洲精精品中文字幕早川悠里| 久久亚洲春色中文字幕久久久| 日韩精品中文字幕一区二区三区| 精品国产网站在线观看| 国产清纯白嫩初高生在线观看91 | 国产乱人伦偷精品视频免下载| 国产精品一级在线| 欧美一区二区成人6969| 1024亚洲合集| 国产精品一区二区三区四区| 国产精品动漫网站| 国模娜娜一区二区三区| 成人av资源站| 精品少妇一区二区三区免费观看 | 亚洲福利电影网| 蜜桃一区二区三区在线| 91视频免费播放| 欧美精品一区二区三区蜜桃| 亚洲va天堂va国产va久| 色婷婷激情综合| 一区二区三区不卡在线观看| 成人精品国产一区二区4080| 精品入口麻豆88视频| 亚洲精品国产a| 欧美伦理视频网站| 国产宾馆实践打屁股91| 国产精品电影一区二区| 日本高清不卡视频| 激情五月播播久久久精品| 国产成人av一区二区三区在线| 欧美激情一区二区| 欧美日韩久久一区二区| 韩国视频一区二区| 亚洲电影第三页| wwww国产精品欧美| heyzo一本久久综合| 国产色一区二区| 在线亚洲一区观看| 自拍偷在线精品自拍偷无码专区| 热久久免费视频| 美腿丝袜亚洲综合| 国产精品69毛片高清亚洲| 欧美午夜视频网站| 亚洲精品精品亚洲| 亚洲精选一二三| 国产精品久久久久久久久久免费看 | 久久99国产乱子伦精品免费| 日韩经典中文字幕一区| 色综合久久综合网97色综合 | 99在线视频精品| 国产精品丝袜一区| 美国三级日本三级久久99| 懂色av一区二区在线播放| 国产xxx精品视频大全| 日韩欧美国产综合| 老色鬼精品视频在线观看播放| 成人一级黄色片| 国产日韩高清在线| 激情欧美一区二区| 欧美电视剧免费观看| 五月天亚洲婷婷| 国产一区二区三区免费观看| 制服丝袜亚洲色图| 亚洲精品国产第一综合99久久 | 中文字幕一区二区日韩精品绯色| 亚洲日本成人在线观看| 午夜精品一区二区三区三上悠亚| 9i看片成人免费高清| 国产精品三级视频| av电影在线观看完整版一区二区| 五月天视频一区| 欧美在线观看视频在线| 国产精品久久久久久户外露出| 中文字幕欧美一| 欧美久久高跟鞋激| 亚洲chinese男男1069| 精品伦理精品一区| 国产精品伦一区| 精品国产一二三| 99视频在线观看一区三区| 国产无人区一区二区三区| 99久久婷婷国产| 日韩有码一区二区三区| 亚洲免费av观看| 日韩精品成人一区二区三区| 久久国产精品色婷婷| 中文字幕一区二区不卡| 精品乱码亚洲一区二区不卡| 7777精品伊人久久久大香线蕉的| av一区二区三区黑人| 久久99热这里只有精品| 石原莉奈在线亚洲二区| 中文字幕亚洲区| 精品欧美一区二区久久 | 成人中文字幕电影| 激情文学综合网| 欧美日韩国产一级| 51午夜精品国产| 91丨porny丨国产| 国产精品一卡二| 精品1区2区3区| 69堂成人精品免费视频| 日韩美女一区二区三区四区| 欧美电影免费观看高清完整版在线观看| 91精品国产91综合久久蜜臀| 日韩午夜激情视频| 亚洲国产日韩a在线播放性色| 五月激情六月综合| www.成人网.com| 91网站在线播放| 欧美日韩国产电影| 久久人人爽爽爽人久久久| 国产精品一区在线观看乱码| 欧美亚洲自拍偷拍| 日韩精品一区二区三区在线观看| 中文欧美字幕免费| 日日夜夜免费精品| 国产成人欧美日韩在线电影| 欧美影视一区在线| 国产精品乱码一区二区三区软件| 亚洲精品国产无天堂网2021| 久久成人精品无人区| 91视频一区二区三区| 色呦呦日韩精品| 国产精品亚洲视频| 丁香激情综合国产| 国产欧美一区视频| 日韩精品色哟哟| 午夜国产不卡在线观看视频| 99re免费视频精品全部| 最新日韩av在线| 国产综合久久久久影院| 51久久夜色精品国产麻豆| 亚洲成a人v欧美综合天堂下载| 91视视频在线观看入口直接观看www | 久久免费的精品国产v∧| 久久99精品久久久久久久久久久久 | 成人动漫一区二区三区|