我有點奇怪的問題。或者也許不那麼奇怪。我必須爲PowerShell腳本實施「自定義清理」,以便爲我當前的項目構建一些獨特的配置(其中並不特別重要)。基本上,它拷貝了一堆從發佈目錄中的文件的與此代碼一些臨時目錄:爲什麼我的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 noob,用消防水帶喝水),但它適用於此目的,我將在稍後清理它。但是,當它執行到臨時目錄的初始副本時,它會在屏幕上寫入很多空白行,這並不理想,因爲我在執行此過程時顯示一條消息,以確保我們的CM不會嚇倒並認爲它打破了,但這條消息被空白的線條吹走了。你知道什麼可能導致這種情況,我怎麼解決這個問題?我使用PowerShell 2.0開箱即用,並且由於此項目的性質,我無法升級或獲得任何外部庫。多謝你們。
'New-Item'返回已創建的新項目的詳細信息。也許你可以用'[void](New-Item -ItemType directory -path $ CopyPath)'將其封裝,這將忽略返回的數據,但仍然創建文件夾。儘管這不應占空行。僅供參考,您沒有對先前存在的物品進行任何測試。在創建新項目或複製以防止錯誤之前,我會推薦諸如'Test-Path'之類的東西。這也是很好的編碼! – Matt 2014-09-19 18:41:48
我同意@Matt你或者需要用'[void]'前綴'New-Item'或者將它管道到'Out-Null'。至於測試現有路徑,由於您在使用後刪除路徑,我並不真正看到現有路徑的測試點。 – TheMadTechnician 2014-09-19 19:18:17
@TheMadTechnician儘管不太可能,如果它已經存在,New-Item-Item類型的目錄-path $ CopyPath將會失敗。儘管如此,腳本仍然應該繼續。 – Matt 2014-09-19 19:25:02