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