2016-10-04 55 views
1

我想擴展PsCredential類(在PowerShell v4模塊中)以包含服務器名稱,然後能夠使用類似Export-PsCredential的腳本對該類進行序列化/反序列化。這可以(擴展類)在PowerShell模塊中輕鬆完成嗎?擴展PsCredential類

回答

1

是的,它可以!您可以define your extension in XML, in a .ps1xml file,然後用Update-TypeData更新它,或者甚至更好,您可以在模塊清單中指定此權限,以便在模塊導入時完成。

也許這最好的例子是從Keith Hill's blog where he adds a BigEndianAddress property to [System.Net.IPAddress],以便他們可以很容易地排序。

<?xml version="1.0" encoding="utf-8" ?> 
<Types> 
    <Type> 
    <Name>System.Management.Automation.PSCredential</Name> 
    <Members> 
     <NoteProperty> 
     <Name>ServerName</Name> 
     <Value></Value> 
     </NoteProperty> 
    </Members> 
    </Type> 
</Types> 

(注意,我沒有測試以上)

當你create a New-ModuleManfifest您可以指定-TypesToProcess參數和文件名。

+0

@craig我必須查找這個術語,但是它與Ruby中可以做的相似。此方法更改類的每個實例,而在運行時使用'Add-Member'可用於將屬性和方法_添加到單個實例_。這很好! – briantist

+0

將此新屬性包含在由「Get-Credential」生成的對話框中嗎?如果不是,你會如何建議填充它? – craig

+0

@craig不會包含在對話框中。填充它應該像分配它一樣簡單:'$ cred.ServerName = $ myServerValue',但是如何提示該值取決於您,並取決於您的情況。在一個函數中,我會使用一個參數。如果我需要自由形式的交互式文本輸入,「Read-Host」,如果我想要從列表中選擇運行時交互式選擇,我會使用'Out-GridView -OutputMode Single'。 – briantist