我正在使用PowerShell 2.0(无法升级),我正在编写一系列使用Active Directory中的一些信息的脚本。来自像C ++这样的OOP语言,我想在PowerShell 2.0中模拟一个类,但我知道它们在5.0中只有 class 语句,而且我不想使用C#来嵌入类因为我已经有了一个用Powershell编写的函数(这将是我的方法)..
我读到了这个:Powershell. Create a class file to hold Custom Objects?
我能够创建一个用#34;成员"创建PSObject的函数,但不知道如何使它与方法一起工作,这样我就可以在我的脚本中加载函数以获得更清晰的代码
这是我到目前为止所做的:
function New-User {
param($user,
$headers = @("header1","header2","header3","header4") )
$new_user = New-Object -TypeName PSObject
foreach ($header in $headers){
$new_user | Add-Member -membertype NoteProperty -name $header -value $user.$header
}
$new_user | Add-Member -membertype NoteProperty -name "othermember" -value ""
$new_user.PSObject.Typenames.Insert(0,"AD-User")
# Add methods here! for example:
$new_user | Add-Member -membertype METHOD -name "othermember" -value MYDEFINED_FUNCTION($new_user.header1)
return $new_user
}
我如何才能这样做才能在我的脚本中加载此功能?
谢谢!
答案 0 :(得分:0)
ScriptMethod
可以填补你在这里寻找的空白。假设对象具有firstname
和lastname
的属性,您可以执行类似的操作。
$new_user | Add-Member -membertype ScriptMethod -name samaccountname -value {$this.firstname.substring(0,1) + $this.LastName}
然后使用返回的对象,您可以调用scriptmethod
samaccountname
$matt = New-Object -TypeName psobject -Property @{
firstname = "matt"
lastname = "bagel"
}
$new = new-user $matt "firstname","lastname"
$new.samaccountname()
哪会返回" mbagel"。这是在2.0上测试的。
因此,如果你想在方法中使用一个函数,只需要确保它在被调用之前被提取。
function Get-AccoutName{
param(
[string]$firstname,
[string]$lastname
)
$firstname.substring(0,1) + $lastname
}
.....
other code you have
.....
$new_user | Add-Member -membertype ScriptMethod -name samaccountname -value {Get-AccoutName $this.firstname $this.LastName}
如果您希望这些内容始终可用,则只需将它们加载到PowerShell配置文件中即可。