2015-05-06 2 views
1

Здравствуйте, я новичок в Powershell и создал довольно сложный код для себя и обнаружил, что их больше, чем один способ, которым я мог бы написать это, например:Нужна помощь в понимании метода Powershell

$DayLimit = (Get-Date).AddDays(-8) 
$Date = Get-Date -Format yyyyMMdd 
$Path = Get-ChildItem G:\VLTNAS1_Backup\Active\Nightly\ -Force | 
Where-Object { $_.PSIsContainer -eq $True -and $_.CreationTime -lt $DayLimit } 

или

ForEach ($Folder in $Path) 
{ 
if($Folder.PSIsContainer -eq $True -and $Folder.CreationTime -lt $DayLimit) 
{ 
Write-Host $Folder 
} 
} 

У меня есть 2 вопроса: во-первых, я тестировал оба метода с помощью Write-Host, и они печатают результаты по-разному.

Самый первый пример с условиями будучи вложенными в переменную является то, что они получили напечатан в одной строке, например: Test1 TEST2 Test3

Второй метод я использовал результаты получили напечатан в одной колонке, например, :

Test1

Test2

Test3

Почему?

Мой последний вопрос - в чем отличие от использования этих двух методов - создание условий, вложенных в переменную более мощную или наоборот. Я просто пытаюсь узнать больше о powershell и принять любую помощь или критику, спасибо.

ответ

1

В первом примере вы назначаете весь вывод $ Path, и на выходе просто не содержится никаких строк, так что все они переходят в одну строку. Во втором примере каждое имя папки выводится отдельно с помощью write-host, а write-host создает новую строку каждый раз при ее запуске.

Ни один из методов не является особенно более мощным, по сути, но если это длинный сценарий, который, вероятно, потребует изменений в будущем, часто намного легче понять, что происходит в скрипте, избегая конвейерных команд. В вашем примере это не так много, поэтому это не очень важно, но если у вас есть несколько проверок и вложенных циклов, вы, вероятно, захотите иметь более читаемый код, чтобы легче было отлаживать и обслуживать.

+0

Большое спасибо, что было очень информативно :) –

Смежные вопросы