Invoke-Command:一台或多台计算机名称无效
运行此命令时出现错误:
Invoke-Command -ComputerName $Targets -ScriptBlock $ScriptBlock
$Targets
是一个数组,由以下命令填充:
Get-ADComputer -Filter "Name -like '$Filter'" -SearchBase $OU |
Select-Object -ExpandProperty Name |
Sort-Object
计算机名称中通常包含-
,但是我测试了没有任何特殊字符的计算机,并得到了相同的结果。
这是我的方法:
function Get-FilteredADComputers
{
[CmdletBinding()]
[OutputType([System.String[]])]
param
(
[Parameter(Position = 0, Mandatory)]
[ValidateSet('Site 1', 'Site 2', 'Site 3')]
[String]
$Site,
[Parameter(Position = 1, Mandatory)]
[ValidateSet('Client', 'Server')]
[String]
$ComputerType,
[Parameter(Position = 2, Mandatory)]
[String]
$Filter
)
$siteSecondLevel
switch($Site){
"site 1"{$siteSecondLevel = "LVL 1"}
"site 2"{$siteSecondLevel = "LVL 2"}
"site 3"{$siteSecondLevel = "LVL 3"}
}
$OU = "OU=$ComputerType,OU=Devices,OU=$siteSecondLevel,OU=$Site,OU=MyOU,DC=mydomain,DC=com"
Get-ADComputer -Filter {Name -like $Filter} -SearchBase $OU | Select-Object -ExpandProperty Name | Sort-Object
}
我如何在测试环境中声明我的列表:
$temp = Get-FilteredADComputers -Site Site1 -ComputerType Client -Filter
"myfilter"
$target = @()
foreach($t in $temp){
if($t -ne $null -or $t -ne ""){
$target += $t
}
}
通过将数组声明为$Targets = Get-FilteredADComputers
答案 0 :(得分:0)
第一步是查看$ targets中的内容。我怀疑您的末尾可能会出现空白行,或者Invoke-Command拒绝将其作为计算机名拒绝使用其他
答案 1 :(得分:0)
$ Targets是列表吗?如果不是,请执行以下操作:$Targets2 = @($Targets)
这将使它成为列表,并且您可能会成功使用此解决方案。
它应该可以工作,但是,我会说改用Foreach。
foreach ($Target in $Targets)
{
Invoke-Command -ComputerName $Target -ScriptBlock $ScriptBlock
}
大多数情况下,我都是这样做的,因为更容易进行故障排除和查找错误原因。
答案 2 :(得分:0)
尝试一下:
$temp = Get-FilteredADComputers
$targets = @()
foreach($t in $temp)
{
if($t -ne $null -and $temp -ne "")
{
$targets += $t
}
}
在您的评论之一中,您说您要执行以下操作:
$temp = Get-FilteredADComputers -Site $site -ComputerType $computerType -Filter $filter
if($temp -ne $null -or $temp -ne ""){ $targets += $temp }
但是使用支票$temp -ne $null
,您只需检查它是否不为空,一旦$temp
中有一个条目(即使它只是在第二位置),它就不再为空。
答案 3 :(得分:0)
出于Google搜索目的发布此内容。我的问题是我试图将DevOps变量传递给Powershell脚本。我必须更改我的DevOps (getTestBed() as any)._instantiated = false;
(getTestBed() as any)._moduleFactory = undefined;
变量
发件人:
// @run-at document-start
收件人:
WebServers
在我的Powershell中,我使用了:
server1,server2,server3