Рубрики
Powershell

Powershell файлы и папки

Основные команды для работы с файлами:

Get-PSDrive - покажет все диски системы

Set-Location c: - перейти на диск c: (или cd c:)

Get-Content - покажет содержимое объекта (Объектом может быть всё что угодно, например, файл) 

ls -filter "*.bat" | Get-Content - отобразить на экране текст, который содержится во всех файлах формата bat в папке.

Set-Content - записать/сохранить что либо

Get-Childitem c:\distr - отобразит содержимое директории 
Get-ChildItem -Force с:\distr -Recurse - отобразит содержимое директории с:\distr

ls -Recurce c:\distr - отобразит содержимое директории с:\distr  и всех ее каталогов

dir -Recurce c:\distr - отобразит содержимое директории с:\distr и всех ее каталогов

ls -Recurse C:\distr -Filter *.txt - отобразит содержимое директории с:\distr и всех ее каталогов где есть *.txt

Get-ChildItem -Path C:\Windows | Where {$_.extension -eq ".dll"} - покажет из c:\windows все файлы с *.dll

Поиск архивов:

Выполнит поиск архивов в папке D:\Backup, созданных после 1 мая 2011 года, 
размер которых  находится в диапазоне 10-100 Мб.
Опции Include и Exclude работают соответственно своим названиям т.е. 
первая включает а вторая исключает заданный фильтр из поиска.
Get-ChildItem -Path D:\Backup -Recurse -Include *.zip | Where-Object -FilterScript {($_.LastWriteTime -gt "2011-05-01") -and ($_.Length -ge 10mb) -and ($_.Length -le 100mb)}

Удаление \ Создание \ Переименование \Копирование:

Remove-Item - удалить объект (Объектом может быть всё что угодно, например, файл)
Remove-Item c:\trash -Recurse - удалить директорию и все ее содержимое

New-Item - создать новый объект (Объектом может быть всё что угодно, например, файл)
New-Item -Path ‘с:\New Folder’ -ItemType "directory" - создаем директорию
New-Item -Path ‘c:\file.tzt’ -ItemType "file" - создаем файл

Rename-Item - переименовать обьект (Объектом может быть всё что угодно, например, файл)
Rename-Item .\File.txt .\File.txt1 - переименовываем File.txt File.txt1 в текущем каталоге

Copy-Item - копировать объект (Объектом может быть всё что угодно, например, файл)
Copy-Item -Path c:\file.txt -Destination E:\file1.txt - копирование файла file.txt в file1.txt Force
Copy-Item -Path c:\file.txt -Destination E:\file1.txt -Force - копирование с перезаписью файла file.txt в file1.txt 

Пример с копированием:

Например, может быть задача поиска в лог файлах определенного выражения по 
маске ip-адреса «192.168.100.253» с последующим копированием найденного 
в папку D:\TEMP, вариантов множество, вот метод поиска:

$current = Get-Date
$Days = "-30"
$start = $current.AddDays($days)
Get-ChildItem D:\Logs —Filter *.log -Recurse | Where-Object {($_.LastWriteTime.Date -ge $Start.Date) -and ($_.LastWriteTime.Date -le $End.Date)} | Select-String "192.168.100.253" | Copy-Item -Destination D:\TEMP

Пример сценария удаления файла после 30 дней:

Можно придумать сценарий когда на файловой помойке 
требуется из определенной папки удалять все файлы и папки старше 30 дней.

$Path = "C:\temp"
$Days = "-30"
$CurrentDate = Get-Date
$OldDate = $CurrentDate.AddDays($Days)
Get-ChildItem $Path | Where-Object { $_.LastWriteTime -lt $OldDate } | Remove-Item

Пример сценария удаления файла после 30 дней

Или если вам требуется удалять все что есть в папке и в подпапках т.е. удаление еще и самих папок.

$Path = "C:\temp"
$Days = "-30"
$CurrentDate = Get-Date
$OldDate = $CurrentDate.AddDays($Days)
Get-ChildItem $Path -Recurse | Where-Object { $_.LastWriteTime -lt $OldDate } | Remove-Ite