【发布时间】: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