0

我有一个简单的脚本,它将连接到域中的所有服务器,并为每台服务器上运行的所有服务构建一个表。但是,当我尝试自动化脚本以获取 foreach 循环中的所有服务器时,我收到一个 RPC 错误。如果 $name 变量被替换为服务器 DNS 名称,一切都会按预期工作。我检查了我的系统 (win7) 和服务器 (2000 - 2008R2) 上的防火墙和 DCOM 服务,这些都已正确启用或禁用。所以,我在想剧本中的某些东西坏了。我仍在学习 powershell,所以任何提示都值得赞赏。

这是到目前为止的脚本。$servernames = get-adobject -Filter 'ObjectClass -eq "Computer" ' -Searchbase "OU=Servers,DC=E,DC=BENEFIS,DC=ORG"

 foreach ($name in $servernames) {
        Get-WMIObject win32_service -computername $name -Property      SystemName,Name,StartName,StartMode | 
        Format-table SystemName, Name, Startname >c:\serverservices.txt }
4

1 回答 1

1

您返回的每个对象都有一个 name 属性,因此您需要将其值传递给 ComputerName 参数。此外,要使用Get-ADComputercmdlet 获取计算机对象,您还需要在导出到文件时指定 Append 开关,否则内容将被覆盖,最终您将看到的只是最后一台计算机的输出。

$servernames = Get-ADComputer -SearchBase "OU=Servers,DC=E,DC=BENEFIS,DC=ORG" -Filter *

foreach ($name in $servernames) 
{
        Get-WMIObject win32_service -computername $name.Name -Property SystemName,Name,StartName,StartMode |
        Format-table SystemName, Name, Startname | Out-File c:\serverservices.txt -Append
}
于 2012-09-27T22:43:25.330 回答