Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell:正在将Get-ADGroup集合传递给后台作业,缺少各种属性值_Powershell_Jobs_Scriptblock - Fatal编程技术网

Powershell:正在将Get-ADGroup集合传递给后台作业,缺少各种属性值

Powershell:正在将Get-ADGroup集合传递给后台作业,缺少各种属性值,powershell,jobs,scriptblock,Powershell,Jobs,Scriptblock,如果这个问题已经得到回答,请告诉我解决方案,但是,目前我无法在现有的帖子中找到答案 我目前正在powershell中处理后台工作,以便将繁重的进程分解为并行进程,以缩短持续时间。总体概念是可行的,但是,我遇到了一个问题,将从Get-ADgroup返回的ADgroup对象的父集合传递到作业的脚本块中 集合传递得很好,但是问题是一些属性,即description和member,在对象上有属性条目,但是一旦在脚本块中,这些值就会丢失。在进入脚本块之前,我验证了这些值是否存在。我还验证了scriptb锁

如果这个问题已经得到回答,请告诉我解决方案,但是,目前我无法在现有的帖子中找到答案

我目前正在powershell中处理后台工作,以便将繁重的进程分解为并行进程,以缩短持续时间。总体概念是可行的,但是,我遇到了一个问题,将从Get-ADgroup返回的ADgroup对象的父集合传递到作业的脚本块中

集合传递得很好,但是问题是一些属性,即description和member,在对象上有属性条目,但是一旦在脚本块中,这些值就会丢失。在进入脚本块之前,我验证了这些值是否存在。我还验证了scriptb锁是否在解释脚本块内正确传递的对象类型,但一旦进入脚本块,这些值就为空

奇怪的是,如果我用ConvertToJSON序列化对象,那么这些值就是它们的这种格式,而不是.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:
编辑:我将数组传递给具有“using:”作用域的作业:


处理前有错误吗<代码>$ps.streams.error为什么不使用作业?
$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