PowerShell |使用“ Get-ADComputer”从服务器获取存储

问题描述

我的脚本有问题,请帮忙:3

该脚本应该从我们的服务器OU中获取所有服务器主机名。而不是获得服务器的“已用”空间和可用空间,但是当我尝试使用“ Get-AdComputer” cmdlet获取服务器列表时,会出现错误

$servers = Get-ADComputer -Filter * -SearchBase "OU=SomeOU,DC=SomeDomain,DC=SomeDomain" | Select-Object Name

$alldisks = foreach ($server in $servers)
{
    Get-WmiObject Win32_Logicaldisk -ComputerName $server -Filter DriveType=3 | 
        Select-Object @{'Name'='ComputerName'; 'Expression'={$server}},deviceid,@{'Name'='Size'; 'Expression'={[math]::truncate($_.size / 1GB)}},@{'Name'='Freespace'; 'Expression'={[math]::truncate($_.freespace / 1GB)}}
            
}
$alldisks |Export-Csv C:\Servers.csv -NoType@R_756_4045@ion

运行此命令时,我得到:

Get-WmiObject : Der RPC-Server ist nicht verfügbar.
In Zeile:5 Zeichen:5
+     Get-WmiObject Win32_Logicaldisk -ComputerName $server -Filter Dri ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject],COMException
    + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

我还应该补充一点,如果我只从第一行开始运行,就会得到我们所有服务器的干净列表。

解决方法

由于该错误指出RPC服务器不可用于您要查询的服务器之一。根据{{​​3}}可能有多种原因:

远程计算机已被防火墙阻止。

解决方案:打开“组策略对象编辑器”管理单元(gpedit.msc),以编辑用于管理组织中Windows防火墙设置的组策略对象(GPO)。打开计算机配置,打开管理模板,打开网络,打开网络连接,打开Windows防火墙,然后打开域配置文件或标准配置文件,具体取决于您要配置的配置文件。启用以下例外:“允许远程管理例外”和“允许文件和打印机共享例外”。

主机名或IP地址错误或远程计算机已关闭。

解决方案:验证正确的主机名或IP地址。 “ TCP / IP NetBIOS Helper”服务未运行。 解决方案:确认“ TCP / IP NetBIOS Helper”正在运行,并设置为重启后自动启动。

“远程过程调用(RPC)”服务未在远程计算机上运行。

解决方案:验证“远程过程调用(RPC)”正在运行,并设置为重新启动后自动启动。

远程计算机上没有运行“ Windows Management Instrumentation”服务。

解决方案:验证“ Windows Management Instrumentation”正在运行,并设置为重启后自动启动

所以,我认为那里没有任何代码问题。请检查网络防火墙和服务器端。另外,应用try/catch块并在循环中捕获确切的服务器名称,以查看引起问题的服务器。