【问题标题】:Lazy loading in powershell?在powershell中延迟加载?
【发布时间】:2015-12-04 22:54:23
【问题描述】:

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

我想做的是在我的个人资料中预定义一些变量,这些变量将包含 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 中有哪些可用选项?

【问题讨论】:

  • $Lazy=[Lazy[PSObject]]::new([Func[PSObject]]{dir})
  • 大声笑我认为 OP 想要优化他的命令以使其更快
  • @sodawillow 这与优化无关,我认为这与我想要的很接近:stackoverflow.com/a/14503339/381149
  • 计算需要 30 秒,所以我无法将其放入我的个人资料中 我以为您希望脚本运行得更快,以便将其放入您的个人资料中。我认为您只需要一个(经典)变量来保存命令的结果,例如$myFavouriteComputers。然后,每次使用 PowerShell 时都可以使用此变量。
  • @sodawillow 我们正在谈论数百个 OU 和数千个计算机名,除非它们被有效使用,否则无需查询所有这些对象。

标签: performance powershell lazy-loading


【解决方案1】:

最后,基于我上一个问题的@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 等...

【讨论】:

  • 恕我直言,这并不是真正的延迟加载。每次您请求它时,它都会评估Get-ADComputer ... 命令。只是调用函数的语法不同。
  • 你是对的,这就是为什么我说一种延迟加载。但这对我的日常需求有好处:) 并允许在不执行的情况下定义事物。为了避免每次我可以创建另一个 var 时执行代码:$OU1_server=$server.OU1 ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 2011-03-14
  • 1970-01-01
  • 2010-10-22
  • 2011-11-05
相关资源
最近更新 更多