如何使用两个echo命令使用PowerShell在一行上打印数据

时间:2015-04-21 12:41:38

标签: powershell

下面是我用来查找用户创建日期和上次登录日期的代码,然后将其写入.csv文件。

$users=Get-ADuser -SearchBase "OU=testou1,dc=US,dc=ITOPS,dc=COM" -Filter * -properties samaccountname,lastlogondate,Created    
$forloop = foreach($user in $users) {    
         echo $user.samaccountname    
          echo $user.created    
        echo $user.lastlogondate    
        }    
$forloop | Out-file c:\bin\exporting.csv -Append 

此代码在新行上打印每个项目,如下所示:

username  
created date  
last logon date  

但我希望所有这些都在不同列的同一行:

username createdDate lastLogonDate

3 个答案:

答案 0 :(得分:2)

您知道PowerShell中的echo实际上是Write-Output的别名。

PS Z:\> get-alias echo

CommandType     Name                                               ModuleName                                                                                
-----------     ----                                               ----------                                                                                
Alias           echo -> Write-Output   

如果您查看TechNet文章,它本身不支持任何追加类型参数或换行抑制。这并不意味着你无法做到。只是没有任何帮助。

echo / Write-Output只是将数据发送到输出流。你需要你的文字吗?有没有一个更好的例子可以提供你想要完成的事情?仅供参考,在幕后工作的其他cmdlet也在使用Out-Default

Write-Host真的是你想要的。是的我知道你说你不想要它,但我希望你能肯定地看到它。

PS Z:\> Write-host "Hai" -NoNewline; Write-Host "Hello"
HaiHello

答案 1 :(得分:0)

我冒昧地使用一些PowerShell功能来输出我认为您实际需要的数据。我将属性放入自定义对象,并将输出留给脚本的末尾。在重构脚本时,这将使代码重用变得更容易。我还使用本机CmdLet以适当的格式导出CSV。你实际上并不需要使用$ forloop变量,因为foreach会将所有对象放入管道中,但是我把它留在了,因为它可以使事情更具可读性。

 $users=Get-ADuser -SearchBase "OU=testou1,dc=US,dc=ITOPS,dc=COM" -Filter * -properties samaccountname,lastlogondate,Created    
    $forloop = foreach($user in $users) {    
             [pscustomobject]@{
                samaccountname=$user.samaccountname;
                created=$user.created;
                lastlogondate=$user.lastlogondate    
            }
          }    
    $forloop | Export-Csv -Path c:\bin\exporting.csv

答案 2 :(得分:0)

我会创建一个具有名称和值属性的对象数组。这将很好地导出到CSV。

请记住我在手机上写这个,我稍后会在我的ISE中查看它,但我已经修改了下面的代码:

$users=Get-ADuser -SearchBase "OU=testou1,dc=US,dc=ITOPS,dc=COM" -Filter * -properties samaccountname,lastlogondate,Created    

$array = @() #declare the array outside the loop

$forloop = foreach($user in $users) {    
$arrayrow = New-Object System.Object
     $arrayrow | Add-Member -type NoteProperty -name User -value $user.samaccountname    
      $arrayrow | Add-Member -type NoteProperty -name Created -value  $user.created    
    $arrayrow | Add-Member -type NoteProperty -name LastLogonDate -value $user.lastlogondate    
  $array += $arrayrow
    }    
$array | export-csv  -notype c:\bin\exporting.csv