PowerShell 添加 自定義的ScriptProperty 屬性

之前的博客豆子創建了一個自定義的PowerShell對象 http://beanxyz.blog.51cto.com/5570417/1772977

並且生成了對應的manifest文件和模塊 http://beanxyz.blog.51cto.com/5570417/1773382

如果想給自己定義的這個對象添加新的屬性類型,可以創建一個新的ps1xml文件。這個文件的模板可以參考PowerShell自帶的types.ps1xml 文件。這個默認文件位於$pshome下面。

wKioL1dCSK7jeD3aAACh-4Cs5So575.png


現在來看個例子如何添加。


比如說,我想添加一個scriptmethod的屬性 Canping(),這個屬性返回一個bool值,如果能ping通爲真,不能ping通爲假。


首先加載我的模塊


wKiom1dCRqCzlRHcAAAlNG5wLk0279.png


我之前已經定義了一個function,這個function會返回一系列計算機的信息。

wKioL1dCR5Ozgts7AAAbG2g2QMU445.png


簡單測試一下

wKiom1dCRqWyP_AdAAAoN7k6uFY795.png


看看類型,可以看見他的TypeName是 Yuan.systeminfo,這個不是默認的PSCustomObject類型,而是我自己定義的。他當前的屬性並沒有canping()這個scriptmethodproperty類型。

wKioL1dCR5nAsAURAAB2AS1ZmUE773.png


首先來創建一個ping.ps1xml的文件,如下所示,注意對象名字要匹配。另存在我的模塊目錄下。

<?xml version="1.0" encoding="utf-8" ?>
<Types>
<Type>
<Name>Yuan.SystemInfo</Name>
<Members>
<ScriptMethod>
<Name>CanPing</Name>
<Script>
Test-Connection -ComputerName $this.ComputerName -Quiet
</Script>
</ScriptMethod>
</Members>
</Type>
</Types>

然後手動更新一下typedate的文件

wKioL1dCTHSSXP6RAACDx_WpZk0925.png


重新加載一下模塊,可以看見這個function已經有新的屬性了

wKiom1dCRqvyHRvbAACRtJZdpqo604.png

測試一下 成功

wKioL1dCR56zXuSDAAAc_LZ4YLg976.png


多來幾個計算機名測試一下

wKioL1dCR6Cg0xHuAABn2BZGrUw654.png


最後把更新一下我的manifest文件,添加對應的typetoprocess路徑

wKiom1dCRrKiqIMJAABcYcuXrZQ067.png


重新加載模塊之後工作正常。

wKiom1dCRrSxb9hZAACGpez-3hg766.png


參考資料:

《Learn PowerShell ToolMaking in a month of lunches》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章