在 powershell 中延迟加载?

Lazy loading in powershell?

我们可以推迟变量初始化直到需要它吗?

我想做的是 预定义 我的配置文件中的一些变量将包含 AD 计算机列表:

假设我想要:

$OU1_workstation 填充在 OU=workstations,OU=OU1,dc=domain,dc=com

中的计算机

$OU2_workstation 填写
中的计算机 OU=workstations,OU=OU2,dc=domain,dc=com 等等...

我使用以下脚本来执行此操作,但计算需要 30 秒,因此目前我无法将其放入我的个人资料中...

Get-ADOrganizationalUnit -SearchScope onelevel -Filter "*" -Properties "name","distinguishedname" |%{
    set-Variable -Name "$($_.name)_workstation" -value (Get-ADComputer -Searchbase "OU=workstations,$($_.Distinguishedname)" -Filter * )
}    

powershell 中有哪些可用选项?

最后,根据我之前的一个问题 @Richard's reply,我选择了以下路径来实现某种延迟加载:使用 scriptpropertyPSCustomObject . 所以我可以把它放在我的个人资料中

#requires -module activedirectory
$server=New-Object PSCustomObject
Get-ADOrganizationalUnit -SearchScope onelevel -Filter "*" -Properties "name","distinguishedname" | 
?{
    $_.name -notmatch 'Administrateurs|Administration|Comptes de deploiement|Contacts|Domain Controllers|Groupes|Serveurs|Services' 
} |
%{
    $OU=$_.name
    $s=[scriptblock]::Create("Get-ADComputer -SearchBase ""OU=servers,OU=$OU,DC=domain,DC=com"" -Filter 'name -notlike "" *old""' |select -expand name")
    $server| Add-Member -MemberType ScriptProperty -name $OU -value $s -Force
}

然后在需要时我可以调用 $server.OU1 获取此 OU 下的所有服务器,$server.OU2 等等...