gpt4 book ai didi

oop - 使用模块中的方法模拟类

转载 作者:行者123 更新时间:2023-12-02 18:43:56 24 4
gpt4 key购买 nike

我正在使用 PowerShell 2.0(无法升级),并且正在编写一系列使用 Active Directory 中的一些信息的脚本。来自 C++ 这样的 OOP 语言,我想在 PowerShell 2.0 中模拟一个类,但我知道它们在 5.0 中只有 class 语句,并且我不想使用 C# 来嵌入类因为我已经有一个用 Powershell 编写的函数(这将是我的方法)..

我读到了这个:Powershell. Create a class file to hold Custom Objects?

我可以使用“成员”创建 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

}

我怎样才能做到这一点,以便我只在我的脚本中加载这个函数?

谢谢!

最佳答案

ScriptMethod 可以填补您在此处寻找的空白。假设该对象具有 firstnamelastname 属性,您可以执行类似的操作。

$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 配置文件中即可。

关于oop - 使用模块中的方法模拟类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35943179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com