针对Active Directory中的所有计算机运行powershell脚本

时间:2015-11-18 15:20:14

标签: powershell

我编写了一个生成一些信息的脚本,但我需要在活动目录中的160多台计算机上运行它。我不想单独在每台机器上运行这个脚本,有没有办法从一个集中位置执行所有机器的这个脚本?

invoke-command -ComputerName test-pc -ScriptBlock {gwmi win32_service | Select-object Name, PathName | where-object {$_.PathName -notlike '"*' -and $_.PathName -like "*\* *\*"}}

我不想单独登录每台机器。有更快的方法吗?必须有。

非常感谢任何帮助。

苏海尔。

更新版本:

invoke-command -ComputerName @(Get-ADComputer -Filter {Name -like "GBST*"} | Select-Object Name)  -ScriptBlock {gwmi win32_service | Select-object Name, PathName | where-object {$_.PathName -notlike '"*' -and $_.PathName -like "*\* *\*"}}

错误讯息:

invoke-command : One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects 
instead of strings.
At line:1 char:2
+     invoke-command -ComputerName @(Get-ADComputer -filter {Name -like "GBSU1*"} | S ...
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (System.String[]:String[]) [Invoke-Command], ArgumentException
    + FullyQualifiedErrorId : PSSessionInvalidComputerName,Microsoft.PowerShell.Commands.InvokeCommandCommand

2 个答案:

答案 0 :(得分:3)

只是为了缩短它:

(Get-ADComputer -Filter 'Name -like "GBSU*"').Name | % {
    Get-WMIObject Win32_Service |
    Select-Object Name, PathName |
    Where-Object { $_.PathName -notlike '"*' -and $_.PathName -like "** **" }
}

正如@bluuf指出的那样:

  

这实际上不是Get-WmiObject支持的“好”解决方案   ComputerName参数:Invoke-Command根本不应该使用   在这种情况下。

答案 1 :(得分:1)

修改后的示例中存在语法错误,您保留了" *"在过滤器中。您无法对所有内容进行过滤,然后缩小结果范围。在基于属性进行过滤时隐含星号。

我还添加了" .Name"计算机搜索的属性只传递给invoke-command部分。我尝试了以下代码,它似乎工作。

invoke-command -ComputerName @((Get-ADComputer -Filter 'Name -like "GBST*"').Name) -ScriptBlock {gwmi win32_service | Select-object Name, PathName | where-object {$_.PathName -notlike 'C:\Windows\system32\*' -and $_.PathName -like 'C:\Program Files\*'}}