В настоящее время у меня есть следующий сценарий, который я запускаю в PowerShell. Я хочу получить список файлов в каталоге, в котором находится сценарий PS, мне нужны все файлы, для которых последняя измененная дата более 30 дней назад, а затем переместить их. Я не уверен, что я здесь делаю не так.
param (
[Parameter(Mandatory=$true)][string]$destinationRoot
)
$path = (Get-Item -Path ".\").FullName
Get-ChildItem $path\* -Include *.xlsx|
Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)}
Foreach-Object {
$content = $path + "\" + $_.Name
$year = (Get-Item $content).LastWriteTime.year.ToString()
$monthNumber = (Get-Item $content).LastWriteTime.month
$month = (Get-Culture).DateTimeFormat.GetMonthName($monthNumber)
$destination = $destinationRoot + "\" + $year + "\" + $month
New-Item -ItemType Directory -Force -Path $destination
Move-Item -Path $content -Destination $destination -force
}
Это был трюк, спасибо. Я новичок в PowerShell
Не стоит беспокоиться. Без конвейера выходные данные предыдущих команд не отправлялись в ForEach-Object, который затем обрабатывает каждый элемент в коллекции с помощью специальной автоматической переменной $_.





-f для строки формата$path-File для исключения каталога и -Filter для расширения фильтраВы можете исправить свой код следующим образом:
param (
[Parameter(Mandatory=$true)][string]$destinationRoot
)
Get-ChildItem -File -Filter "*.xlsx" | Where LastWriteTime -lt (Get-Date).AddDays(-10) | %{
$destination= "{0}\{1:yyyy\\MMMM}" -f $destinationRoot, $_.LastWriteTime
New-Item -ItemType Directory -Force -Path $destination
Move-Item $_.FullName -Destination $destination -Force
}
Вам не хватает вертикальной черты
|в конце вашегоWhere-Object.