PowerShell 2.0,Get-ADComputer脚本问题(无输出)。

问题描述 投票:0回答:1

我试图使用下面的脚本来测试AD中每台计算机与域控制器的信任关系。我使用的是powershell 2.0。当我测试这个脚本时,我没有得到任何输出。它是基于一个可以工作的 powershell 4.0 脚本。

    $localCredential = Get-Credential

ForEach ($Name in Get-AdComputer -Filter *){

   $output = { $Name = $_.Name }

   if (-not (Test-Connection $Name $_.Name -Quiet -Count 1)) { $output.Status = 'Offline'
   } else {
       $trustStatus = Invoke-Command $Name $_.Name -ScriptBlock { Test-ComputerSecureChannel } -Credential $localCredential
       $output.Status = $trustStatus
   }

   [pscustomobject]$output

}

以下是我试图转换的一个 powershell 4.0 脚本,因为 .ForEach 语法在 Powershell 2.0 中无效。

资料来源:Powershell 2.0。https:/adamtheautomator.comtrust-relationship-between-this-workstation-and-the-primary-domain-failed。

这里是我试图转换的工作脚本。

    $localCredential = Get-Credential

@(Get-AdComputer -Filter *).foreach({

   $output = @{ ComputerName = $_.Name }

   if (-not (Test-Connection -ComputerName $_.Name -Quiet -Count 1)) { $output.Status = 'Offline'
   } else {
       $trustStatus = Invoke-Command -ComputerName $_.Name -ScriptBlock { Test-ComputerSecureChannel } -Credential $localCredential
       $output.Status = $trustStatus
   }

   [pscustomobject]$output

})

有谁知道为什么我没有得到输出?我发布的第一个脚本是否有明显的问题?任何帮助将是非常感激的。

非常感谢您。

戴夫

powershell active-directory powershell-2.0
1个回答
0
投票

foreach() 语句中声明迭代器变量 $Name但在循环体中,你不一致地使用了 $_ 也是。

你也在使用 [pscustomobject]@{},一个在PowerShell 3.0中引入的特殊对象分配语法--你需要使用 New-Object psobject -Property 在2.0版本中。

最后,你的 $output 变量需要是一个字典,而不是一个脚本块(请注意 @ 在...面前 { Name = ... }).

为了解决这一切。

ForEach ($Computer in Get-AdComputer -Filter *){

   $output = @{ Name = $Computer.Name }

   if (-not (Test-Connection $Computer.Name -Quiet -Count 1)) {
       $output.Status = 'Offline'
   } else {
       $trustStatus = Invoke-Command -ComputerName $Computer.Name -ScriptBlock { Test-ComputerSecureChannel } -Credential $localCredential
       $output.Status = $trustStatus
   }

   New-Object psobject -Property $output
}
© www.soinside.com 2019 - 2024. All rights reserved.