如何在PowerShell中将Get-ADComputers传递到Invoke命令
我在几个OU中列出了ad计算机,然后在每个OU上运行如何在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
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命令不应该关心其中的内容,而是将运行所有计算机