Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.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-ADComputers传递到Invoke命令_Powershell - Fatal编程技术网

如何在PowerShell中将Get-ADComputers传递到Invoke命令

如何在PowerShell中将Get-ADComputers传递到Invoke命令,powershell,Powershell,我在几个OU中列出了ad计算机,然后在每个OU上运行Invoke命令,但不知何故,它不会将Get-ADComputer的结果传递到Invoke命令。我做错了什么?它只会导致在第一个OU中找到第一台PC $DesktopOUs = 'OU=aaa,DC=aaa,DC=com', 'OU=bbb,DC=aaa,DC=com' $PCName = $DesktopOUs | foreach { Get-ADComputer -Filter * -Propertie

我在几个OU中列出了ad计算机,然后在每个OU上运行
Invoke命令
,但不知何故,它不会将
Get-ADComputer
的结果传递到
Invoke命令
。我做错了什么?它只会导致在第一个OU中找到第一台PC

$DesktopOUs = 'OU=aaa,DC=aaa,DC=com',
              'OU=bbb,DC=aaa,DC=com'
$PCName =  $DesktopOUs | foreach {
    Get-ADComputer -Filter * -Properties * -SearchBase $_ |
        Select-Object -ExpandProperty Name
}

Invoke-Command -ComputerName $pcname -ScriptBlock {
    $win7kb = "*KB4025341*"

    $Session = New-Object -ComObject "Microsoft.Update.Session"
    $Searcher = $Session.CreateUpdateSearcher()
    $historyCount = $Searcher.GetTotalHistoryCount()
    $Searcher.QueryHistory(0, $historyCount) |
        Where-Object {$_.title -like $win7kb} | 
        Select-Object Date,
            @{name="Operation"; expression={switch($_.operation){1 {"Installation"}; 2 {"Uninstallation"}; 3 {"Other"}}}},
            @{name="Status"; expression={switch($_.resultcode){1 {"In Progress"}; 2 {"Succeeded"}; 3 {"Succeeded With Errors"}; 4 {"Failed"}; 5 {"Aborted"}}}},
            Title
} | Out-GridView -Title "Win7"

只需进行一些更改即可变得更简单(排除ou筛选器,只运行3台计算机) 我在我的机器上运行,工作没有任何问题

$PCName = Get-ADComputer -Filter * -Properties * |
        Select-Object -ExpandProperty Name

$PCName[4..6] | % { Invoke-Command -ComputerName $_ -ScriptBlock {1} }

您可以使用
$PCName
存储来自
Get-ADComputer
的输出,但在使用
Invoke命令时请参阅
$name
。另外,
-Properties*
参数参数是不必要的,它会给您带来一些开销
$PCName |%{Invoke命令-computername$\脚本块{…}
等另外,
Out-GridView
也不起作用,您应该保存
Invoke命令的输出,然后通过管道将其传输到
Out-GridView
locally@Avshalom这是我第一次尝试
$PCName |%{Invoke Command-computername${uu-scriptblock{…}
,它得到了相同的结果。仅列出在first中找到的第一台电脑OU@MathiasR.Jessen将代码粘贴到此处后,我将$name更改为$pcname。错过了一个位置。它在我的计算机上是一致的。@RootLoop这不符合逻辑,请参见我的答案和示例,如果$PCName包含所有计算机,则invoke命令不应该关心其中的内容,而是将运行所有计算机