为什么文件中输出的数字不是机器名?

时间:2017-08-01 15:52:43

标签: powershell

我输出的文件不包含$ machine,如果有效或不有,则包含数字。如何输出机器名称以及机器名称是否有效?

Import-Module ActiveDirectory
$enddate = Get-Date 
$machines=(Get-ADComputer -filter * -SearchBase 'OU=this,OU=is,OU=my,DC=domain,DC=com' -Properties * | Select Name, lastlogondate |Where-Object {$_.LastLogonDate -lt ($enddate).AddMonths(-2)} |Sort  lastlogondate).name
foreach ($machine in $machines) 
{
  if (test-Connection -ComputerName $machine -count 1 -ErrorAction SilentlyContinue) 
         {
            Write-Output "$machine is valid" 
         }
            Write-Output "$machine is not valid" | Export-Csv 
  c:\machine_not_valid.csv -Append -NoClobber -NoTypeInformation
}

1 个答案:

答案 0 :(得分:2)

Export-Csv需要一个对象,而不是一个字符串。然后,它使用此对象的属性作为CSV的标题。

正在输出数字,因为它正在接收string作为输入,其具有单个属性Length

您的代码中也存在错误,其中"$machine is not valid"部分位于if语句之外,而不是else语句中。

如果您有多个值,Export-Csv就是您的选择。如果您只有一个,请使用Out-File,因为您不需要创建对象:

Import-Module ActiveDirectory
$enddate = Get-Date 
$machines=(Get-ADComputer -filter * -SearchBase 'OU=this,OU=is,OU=my,DC=domain,DC=com' -Properties * | Select Name, lastlogondate |Where-Object {$_.LastLogonDate -lt ($enddate).AddMonths(-2)} |Sort  lastlogondate).name

foreach ($machine in $machines) 
{
  if (test-Connection -ComputerName $machine -count 1 -ErrorAction SilentlyContinue) 
         {
            Write-Output "$machine is valid" 
         }else{
            Write-Output "$machine is not valid" | Export-Csv c:\machine_not_valid.csv -Append -NoClobber
         }  
}