为什么我的PowerShell脚本会将空行写入控制台?

时间:2014-09-19 18:31:42

标签: powershell powershell-v2.0

我有一个奇怪的问题。或者可能不那么奇怪。我必须为PowerShell脚本实现“自定义清理”,该脚本是为我当前项目构建一些独特配置而开发的(这些都不是特别重要)。基本上它使用以下代码将发布目录中的一堆文件复制到一些临时目录中:

$Paths = Get-ChildItem $ProjectPath -recurse |
         Where-Object { ($_.PSIsContainer -eq $true) -and
         (Test-Path($_.Fullname + 'bin\release')) } |
         Select-Object Fullname

ForEach ($Path in $Paths)
{
     $CopyPath = $Path.Fullname + '\bin\Temp'
     $DeletePath = $Path.Fullname + '\bin\Release'
     New-Item -ItemType directory -path $CopyPath
     Copy-Item $DeletePath $CopyPath -recurse
     Remove-Item $DeletePath Recurse
}

在构建之后将其复制回:

ForEach ($Path in $Paths)
{
    $CopiedPath = $Path.Fullname + '\bin\Temp\'
    $DeletedPath = $Path.Fullname + '\bin\Release\'
    $Files = Get-ChildItem $CopiedPath -recurse |
             where-object {-not $_PSIsContainer}
    ForEach ($File in $Files)
    {
        if(-not (Test-Path ($DeletedPath+$File.Name)))
        {
            Copy-Item $File.Fullname ($DeletedPath+$File.Name)
        }
    }
    Remove-Item $CopyPath -recurse -force
}

这是非常笨重和noobish(对不起,我是一个从消防水管喝的PowerShell菜鸟),但它的作用是为了这个目的,我会在以后清理它。但是,当它执行临时目录的初始复制时,它会在屏幕上写入大量空白行,这并不理想,因为我在执行此过程时会显示一条消息,以确保我们的CM不会出现异常情况并认为它破了,但这条消息被空白线吹走了。你知道这可能导致什么,以及我如何解决这个问题?我正在使用PowerShell 2.0开箱即用,由于这个项目的性质,我无法升级或获取任何外部库。谢谢你们。

1 个答案:

答案 0 :(得分:0)

如果您要做的唯一事情是清理控制台输出,那么您需要做的就是使用管道。您可以使用[void]启动命令,该命令将排除管道中的所有信息。您还可以将整个事物传递给Out-Null cmdlet,它将捕获所有输出,但没有输出的行除外。

默认情况下,New-Item cmdlet会将输出返回到我的Windows PowerShell版本(4.0)上的控制台。在以前的版本中可能不是这样,但我认为它是...... Remove-Item通常也不会返回任何输出。如果我要采取刺,我会使用上面提到的方法之一杀死使用“Item”名词的那些行的输出。