powershell - Powershell:将 Get-ADGroup 集合传递给后台作业,缺少各种属性值
问题描述
如果已回答此问题,请指出解决方案,但是,目前我无法在现有帖子中找到此问题的答案。
我目前正在处理 powershell 中的后台作业,以将繁重的进程分解为并行进程,以减少持续时间。总体概念是有效的,但是,我遇到了一个问题,即将从 Get-ADGroup 返回的 ADgroup 对象的父集合传递到作业的脚本块中。
集合传递得很好,但是,问题是一些属性,即描述和成员,在对象上有属性条目,但是一旦在脚本块中,值就丢失了。我在进入脚本块之前验证了这些值。我还验证了 scriptb 锁正在解释在脚本块内正确传递的对象类型,但这些值一旦进入就为空。
奇怪的是,如果我使用 ConvertTo-Json 序列化对象,则值是这种格式的,而不是 .NET 对象形式的。我想知道它是否与传递给脚本块时对象的序列化有关?
最后一点,如果我创建一个自定义对象并使用 ADGroup 对象中的属性和值填充它,然后将其交给脚本块,一切都很好。我尝试通过“$Using:var”构造传递对象,以及通过参数列表显式传递它并在脚本块中定义类型特定的参数。
希望对底层架构有更好理解的人可以对此有所了解。下面是我正在做的事情的简化版本,将值输出到文件只是为了看看我在脚本块中得到了什么,我可以获得 SAM,但没有描述或成员
$adgroups = Get-ADGroup -Server $domain -Properties Description, member -SearchBase $ou -LDAPFilter "(samaccountname=*)"
$ps = [powershell]::create()
[void]$ps.AddScript({
Param([ADGroup[]]$groups)
foreach ($group in $groups) {
"SAM: $($group.samAccountName)" | Out-File output.txt
"Description: $($group.description)" | Out-File output.txt -append
"Members: $($group.member)" | Out-File output.txt -append
}
}).AddParameter('groups', $adgroups)
$ps.Invoke()
$ps.Dispose()
同样,属性值在进入脚本块之前就已经存在,但只有在脚本块内的值是空的。
解决方案
哇,我试图用作业来做到这一点,但我无法让整个数组传入。它只打印一条记录。但& $block $adgroups
工作正常。
$adgroups = Get-ADGroup -Properties Description, member -LDAPFilter "(samaccountname=*)" -resultsetsize 5
$block = {
Param([object[]]$groups)
$groups.count
foreach ($group in $groups) {
"SAM: $($group.samAccountName)"
"Description: $($group.description)"
"Members: $($group.member)"
}
}
start-job $block -args @($adgroups) | wait-job | receive-job
# output
1
SAM: Remote Desktop Users
Description: Members in this group are granted the right to logon remotely
Members:
编辑:我将数组传递给具有“使用:”范围的作业:
$groups = Get-ADGroup -Properties Description, member -LDAPFilter "(samaccountname=*)" -resultsetsize 5
$block = {
foreach ($group in $using:groups) {
"SAM: $($group.samAccountName)"
"Description: $($group.description)"
"Members: $($group.member)"
}
}
start-job $block | wait-job | receive-job
推荐阅读
- matlab - 如何从受来自单独概率分布的另一个随机值约束的分布中生成随机值?
- javascript - 如何使用正则表达式解析 OData 参数?
- java - 在 Kotlin 代码之间编写 java 代码
- python - 无法在我的 docker 环境中安装任何 pip 包,因为它不会被识别
- bash - bash $'...' 字符串的正确名称?
- javascript - 当有多个组件时,在反应中调用特定子引用的方法
- excel - .Copy 后引用新工作表
- c++ - 在“WindowsStore”(UWP)下使用 CMake 构建时,GoogleTest 无法以 0xc0000135 运行
- sql - 如何在 Delphi (adotable) 中使用 SQL 查询更新 DBGrid 中的 Quantity 字段?
- java - 使用嵌入式 postgres 的测试因非法状态异常而失败