Powershell 调用命令出错:';一个或多个计算机名无效';

Powershell 调用命令出错:';一个或多个计算机名无效';,powershell,Powershell,我的代码抛出以下错误: 调用命令:一个或多个计算机名无效。如果试图传递URI,请使用-ConnectionUri参数,或传递URI对象而不是字符串 它的每一部分似乎都能工作,但我只是没有得到任何可见的输出 阵列已填充,已对此进行了测试。如果我在Invoke命令中删除变量$comp,并显式命名一台机器,则会有输出,这是正确的。这可能是因为一些客户端处于脱机状态 $compArray = @() $compArray = Get-ADComputer -Filter * -SearchBase "

我的代码抛出以下错误:

调用命令:一个或多个计算机名无效。如果试图传递URI,请使用-ConnectionUri参数,或传递URI对象而不是字符串

它的每一部分似乎都能工作,但我只是没有得到任何可见的输出

阵列已填充,已对此进行了测试。如果我在
Invoke命令
中删除变量
$comp
,并显式命名一台机器,则会有输出,这是正确的。这可能是因为一些客户端处于脱机状态

$compArray = @()

$compArray = Get-ADComputer -Filter * -SearchBase "OU=xxx,OU=xxx,OU=xxx,OU=xxx,OU=xxx,DC=xxx,DC=xx,DC=xx" `
    | Select-Object Name |Sort-Object Name

ForEach ($comp in $comparray) {
    Invoke-Command -ComputerName $comp {
        Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*  `
        | Where {($_.InstallSource -like "C:\Users*")} `
            | Select-Object DisplayName, DisplayVersion, InstallSource `
               | Sort-Object InstallSource |Format-Table –AutoSize}
            }

当前,
$compArray
包含一个计算机列表,您可以使用
选择对象名称
选择这些计算机的名称属性。这将创建一个如下所示的数组:

Name ---- Computer01 Computer02 每个
$comp
条目实际上是一个
Microsoft.ActiveDirectory.Management.ADComputer
对象(这是由
Get-ADComputer
返回的),其中包含您选择的名称属性

Invoke命令
无法将
ADComputer
对象作为
ComputerName
的输入,这就是您收到错误的原因。要更正此问题,您需要使用属性名称更新此命令,从而仅引用此对象的
名称
属性:

Invoke-Command -ComputerName $comp.Name

另一个选项是使用
选择对象
展开
名称
属性:

Select-Object -ExpandProperty Name
这将获取传入对象,枚举其值并将每个值作为单个记录输出,这在代码中会发生更改:

Name ---- Computer01 Computer02 名称 ---- 计算机01 计算机02 进入:

计算机01 计算机02
因为不再有
名称
属性
$comp
将包含计算机名称,并且您不需要引用对象的属性,如
$comp.Name

如果您将“选择对象名称”更改为“选择对象-展开属性名称”,则需要使用以下名称属性:
调用命令-ComputerName$comp.Name{
James C.就是这样!很容易被忽视。谢谢你的帮助。 Name ---- Computer01 Computer02 Computer01 Computer02