Get-Item
Получает элемент, находящийся в заданном местоположении.
Синтаксис
Get-Item [-LiteralPath] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-UseTransaction] [<CommonParameters>] Get-Item [-Path] <string[]> [-Credential <PSCredential>] [-Exclude <string[]>] [-Filter <string>] [-Force] [-Include <string[]>] [-UseTransaction] [<CommonParameters>]
Описание
Командлет Get-Item возвращает элемент из заданного местоположения. Извлечение содержимого заданного элемента производится только при запросе всего содержимого с помощью подстановочного знака (*).
Командлет Get-Item используется поставщиками Windows PowerShell для перемещения по хранилищам данных разных типов.
Параметры
-Credential <PSCredential>
Задает учетную запись пользователя, который располагает разрешением для выполнения этого действия. По умолчанию используется значение «Текущий пользователь».
Введите имя пользователя, например «User01» или «Domain01\User01», или введите объект PSCredential, например объект, создаваемый командлетом Get-Credential. При вводе имени пользователя система запросит пароль.
Этот параметр не поддерживается ни одним из установленных с Windows PowerShell поставщиком.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
true (ByPropertyName) |
Принимать подстановочные знаки? |
false |
-Exclude <string[]>
Исключает указанные элементы. Значение этого параметра определяет значение параметра Path. Введите элемент пути или шаблон, например «*.txt». Подстановочные знаки разрешены.
Параметр Exclude действует только в том случае, если команда включает содержимое элемента, например «C:\Windows\*», где подстановочный знак определяет содержимое каталога «C:\Windows».
Обязательно? |
false |
Позиция? |
|
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
|
-Filter <string>
Задает фильтр с использованием формата или языка поставщика. Значение этого параметра определяет значение параметра Path. Синтаксис фильтра, в том числе использование подстановочных знаков, зависит от поставщика. Фильтры эффективнее других параметров, потому что поставщик применяет их при извлечении объектов (вместо использования Windows PowerShell для фильтрации извлеченных объектов).
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-Force
Позволяет командлету получать элементы, которые недоступны другими способами, например скрытые элементы. Реализация варьируется от поставщика к поставщику. Дополнительные сведения см. в разделе About_Providers. Даже при использовании параметра Force командлет не может переопределить ограничения безопасности.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-Include <string[]>
Извлекает только указанные элементы. Значение этого параметра определяет значение параметра Path. Введите элемент пути или шаблон, например «*.txt». Подстановочные знаки разрешены.
Параметр Include действует только в том случае, если команда включает содержимое элемента, например «C:\Windows\*», где подстановочный знак определяет содержимое каталога «C:\Windows».
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
|
Принимать подстановочные знаки? |
false |
-LiteralPath <string[]>
Задает путь к элементу. В отличие от значения параметра Path, значение параметра LiteralPath используется точно в том виде, в котором оно введено. Никакие символы не интерпретируются как подстановочные знаки. Если путь включает escape-символы, его нужно заключить в одиночные кавычки. Одиночные кавычки указывают оболочке Windows PowerShell, что никакие символы не следует интерпретировать как escape-символы.
Обязательно? |
true |
Позиция? |
1 |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
true (ByPropertyName) |
Принимать подстановочные знаки? |
false |
-Path <string[]>
Задает путь к элементу. Для получения элемента, находящегося в указанном местоположении, используется командлет Get-Item. Подстановочные знаки разрешены. Этот параметр обязателен, но его имя («Path») можно не указывать.
Для указания текущего местоположения используйте точку (.). Для указания всех элементов в текущем местоположении используйте подстановочный знак (*).
Обязательно? |
true |
Позиция? |
1 |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
true (ByValue, ByPropertyName) |
Принимать подстановочные знаки? |
false |
-UseTransaction
Включает команду в активную транзакцию. Этот параметр допустим, только если транзакция выполняется. Дополнительные сведения см. в разделе about_Transactions.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
<CommonParameters>
Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.
Ввод и вывод
Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.
Входные данные |
System.String Строку, содержащую путь, можно передать командлету Get-Item по конвейеру. |
Выходные данные |
Object Командлет Get-Item возвращает получаемые им объекты. Тип определяется типом объектов пути. |
Примечания
Командлет Get-Item также можно вызывать с помощью встроенного псевдонима «gi». Дополнительные сведения см. в разделе About_Aliases.
Командлет Get-Item не имеет параметра Recurse, так как он извлекает только элемент, а не его содержимое. Для рекурсивного извлечения содержимого элемента используется командлет Get-ChildItem.
При работе с реестром для извлечения разделов реестра используется командлет Get-Item, а для извлечения параметров и значений реестра используется командлет Get-ItemProperty. Параметры реестра являются свойствами раздела реестра.
Командлет Get-Item предназначен для работы с данными, предоставляемыми любым поставщиком. Чтобы получить список поставщиков, доступных в текущем сеансе, введите команду «Get-PsProvider». Дополнительные сведения см. в разделе About_Providers.
Пример 1
C:\PS>get-item . Directory: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 7/26/2006 10:01 AM ps-test Описание ----------- Эта команда извлекает текущий каталог. Точка (.) обозначает элемент в текущем местоположении (но не его содержимое).
Пример 2
C:\PS>get-item * Directory: C:\ps-test Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 7/26/2006 9:29 AM Logs d---- 7/26/2006 9:26 AM Recs -a--- 7/26/2006 9:28 AM 80 date.csv -a--- 7/26/2006 10:01 AM 30 filenoext -a--- 7/26/2006 9:30 AM 11472 process.doc -a--- 7/14/2006 10:47 AM 30 test.txt Описание ----------- Эта команда извлекает все элементы из текущего каталога. Подстановочный знак (*) обозначает все содержимое текущего элемента.
Пример 3
C:\PS>get-item C:\ Описание ----------- Эта команда возвращает текущий каталог диска C:. Извлекаемый объект представляет только каталог, но не его содержимое.
Пример 4
C:\PS>get-item C:\* Описание ----------- Эта команда возвращает элементы диска C:. Подстановочный знак (*) обозначает не только сам контейнер, но и все его элементы. Для отображения всего содержимого в оболочке Windows PowerShell используется одиночная звездочка (*) вместо традиционного сочетания "*.*". Шаблон интерпретируется посимвольно, поэтому при использовании сочетания "*.*" не будут извлекаться каталоги и файлы с именами, не содержащими точки.
Пример 5
C:\PS>(get-item C:\Windows).LastAccessTime Описание ----------- Эта команда извлекает свойство LastAccessTime каталога C:\Windows. LastAccessTime является одним из свойств каталогов файловой системы. Чтобы отобразить полный список свойств каталога, введите команду "(Get-Item <имя_ папки>) | Get-Member".
Пример 6
C:\PS>get-item hklm:\software\microsoft\powershell\1\shellids\microsoft.powershell\* Описание ----------- Эта команда отображает содержимое раздела реестра Microsoft.PowerShell. При использовании поставщика Registry Windows PowerShell для извлечения разделов и вложенных разделов реестра можно использовать командлет Get-Item, однако для извлечения параметров и значений реестра нужно использовать командлет Get-ItemProperty.
Пример 7
C:\PS>get-item c:\Windows\* -include *.* -exclude w* Описание ----------- Эта команда извлекает элементы каталога Windows, имена которых включают точку (.) и не начинаются с буквы "w". Эта команда может использоваться только в том случае, когда для указания содержимого элемента в путь включается подстановочный знак (*).
См. также
Windows PowerShell предоставляет пользователям четыре способа работы с файлами.
- Применение составных команд. Существует ряд команд, созданных специально для работы с файлами. При помощи этих команд вы можете управлять файлами и путями к файлам так, как если бы работали с содержанием файлов.
- Применение команд DOS. PowerShell полностью совместим с командами DOS. Таким образом, то, что вы можете сделать при использовании DOS, вы можете сделать и при помощи PowerShell. PowerShell признает даже команду xcopy.
- Использование инструментария управления Windows Management Instrumentation (WMI). WMI предлагает иной механизм для управления файлами (например, изменение файловых свойств, поиск или переименование файла). Лучше всего запускать команды WMI в удаленном режиме.
- Применение методов Microsoft. NET Framework. Пространство имен. NET System.IO доступно через командную строку PowerShell. Эта строка включает в себя классы System.IO.File и System.IO.FileInfo.
В данной статье я расскажу о командах, которые были созданы специально для файлов. Вот те команды, которые вы можете использовать для работы с файлами:
Get-ChildItem Get-Item Copy-Item Move-Item New-Item Remove-Item Rename-Item
Использование Get-ChildItem
Команда Get-ChildItem возвращает элементы, обнаруженные в одном или нескольких указанных местах. Местоположение может быть контейнером файловой системы, таким как каталог, или местом, показанным другим провайдером, таким как подраздел реестра или хранилище сертификатов. Вы можете задействовать параметр Recurse данной команды, чтобы добраться до элементов во всех подпапках.
Если использовать эту команду без параметров, она возвращает все дочерние элементы (такие как подпапки и файлы) в текущем местоположении. Например, если текущее местоположение – корневой каталог H, то запуская команду Get-ChildItem, вы получите результаты, похожие на те, что показаны на экране 1.
Экран 1. Результаты работы Get-ChildItem |
Используя параметры, вы можете получить информацию, которая вам нужна. Например, следующая команда возвращает все файлы. log в корневом каталоге C, включая подкаталоги:
Get-ChildItem C:\* -Include *.log -Recurse -Force
Как мы видим, эта команда использует параметры -Include, -Recurse и –Force. Параметр –Include служит для возвращения заданных элементов. Он поддерживает использование групповых символов и является идеальным для указания расширения имени файла. Параметр –Recurse дает PowerShell указание возвращать подпапки наряду с файлами. Параметр –Force добавляет скрытые и системные файлы к выходным данным.
После запуска этой команды вы, вероятно, получите обширный список сообщений об ошибках доступа. В зависимости от настроек и политик безопасности системы, доступ к некоторым каталогам (например, Recycle Bin, Start Menu, пользовательские папки) ограничен и их нельзя прочитать. Вы можете скрыть эти сообщения об ошибках, указав параметр -ErrorAction SilentlyContinue.
Следующая команда дает те же результаты, что и предыдущая, потому что параметр –Path понимает групповые символы:
Get-ChildItem -Path C:\*.log -Recurse -Force
Для некоторых параметров команд PowerShell имя параметра вы можете опустить, если знаете, что параметр находится в той позиции, которая нужна PowerShell. Так происходит при использовании параметра –Path команды Get-ChildItem. Таким образом, следующая команда выдаст тот же результат, что и предыдущая команда:
Get-ChildItem C:\*.log -Recurse -Force
Параметр –Path может принимать множественные аргументы, разделенные запятыми. Например, предположим, что вы хотите возвратить. log-файлы из двух мест: корневого каталога С и корневого каталога Н, последний является текущим (то есть местоположением по умолчанию). Для выполнения этого действия нужно указать значение C:\* для получения всех файлов журналов из корневого каталога С и значение * для получения всех файлов журналов из корневого каталога Н (поскольку корневая папка Н является местоположением по умолчанию, вам не нужно указывать H:\.). Необходимо разделить два аргумента запятой, например так:
Get-ChildItem C:\*, * -Include *.log -Force
В результатах примера на экране 2 обратите внимание на атрибут «h» в колонке Mode корневого каталога Н. Этот атрибут показывает, что файл ntuser.dat.LOG является скрытым. Это обнаруживается при помощи параметра –Force.
Экран 2. Вывод скрытых файлов |
Хотя в примерах это и не показано, вы можете обратиться к Get-ChildItem при помощи дополнительных имен, псевдонимов. Вот три встроенных псевдонима: dir (как в DOS команда dir), gci и ls (как команда ls в UNIX).
Использование команды Get-Item
Команда Get-Item возвращает заданные элементы из назначенных местоположений. Как и ChildItem, Get-Item может применяться для навигации по различным типам хранилищ данных. В отличие от Get-ChildItem, Get-Item не имеет местоположения по умолчанию, поэтому вы должны всегда предоставлять, как минимум, одно местоположение с помощью параметра –Path. Хотя сам параметр и нужен, указывать имя параметра не требуется. Например, вот простая команда, которая использует «точку» для возвращения информации о текущем каталоге (в данном случае корневая папка Н):
Get-Item.
Результаты показаны на экране 3. Команда Get-Item позволяет задействовать групповой символ * для возвращения всего содержимого элемента (то есть всех дочерних элементов). Например, следующая команда возвращает весь контент текущего каталога (в данном случае корневого каталога Н). Точка и символ звездочки могут быть использованы как компоненты в пути файла, но вы должны еще указать косую черту как разделитель папок:
Get-Item. \*
Экран 3. Использование Get-Item для вывода информации о текущей папке |
Результаты вы можете увидеть на экране 4. Важно понимать, что команды PowerShell, включая Get-Item, возвращают объекты. Команда Get-Item возвращает объекты System.IO.DirectoryInfo, которые содержат несколько методов и свойств, которые вы можете использовать. Чтобы увидеть эти методы и свойства, можно передать результаты команды Get-Item в команду Get-Member. Если вы хотите увидеть эти свойства, можете запустить такую команду:
Get-Item. | Get-Member -MemberType Property
Экран 4. Использование Get-Item для вывода всего содержимого текущей папки |
Как показано на экране 5, свойство LastAccessTime возвращает дату и время, когда к указанному каталогу был в последний раз осуществлен доступ.
Экран 5. Изучение свойств объекта System.IO.DirectoryInfo |
Например, если вы хотите выяснить, когда к текущему каталогу был осуществлен доступ в последний раз, вы запускаете команду:
(Get-Item. ).LastAccessTime
Заметим, что в этой команде вызов Get-Item. заключен в круглые скобки и что между закрывающей круглой скобкой и LastAccessTime стоит точка. Круглые скобки вокруг вызова «Get-Item. » нужны для того, чтобы возвращенные объекты сохранялись в памяти и вы могли бы выполнять с ними дополнительные операции. В этом случае операцией является поиск возвращаемого значения свойства LastAccessTime объекта. В PowerShell вы используете символ точки для получения доступа к ряду свойств объекта и методов. Вот почему следует вставить точку между закрывающейся скобкой и LastAccessTime.
Существует коллекция специальных свойств, которая называется NoteProperty. Вы можете применять ее для того, чтобы сузить выводимые результаты для определенного типа объекта. Вы можете использовать Get-Member с параметром -MemberType NoteProperty, чтобы узнать о специальных свойствах этой коллекции:
Get-Item. | Get-Member -MemberType NoteProperty
Если вы запустите эту команду, то обнаружите, что коллекция возвращает шесть свойств: PSChildName, PSDrive, PSIsContainer, PSParentPath, PSPath и PSProvider. Свойство PSIsContainer коллекции NoteProperty показывает, является ли объект контейнером (папкой). Свойство возвращает True, когда объект является папкой, и False, когда он является файлом. Вы можете использовать это свойство для ограничения вывода Get-Item папками:
Get-Item C:\* | Where-Object { $_.PSIsContainer }
Давайте обсудим эту команду подробнее. Ее результаты показаны на экране 6. Вы передаете по конвейеру весь контент корневого каталога С команде Where-Object, которая позволяет отфильтровать объекты. В этом случае вы используете PSIsContainer из NoteProperty для фильтрации выходных данных, и, таким образом, возвращаются только каталоги. Автоматическая переменная $_ представляет каждый файловый объект, как только он передается команде по конвейеру.
Экран 6. Ограничение вывода команды Get-Item только папками |
Как и в случае с Get-ChildItem, вы можете обращаться к Get-Item по дополнительному имени. У Get-Item есть одно встроенное дополнительное имя: gi.
Использование Copy-Item
Команда Copy-Item является реализацией в PowerShell команды copy bp DOS и команды cp из UNIX. Но помимо этого, Copy-Item сконструирован для работы с данными, выдаваемыми любым провайдером. Первыми двумя параметрами команды являются -Path (вы используете его для указания элемента, который хотите скопировать) и –Destination (вы применяете его для указания места, в которое хотите скопировать этот элемент). Они позиционные, поэтому имена параметров можно опустить. Например, следующая команда копирует файл test.txt из папки C:\Scripts в папку C:\Backups\Scripts:
Copy-Item C:\Scripts\test.txt C:\Backups\Scripts
Параметр –Path принимает групповые символы, поэтому вы можете копировать несколько файлов сразу. Например, следующая команда копирует все файлы в папке C:\Scripts в папку C:\Backups\Scripts:
Copy-Item C:\Scripts\* C:\Backups\Scripts
Чтобы получить более детальное управление операцией копирования, вы можете задействовать параметры -Recurse, -Filter и –Force. Так, следующая команда копирует все файлы. txt, содержащиеся в C:\Scripts в C:\Temp\Text:
Copy-Item -Path C:\Scripts -Filter *.txt -Recurse ` -Destination C:\Temp\Text
Обратите внимание, что «обратная кавычка» в конце первой строки является символом продолжения строки в PowerShell.
Немного освоившись, вы можете вставить свойство FullName в параметр –Path для копирования тщательно отобранного списка файловых объектов, используя либо Get-Item, либо команду Get-ChildItem:
Get-ChildItem C:\* -include *.txt | Where-Object { $_.PSIsContainer -eq $false -and ` $_.LastAccessTime -gt ($(Get-Date).AddMonths(-1))} | ForEach-Object { Copy-Item $_.FullName C:\Temp}
На самом деле это предложение является комбинацией трех отдельных команд. Первая команда (то есть команда в первой строке) возвращает все файлы. txt в корневом каталоге С. Вторая команда (команда во второй и третьей строках) вычленяет список текстовых файлов таким образом, что содержит только те файловые объекты, чье свойство LastAccessTime больше, чем месяц назад. Третья команда (команда в последней строке) вставляет каждое файловое имя в свойство –Path, располагающееся в Copy-Item, используя команду ForEach-Object. Слишком сложно для вас? Тогда можете принять входные данные по конвейеру. Только убедитесь, что вы указали имя параметра –Destination так, чтобы Copy-Item знала, что делать с этими входными данными, так как данный параметр находится не в ожидаемой позиции:
Get-ChildItem C:\* -Include *.log | Copy-Item -Destination C:\Temp
Хотя в наших примерах это и не показано, вы можете обратиться к Copy-Item через дополнительные имена. Существует три псевдонима: copy, cp, cpi.
Использование Move-Item
Move-Item очень похожа на Copy-Item. Фактически, если вы заменяете Copy-Item на Move-Item в любой из команд, представленных в предыдущем разделе, команды будут вести себя во многом так же, за исключением того, что исходные файлы будут удалены в исходную папку.
Однако есть одно важное различие. Если вы запустите одну и ту же команду Copy-Item дважды, то обнаружите, что PowerShell переписывает существующий файл в папку назначения без какого-либо предупреждения.
Move-Item более осторожна в этом смысле и вместо удаления выдает ошибку. Например, если вы запускаете команду
Get-ChildItem C:\* -Include *.txt | Where-Object ` { $_.LastAccessTime -gt ($(Get-Date).AddMonths(-1))} | ForEach-Object { Move-Item $_.FullName C:\Temp}
то получите ошибку Cannot create a file («нельзя создать файл»), так как файл уже существует. Использование параметра –Force приводит к тому, что Move-Item переписывает существующий файл.
Помимо параметра –Force, вы можете задействовать параметры Recurse и –Filter в команде Move-Item, чтобы настраивать ее. Например, следующая команда перемещает текстовые файлы в папке C:\Scripts и ее подпапках в папку C:\Temp\Text. В данном случае вам нужно указать имя параметра –Destination, поскольку вы не используете этот параметр в той позиции, где его ожидает PowerShell:
Move-Item C:\Scripts -Filter *.txt -Recurse ` -Destination C:\Temp\Text
Как и Copy-Item, Move-Item имеет три псевдонима: move, mv и mi.
Использование New-Item
New-Item играет двойную роль — создателя каталога и файла (кроме того, она может создавать разделы и параметры реестра). Когда вы хотите создать файл, вам нужно указать параметры –Path и –ItemType. Как было показано выше, параметр –Path является позиционным, таким образом, не требуется имя параметра –Path, когда вы задаете путь и имя (то есть путь к файлу) сразу же после имени команды. Также следует указать параметр –ItemType при помощи флажка»file«. Вот пример:
New-Item 'C:\Documents and Settings\Nate\file.txt' ` -ItemType»file«
Параметр –Path может принимать массив строк так, что вы можете создавать несколько файлов за раз. Вам просто нужно разделить пути при помощи запятых. Вдобавок, необходимо вставить сначала параметр -ItemType»file«, который означает, что вам нужно указать имя параметра –Path, поскольку он теперь не первый параметр после имени команды:
New-Item -ItemType»file«-Path»C:\Temp\test.txt«, ` »C:\Documents and Settings\Nate\file.txt«, ` »C:\Test\Logs\test.log«
Если файл с точно таким же именем пути файла уже существует, вы получите ошибку. Однако вы можете указать параметр –Force так, что New-Item перепишет существующий файл.
Что на самом деле примечательно, так это то, что New-Item позволяет вставлять текст в файл посредством параметра –Value:
New-Item 'C:\Documents and Settings\Nate\file.txt' ` -ItemType»file«-Force ` -Value»Here is some text for my new file.«
Не забудьте указать параметр –Force, если файл уже существует. Иначе система выдаст ошибку.
Параметр –Value может принимать ввод данных по конвейеру, что является отличным способом перенаправлять вывод данных других команд в файл. Вам нужно просто конвертировать выходные объекты в строку, используя Out-String (если вы этого не сделаете, New-Item создаст новый файл для каждого объекта). Например, следующая команда возвращает информацию обо всех файлах из корневого каталога С, конвертирует информацию о файлах в строку, а затем пишет эту информацию в файл H:\C Listing.txt:
Get-ChildItem C:\* | Out-String | New-Item -Path»H:\C Listing.txt«-ItemType»file«-Force
New-Item имеет только одно встроенное дополнительное имя: ni.
Использование Remove-Item
Remove-Item навсегда удаляет ресурс с указанного диска, то есть она не перемещает его в корзину. Таким образом, если вы используете Remove-Item для удаления файла, то нет иного способа вернуть его, кроме как через программу восстановления файлов.
Вы указываете, какой файл должна удалять Remove-Item при помощи параметра –Path. Он позиционный, поэтому вам не нужно указывать имя параметра –Path, если оно идет сразу же за именем команды. Например, вот команда для удаления файла test.txt, который был ранее скопирован в папку C:\Backups\Scripts:
Remove-Item»C:\Backups\Scripts\test.txt«
Давайте рассмотрим другой пример. Следующая команда удаляет все файлы. txt (что указано в параметре –Include) в папке C:\Scripts, кроме тех файлов, которые имеют слово test где-либо в файловом имени (что указано в параметре –Exclude):
Remove-Item C:\Scripts\* -Include *.txt -Exclude *test*
Будучи, по сути, опасным инструментом, Remove-Item предоставляется с парой элементов защиты. Прежде всего, если вы пытаетесь удалить все из папки, которая содержит непустые подпапки, вы получите запрос на подтверждение Confirm. Например, предположим, что C:\Scripts содержит непустые подпапки и вы запускаете такую команду:
Remove-Item C:\Scripts\*
Нужно подтвердить, что вы хотите удалить непустые подпапки, как показано на экране 7.
Экран 7. Запрос на подтверждение удаления при использовании Remove-Item |
Если вы хотите запустить сценарий, который использует Remove-Itemм для удаления всего содержимого папок, включая содержимое подпапок, вам нужен способ запускать Remove-Item без участия пользователя. Этот способ – включение флажка –Recurse.
Второй элемент защиты – это параметр –WhatIf. Если вы включаете его в команду Remove-Item, то PowerShell покажет, какие элементы будут удалены, вместо того, чтобы просто удалить их. В силу деструктивной природы операций удаления, имеет смысл выполнять пробное применение команды Remove-Item с параметром –WhatIf, как здесь:
Remove-Item c:\* -Recurse -WhatIf
Результаты примера показаны на экране 8. Заметьте, что результаты могут включать в строку сообщение об ошибке Cannot remove the item at ‘C:\Users’ because it is in use. Такая ситуация возникает, если текущая рабочая папка является подпапкой каталога, которую вы пытаетесь удалить (в примере – подпапка корневого каталога С).
Экран 8. Применение Remove-Item с параметром -WhatIf Parameter |
Что касается дополнительных имен, то Remove-Item стоит особняком. У него шесть псевдонимов: del, erase, rd, ri, rm и rmdir.
Использование Rename-Item
Команда Rename-Item используется, когда вы хотите переименовать ресурс внутри пространства имен, предоставленного провайдером PowerShell. Первый параметр Rename-Item – это –Path, а второй параметр -NewName. Параметр –NewName, как и следовало ожидать, задает новое имя ресурса. Если Rename-Item обнаруживает не только имя, но и путь, он выдаст ошибку. Например, если вы хотите сменить имя файла C Listing.txt из корневого каталога Н на имя c_listing.txt, вам потребуется запустить такую команду:
Rename-Item -Path»H:\C Listing.txt«-NewName c_listing.txt
Поскольку -Path и -NewName являются позиционными параметрами, вы можете пропускать имена параметров до тех пор, пока они находятся в ожидаемых позициях:
Rename-Item»H:\C Listing.txt" c_listing.txt
У Rename-Item есть одно ограничение – параметр –NewName ожидает одной строки без групповых символов. Однако вы можете обойти это требование, перечисляя элементы в каталоге. Вам нужно просто направить по конвейеру выходные данные команде Get-ChildItem в параметр –Path и указать параметр –NewName.
Например, следующая команда перечисляет все файлы в текущем каталоге и переименовывает каждый файл, заменяя все пробелы в файловых именах на подчеркивания:
Get-ChildItem * | Where-Object {! $_.PSIsContainer } | Rename-Item -NewName { $_.name -replace ' ','_' }
Давайте посмотрим, как работает эта команда. Выходные данные Get-ChildItem попадают в Where-Object, которая фильтрует выходные данные так, что возвращаются только файлы. Это достигается путем использования PSIsContainer из NoteProperty с логическим оператором -not (!) (в качестве альтернативы вы могли бы взять $_.PSIsContainer -eq $false, как это было сделано в предыдущем примере). Отфильтрованные выходные данные (файловые объекты) попадают в Rename-Item. Значение параметра –NewName в Rename-Item является блоком сценария. Этот блок будет выполнен перед командой Rename-Item. В блоке сценария автоматическая переменная $_ представляет каждый файловый объект, так как он попадает в команду через контейнер. Оператор сравнения –replace заменяет пробелы в каждом имени файла (‘ ‘) на символ подчеркивания (‘_’). Заметьте, что вы можете использовать выражение ‘\s’ для указания пробела, поскольку первый параметр принимает регулярные выражения. Даже скрытые файлы могут быть переименованы благодаря параметру –Force.
Rename-Item имеет два псевдонима: ren и rni.
Великолепная семерка
В данном руководстве я познакомил вас со способами взаимодействия PowerShell с файлами. В частности, мы изучили встроенные команды PowerShell, предназначенные для работы с файлами. Это Get-ChildItem, Get-Item, Copy-Item, Move-Item, New-Item, Remove-Item и Rename-Item.
Поделитесь материалом с коллегами и друзьями
Powershell Get-Member — это команда, которая возвращает все свойства и методы объекта. На мой взгляд, после понимания этого командлета, становится намного проще работать с PS.
Get-Member ничего не изменяет, он только показывает что содержится в объекте. Каждый результат каких-то действий формирует объект и для того что бы увидеть из чего он состоит нужно выполнить:
$a = "b"
$a | Get-Member
У каждого объекта в powershell есть метод GetType, который выводит тип данных (строка, число, дата и т.д.). В нашем случае очевидно, что это строка, но порой это бывает не ясно и можно это узнать подобным образом:
$a.GetType()
Свойства на английском Property, а методы Method и порой их бывает очень много, а нам нужно узнать только о конкретном типе. Что бы вывести все свойства выполните следующее:
$a = "test"
$a | Get-Member -MemberType Property
В нашем случае мы видим только один Property, но чаще их бывает больше. Length выводит в powershell длину строки. Вызывается аналогично:
$a.Length
Powershell Get-Member на примере свойств и методов файла
Получим список файлов из любой директории подобным образом:
Get-ChildItem -Path 'C:\Folder2\' | Get-Member
Мы можем увидеть, что некоторые методы похожи на командлеты PS. Например выделенный мною будет делать примерно то же (без расширенных возможностей), что и Remove-Item:
Выполнить этот метод мы можем так:
(Get-ChildItem -Path 'C:\Folder2\').Delete()
Есть так же метод, который проверит существование файла. Для примера у нас может создаваться бэкап по определенному пути и мы хотим проверять что планировщик выполнил эту задачу. Мы можем проверить через powershell наличие файла используя Exist:
(Get-Item C:\Folder2\file1.txt).Exists
У файлов много свойств и для примера я хочу получить разные даты файлов в powershell. Я знаю, что все даты хранятся в типах данных datetime и по этому значению я могу отфильтровать:
Get-ChildItem -Path 'C:\Folder2\' | Get-Member -MemberType Property | where -Property Definition -Like "*datetime*"
И затем вывести:
Get-ChildItem -Path 'C:\Folder2\' | fl -Property *Time*
Изменим одну из дат:
$file = Get-Item -Path 'C:\Folder2\file1.txt'
$date = (Get-Date).AddDays(-15)
$file.CreationTime = $date
Примеры работ с Get-Date были тут.
Есть так же свойство, которое покажет расширение файла в powershell:
(Get-ChildItem -Path 'C:\Folder2\').Extension
…Теги: #powershell
Управление дисками и файлами
Получение текущего расположения (Get-Location)
Чтобы определить путь к текущему каталогу, введите команду Get-Location.
PS> Get-Location Path —- C:\Documents and Settings\PowerUser
PS> Get-Location Path —- C:\Documents and Settings\PowerUser |
Примечание
Командлет Get-Location аналогичен команде pwd в оболочке BASH. Командлет Set-Location аналогичен команде cd в Cmd.exe.
Настройка текущего расположения (Set-Location)
Команда Get-Location используется с командой Set-Location. Команда Set-Location позволяет вам указать расположение текущего каталога.
Set-Location -Path C:\Windows
Set-Location -Path C:\Windows |
Обратите внимание, что после ввода команды вы не получите прямого отклика о действии команды. Большинство команд Windows PowerShell, выполняющих действия, практически не создают выходных данных, так как выходные данные не всегда полезны. Чтобы проверить успешность внесения изменения в каталог при вводе команды Set-Location, укажите параметр -PassThru при вводе команды Set-Location.
PS> Set-Location -Path C:\Windows -PassThru Path —- C:\WINDOWS
PS> Set-Location -Path C:\Windows -PassThru
Path —- C:\WINDOWS |
Параметр -PassThru можно использовать с некоторыми командами Set в Windows PowerShell для возврата сведений о результате, когда отсутствуют выходные данные по умолчанию.
Вы можете указать пути относительно текущего расположения так же, как и в большинстве командных оболочек UNIX и Windows. В стандартной нотации для относительных путей точка ( . ) представляет текущую папку, а две точки ( .. ) — родительский каталог текущего расположения.
Например, если вы находитесь в папке C:\Windows, точка ( . ) представляет C:\Windows, а две точки ( .. ) представляют C: . Текущее расположение можно изменить на корень диска C: путем ввода следующей команды:
PS> Set-Location -Path .. -PassThru Path —- C:\
PS> Set-Location -Path .. -PassThru
Path —- C:\ |
Тот же метод работает для дисков Windows PowerShell, которые не являются дисками файловой системы, например HKLM: . В реестре в качестве расположения можно задать раздел HKLM\Software путем ввода следующего кода:
PS> Set-Location -Path HKLM:\SOFTWARE -PassThru Path —- HKLM:\SOFTWARE
PS> Set-Location -Path HKLM:\SOFTWARE -PassThru
Path —- HKLM:\SOFTWARE |
После этого можно изменить расположение каталога на родительский каталог, который является корнем диска Windows PowerShell HKLM: с помощью относительного пути:
PS> Set-Location -Path .. -PassThru Path —- HKLM:\
PS> Set-Location -Path .. -PassThru
Path —- HKLM:\ |
Вы можете ввести Set-Location или использовать любой из встроенных псевдонимов Windows PowerShell для Set-Location (cd, chdir, sl). Пример:
sl -Path HKLM:\SOFTWARE -PassThru
sl -Path HKLM:\SOFTWARE -PassThru |
Сохранение и отзыв последних расположений (Push-Location и Pop-Location)
При изменении расположения полезно отслеживать свое предыдущее расположение и иметь возможность вернуться к нему. Командлет Push-Location в Windows PowerShell создает упорядоченный журнал («стек») путей к каталогам, которые вы открывали, чтобы можно было вернуться по нему на шаг назад, используя дополнительный командлет Pop-Location.
Например, Windows PowerShell обычно запускается в корневом каталоге пользователя.
PS> Get-Location Path —- C:\Documents and Settings\PowerUser
PS> Get-Location
Path —- C:\Documents and Settings\PowerUser |
Чтобы передать текущее расположение в стек, а затем переместить его в папку локальных параметров, введите:
Push-Location -Path «Local Settings»
Push-Location -Path «Local Settings» |
После этого можно передать расположение локальных параметров в стек и переместить его в папку Temp, введя следующее:
Чтобы убедиться, что каталоги изменены, введите команду Get-Location.
PS> Get-Location Path —- C:\Documents and Settings\PowerUser\Local Settings\Temp
PS> Get-Location
Path —- C:\Documents and Settings\PowerUser\Local Settings\Temp |
После этого можно перейти в последний открытый каталог, введя команду Pop-Location, и проверить изменение, введя команду Get-Location.
PS> Pop-Location PS> Get-Location Path —- C:\Documents and Settings\me\Local Settings
PS> Pop-Location PS> Get-Location
Path —- C:\Documents and Settings\me\Local Settings |
Как и в случае с командлетом Set-Location, можно включить параметр -PassThru при вводе командлета Pop-Location, чтобы открыть указанный каталог.
PS> Pop-Location -PassThru Path —- C:\Documents and Settings\PowerUser
PS> Pop-Location -PassThru
Path —- C:\Documents and Settings\PowerUser |
Кроме того, можно использовать командлеты расположения с сетевыми путями. Если у вас есть сервер FS01 с общей папкой Public, можно изменить расположение, введя
Set-Location \\FS01\Public
Set-Location \\FS01\Public |
или диспетчер конфигурации служб
Push-Location \\FS01\Public
Push-Location \\FS01\Public |
Чтобы изменить расположение на любой доступный диск, можно использовать команды Push-Location и Set-Location. Например, если у вас есть локальный дисковод компакт-дисков с буквой диска D, содержащий компакт-диск с данными, вы можете изменить расположение на него, введя команду Set-Location D: .
Если дисковод пуст, вы получите следующее сообщение об ошибке:
PS> Set-Location D: Set-Location : Cannot find path ‘D:\’ because it does not exist.
PS> Set-Location D: Set-Location : Cannot find path ‘D:\’ because it does not exist. |
Работа с файлами и папками. Получение списка файлов и папок, содержащихся в папке.
Извлечь все элементы непосредственно из папки можно с помощью командлета Get-ChildItem
. Для отображения скрытых и системных элементов добавьте необязательный параметр Force. Например, эта команда отображает непосредственное содержимое диска C Windows PowerShell (которое совпадает с содержимым физического диска C Windows):
Get-ChildItem -Path C:\ -Force
Get-ChildItem -Path C:\ -Force |
Эта команда выводит только элементы, содержащиеся на диске непосредственно, так же как и команда DIR
оболочки Cmd.exe
или команда ls
оболочки UNIX. Для показа вложенных элементов необходимо также указать параметр -Recurse
. (Время выполнения этой операции будет очень велико.) Для вывода всего содержимого диска C введите:
Get-ChildItem -Path C:\ -Force -Recurse
Get-ChildItem -Path C:\ -Force -Recurse |
Командлет Get-ChildItem
позволяет отфильтровать элементы с помощью параметров Path, Filter, Include и Exclude, но обычно осуществляется лишь фильтрация по имени. Сложную фильтрацию на основе других свойств элементов можно выполнить с помощью Where-Object
.
Следующая команда находит все исполняемые файлы в папке Program Files, которые были в последний раз изменены после 1 октября 2005 г. и размер которых не менее одного мегабайта и не более десяти мегабайт:
Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe | Where-Object -FilterScript {($_.LastWriteTime -gt ‘2005-10-01’) -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)}
Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe | Where-Object -FilterScript {($_.LastWriteTime -gt ‘2005-10-01’) -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)} |
Копирование файлов и папок
Копирование выполняется с помощью командлета Copy-Item
. Следующая команда создает резервную копию C:\boot.ini в C:\boot.bak:
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak |
Если целевой файл уже существует, то попытка копирования завершается неудачей. Чтобы перезаписать имеющийся целевой файл, используйте параметр Force.
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak -Force
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak -Force |
Эта команда работает, даже если целевой объект доступен только для чтения.
Так же выполняется и копирование папок. Эта команда копирует папку C:\temp\test1
в новую папку C:\temp\DeleteMe
рекурсивно.
Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe
Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe |
Можно также скопировать избранные элементы. Следующая команда копирует все файлы TXT, содержащиеся в папке C:\data
, в папку C:\temp\text
:
Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text
Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text |
Для копирования элементов файловой системы можно использовать и другие средства. В Windows PowerShell по-прежнему работают команды XCOPY, ROBOCOPY и такие COM-объекты, как Scripting.FileSystemObject. Например, можно воспользоваться COM-классом Scripting.FileSystem сервера сценариев Windows для создания резервной копии файла C:\boot.ini
в файле C:\boot.bak
:
(New-Object -ComObject Scripting.FileSystemObject).CopyFile(‘C:\boot.ini’, ‘C:\boot.bak’)
(New-Object -ComObject Scripting.FileSystemObject).CopyFile(‘C:\boot.ini’, ‘C:\boot.bak’) |
Создание файлов и папок
Создание новых элементов осуществляется одинаковым образом всеми поставщиками Windows PowerShell. Если поставщик Windows PowerShell поддерживает более одного типа элементов (например, поставщик Windows PowerShell FileSystem различает каталоги и файлы), необходимо указать тип элемента.
Эта команда создает папку C:\temp\New Folder
:
New-Item -Path ‘C:\temp\New Folder’ -ItemType Directory
New-Item -Path ‘C:\temp\New Folder’ -ItemType Directory |
Эта команда создает пустой файл C:\temp\New Folder\file.txt
.
New-Item -Path ‘C:\temp\New Folder\file.txt’ -ItemType File
New-Item -Path ‘C:\temp\New Folder\file.txt’ -ItemType File |
Важно!
При использовании параметра Force с командой New-Item
для создания папки, которая уже существует, она не перезапишет и не заменит папку. Будет просто возвращен имеющийся объект папки. Однако, если использовать New-Item -Force
в уже имеющимся файле, файл будет полностью перезаписан.
Удаление всех файлов и папок, содержащихся в папке
Удалить вложенные элементы можно с помощью командлета Remove-Item
, однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. Например, при попытке удаления папки C:\temp\DeleteMe
, которая содержит другие элементы, Windows PowerShell предварительно предложит подтвердить удаление этой папки:
Remove-Item -Path C:\temp\DeleteMe Confirm The item at C:\temp\DeleteMe has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is «Y»):
Remove-Item -Path C:\temp\DeleteMe
Confirm The item at C:\temp\DeleteMe has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is «Y»): |
Если подтверждение для каждого вложенного элемента нежелательно, задайте параметр Recurse:
Remove-Item -Path C:\temp\DeleteMe -Recurse
Remove-Item -Path C:\temp\DeleteMe -Recurse |
Подключение локальной папки как диска
Отобразить локальную папку можно с помощью команды New-PSDrive
. Следующая команда создает локальный диск P:
, корневым каталогом которого является локальный каталог Program Files, отображающийся только в сеансе PowerShell:
New-PSDrive -Name P -Root $env:ProgramFiles -PSProvider FileSystem
New-PSDrive -Name P -Root $env:ProgramFiles -PSProvider FileSystem |
Как и при использовании сетевых дисков, диски, отображенные в Windows PowerShell, немедленно становятся доступными оболочке Windows PowerShell. Чтобы создать подключенный диск, отображающийся в проводнике, нужен параметр -Persist
. Но с этим параметром можно использовать только удаленные пути.
Чтение текстового файла в массив
Одним из наиболее общих форматов хранения текстовых данных является файл, отдельные строки которого рассматриваются как отдельные элементы. Командлет Get-Content
используется для чтения всего файла за один шаг, как показано далее:
PS> Get-Content -Path C:\boot.ini [boot loader] timeout=5 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=»Microsoft Windows XP Professional» /noexecute=AlwaysOff /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=» Microsoft Windows XP Professional with Data Execution Prevention» /noexecute=optin /fastdetect
PS> Get-Content -Path C:\boot.ini [boot loader] timeout=5 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=»Microsoft Windows XP Professional» /noexecute=AlwaysOff /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=» Microsoft Windows XP Professional with Data Execution Prevention» /noexecute=optin /fastdetect |
Командлет Get-Content
сразу рассматривает данные, считанные из файла, как массив с одним элементом на строку содержимого файла. Убедиться в этом можно, проверив свойство Length полученного содержимого:
PS> (Get-Content -Path C:\boot.ini).Length 6
PS> (Get-Content -Path C:\boot.ini).Length 6 |
Эта команда наиболее полезна для непосредственного ввода в Windows PowerShell информационных списков. Например, можно хранить в файле C:\temp\domainMembers.txt
список имен компьютеров или IP-адресов по одному имени на каждую строку файла. Вы можете использовать командлет Get-Content
, чтобы извлечь содержимое файла и поместить его в переменную $Computers
:
$Computers = Get-Content -Path C:\temp\DomainMembers.txt
$Computers = Get-Content -Path C:\temp\DomainMembers.txt |
Теперь переменная $Computers
представляет собой массив, содержащий в каждом элементе имя компьютера.
Работа с файлами, папками и разделами реестра
Перечисление файлов, папок и разделов реестра (Get-ChildItem)
Так как получение коллекции элементов из определенного расположения является обычной задачей, командлет Get-ChildItem разработан специально для возврата всех элементов, найденных в контейнере, например в папке.
Если необходимо вернуть все файлы и папки, которые находятся непосредственно в папке C:\Windows, введите:
PS> Get-ChildItem -Path C:\Windows Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows Mode LastWriteTime Length Name —- ————- —— —- -a— 2006-05-16 8:10 AM 0 0.log -a— 2005-11-29 3:16 PM 97 acc1.txt -a— 2005-10-23 11:21 PM 3848 actsetup.log …
PS> Get-ChildItem -Path C:\Windows Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows
Mode LastWriteTime Length Name —- ————- —— —- -a— 2006-05-16 8:10 AM 0 0.log -a— 2005-11-29 3:16 PM 97 acc1.txt -a— 2005-10-23 11:21 PM 3848 actsetup.log … |
Списки выглядят аналогично тем спискам, которые появляются при вводе команды dir в Cmd.exe или команды ls в командной оболочке UNIX.
С помощью параметров командлета Get-ChildItem можно создавать очень сложные списки. Далее рассмотрим несколько сценариев. Синтаксис командлета Get-ChildItem можно увидеть, введя:
Get-Command -Name Get-ChildItem -Syntax
Get-Command -Name Get-ChildItem -Syntax |
Эти параметры можно скомбинировать и сопоставить для получения настраиваемых выходных данных.
Перечисление всех элементов в контейнере (-Recurse)
Чтобы увидеть оба элемента в папке Windows и все элементы во вложенных папках, используйте параметр Recurse для Get-ChildItem. В списке отображается все, что находится в папке Windows, а также элементы в ее вложенных папках. Пример:
PS> Get-ChildItem -Path C:\WINDOWS -Name addins AppPatch assembly …
PS> Get-ChildItem -Path C:\WINDOWS -Name addins AppPatch assembly … |
Принудительное перечисление скрытых элементов (-Force)
В выходных данных команды Get-ChildItem не отображаются элементы, которые обычно невидимы в проводнике или Cmd.exe. Чтобы показать скрытые элементы, используйте параметр Force для Get-ChildItem. Пример:
Get-ChildItem -Path C:\Windows -Force
Get-ChildItem -Path C:\Windows -Force |
Этот параметр называется Force, так как позволяет принудительно переопределить обычное поведение команды Get-ChildItem. Параметр Force широко используется для принудительного выполнения действия командлетом. Тем не менее, он не будет выполнять действия, компрометирующие систему безопасности.
Сопоставление имен элементов с подстановочными знаками
Команда Get-ChildItem допускает подстановочные знаки в пути к перечисляемым элементам.
Так как сопоставление с подстановочными знаками обрабатывается подсистемой Windows PowerShell, все командлеты, которые принимают подстановочные знаки, используют одну нотацию и имеют одно поведение сопоставления. В нотацию подстановочных знаков Windows PowerShell входит:
- Звездочка (*) — соответствует нулю или большему количеству вхождений любого символа.
- знак вопроса (?) — соответствует ровно одному символу;
- Открывающая квадратная скобка ([) и закрывающая квадратная скобка (]) — заключают в себя набор символов для сопоставления.
Далее приводится несколько примеров работы спецификации из подстановочных знаков.
Чтобы найти в каталоге Windows все файлы, имеющие суффикс .log и ровно пять символов в основном имени, введите следующую команду:
PS> Get-ChildItem -Path C:\Windows\?????.log Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows Mode LastWriteTime Length Name —- ————- —— —- … -a— 2006-05-11 6:31 PM 204276 ocgen.log -a— 2006-05-11 6:31 PM 22365 ocmsn.log … -a— 2005-11-11 4:55 AM 64 setup.log -a— 2005-12-15 2:24 PM 17719 VxSDM.log …
PS> Get-ChildItem -Path C:\Windows\?????.log
Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows Mode LastWriteTime Length Name —- ————- —— —- … -a— 2006-05-11 6:31 PM 204276 ocgen.log -a— 2006-05-11 6:31 PM 22365 ocmsn.log … -a— 2005-11-11 4:55 AM 64 setup.log -a— 2005-12-15 2:24 PM 17719 VxSDM.log … |
Чтобы найти в каталоге Windows все файлы с именами, начинающимися на букву x, введите:
Get-ChildItem -Path C:\Windows\x*
Get-ChildItem -Path C:\Windows\x* |
Чтобы найти все файлы с именами, начинающимися на x или z, введите:
Get-ChildItem -Path C:\Windows\[xz]*
Get-ChildItem -Path C:\Windows\[xz]* |
Исключение элементов (-Exclude)
Вы можете исключить определенные элементы с помощью параметра Exclude для Get-ChildItem. Это позволит вам выполнить сложную фильтрацию в одном операторе.
Например, предположим, что вы пытаетесь найти библиотеку службы времени Windows в папке System32 и все, что вам известно об имени библиотеки, — то, что оно начинается на W и содержит «32».
Выражение w*32*.dll найдет все библиотеки DLL, удовлетворяющие условию, но может также вернуть библ
Get-Item — PowerShell — SS64.com
Get-Item — PowerShell — SS64.comПолучить файл / объект реестра (или любой другой объект пространства имен)
Синтаксис Get-Item {[-path] строка [] | [-literalPath] строка []} [-include строка []] [-exclude строка []] [-фильтр строка ] [-force] [-credential PSCredential ] [-UseTransaction] [ CommonParameters ] ключ путь строка Путь (и) к предметам.Подстановочные знаки разрешены. Используйте точку (.), Чтобы указать текущее местоположение. Используйте подстановочный знак (*), чтобы указать все элементы в текущем местоположении. -literalPath строка Как и Path выше, только значение используется в точности как введено. Никакие символы не интерпретируются как символы подстановки. Если путь включает в себя escape-символы затем заключают путь в одинарные кавычки. -включить строку Включить только указанные элементы из пути.например "Май*" это работает только тогда, когда путь содержит подстановочный знак. исключить строка Пропустить указанные элементы из пути, например "* SS64 *" это работает только тогда, когда путь содержит подстановочный знак. -фильтр строка Фильтр в формате или языке провайдера. Точный синтаксис фильтра (поддержка подстановочных знаков и т. Д.) Зависит от поставщика. Фильтры более эффективны, чем -include / -exclude, потому что поставщик применяет фильтр при получении объектов, а не PowerShell фильтрует объекты после их получения.-force Отменить ограничения, которые мешают выполнению команды, кроме из настроек безопасности. например Force создаст каталоги файловых путей или переопределить атрибут «только для чтения», но не изменит права доступа к файлам. PSCredential Используйте учетные данные для проверки доступа к файлу. мандат представляет имя пользователя, такое как «User01» или «Domain01 \ User01», или PSCredential объект, например, полученный с помощью командлета Get-Credential.Если вы введете имя пользователя, вам будет предложено ввести пароль. Этот параметр не поддерживается никакими основными командлетами или поставщиками PowerShell. -UseTransaction Включите команду в активную транзакцию.
Стандартные псевдонимы для Get-Item: gi
Get-Item получит ключи и подразделы реестра, но вы должны использовать Get-ItemProperty для получения значений и данных реестра.
В PowerShell используйте одну звездочку (*) для получения содержимого вместо традиционной *.*
Формат интерпретируется буквально, поэтому *. * Не будет извлекать каталоги или имена файлов без точки.
Примеры
Получить текущий каталог. Это представляет элемент в текущем местоположении (не его содержимое).
PS C: \> get-item.
Получите корневой каталог диска C :. Это представляет только каталог, а не его содержимое:
PS C: \> получить элемент C: \
Получить все элементы в текущем каталоге.:
PS C: \> get-item *
Получить все предметы в С: диск:
PS C: \> get-item C: \ *
Список всех свойств C: \ Windows:
PS C: \> (Get-Item C: \ Windows) | Get-Member
Получите свойство LastAccessTime для C: \ Windows:
PS C: \> (получить элемент C: \ Windows) .LastAccessTime
Получить ключ реестра .:
PS C: \> get-item hklm: \ software \ microsoft \ exchange
Получите версию файла DLL:
PS C: \> (get-item «c: \ windows \ system32 \ vbscript.dll «). VersionInfo.FileVersion
5.812.10240.16384
PS C: \> (get-item «c: \ windows \ system32 \ jscript.dll»). VersionInfo.FileVersion
5.812.10240.16384
# Если хочешь, то вот, иди и возьми, но тебе лучше поторопиться, потому что это идет быстро # ~ Пол МакКартни
Связанные командлеты PowerShell:
Get-ChildItem — Получить дочерние элементы (содержимое папки или раздела реестра).
Clear-item — Удалить содержимое из переменной или псевдонима.
Copy-Item — Скопировать элемент из пространства имен.
Get-ItemProperty — Получить свойства объекта.
Invoke-item — вызвать исполняемый файл или открыть файл (START).
Переместить элемент — переместить элемент из одного места в другое.
New-item — Создать новый элемент в пространстве имен.
Set-item — Установить значение имени провайдера.
Удалить элемент — Удалить элемент.
Rename-item — изменить имя существующего элемента.
Авторское право © 1999-2020 SS64.ком
Некоторые права защищены ,Сортировка
— PowerShell: типы вывода Get-Item и Get-ChildItem
Переполнение стека- Товары
- Клиенты
- Случаи использования
- Переполнение стека Публичные вопросы и ответы
- Команды Частные вопросы и ответы для вашей команды
- предприятие Частные вопросы и ответы для вашего предприятия
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимать технический талант
- реклама Связаться с разработчиками по всему миру
PowerShell Get-Item
Windows PowerShell — командлет Get-Item
У PowerShell Get-ChildItem есть младшая сестра по имени Get-Item.
Темы — Примеры Get-Item
000
Пример из реальной жизни: список переменных среды
Наша задача — перечислить все переменные среды. Например, если мы хотим выяснить, в какой папке хранятся файлы профиля пользователя.
# Сценарий PowerShell для получения списка путей к переменным среды
Get-Item env:
Результат:
# Сценарий PowerShell для отображения списка переменных среды
Имя
—————————————————————
ALLUSERSPROFILE
APPDATA
CommonProgramFiles
CommonProgramFiles (x86)
CommonProgramW6432
COMPUTERNAME
COMSPEC
FP_NO_HOST_CHECK
HOMEDRIVE
HOMEPATH
LOCALAPPDATA
LOGONSERVER
NUMBER_OF_PROCESSORS
OS
Путь
PATHEXT
PROCESSOR_ARCHITECTURE
PROCESSOR_IDENTIFIER
PROCESSOR_LEVEL
PROCESSOR_REVISION
Programdata
ProgramFiles
ProgramFiles (x86 )
ProgramW6432
PSModulePath
PUBLIC
SystemDrive
SystemRoot
TEMP
TMP
USERDOMAIN
USERDOMAIN_ROAMINGPROFILE
ИМЯ ПОЛЬЗОВАТЕЛЯ
USERPROFILE
windir
Подробнее о Env:
Бесплатная пробная версия Network Performance Monitor (NPM) v11.5
Монитор производительности сети SolarWinds поможет вам выяснить, что происходит в вашей сети. Эта утилита также поможет вам в устранении неполадок; приборная панель укажет, является ли коренная причина неисправной ссылки, неисправного оборудования или перегрузки ресурса.
Что мне больше всего нравится, так это то, как NPM предлагает решения сетевых проблем. Он также имеет возможность отслеживать состояние отдельных виртуальных машин VMware. Если вы заинтересованы в устранении неполадок и создании сетевых карт, то я рекомендую вам попробовать NPM сейчас.
Загрузите бесплатную пробную версию монитора производительности сети Solarwinds
Исследуйте параметры Get-Item
# Параметры PowerShell Get-Item.
Clear-Host
Get-Help Get-Item -Full
Принципиальное различие между Get-Item и Get- Child Item заключается в том, что последний имеет параметр -Recurse.
Различия между Get-Item и Get-ChildItem
Get-Item возвращает информацию только об указанном объекте, тогда как Get-ChildItem перечисляет все объекты в контейнере.Взять, к примеру, диск C: \.
# Разница в PowerShell между Get-Item и Get-ChildItem.
Clear-Host
Get-Item C: \
Результат:
Режим LastWriteTime Длина Имя
—- ————- —— —-
д – ч 22.12.2012 13:22 C: \
Get-ChildItem будет перечислять все файлы и папки в C: \ Кстати, вы можете получить тот же эффект, добавив подстановочный знак.
Get-Item C: \ * аналогичен обычному Get-ChildItem C: \
Вывод:
Хотя поведение этих двух командлетов очень схоже, есть несколько отличий, которые могут застать вас врасплох.Я пришел к выводу, что придерживаюсь Get-ChildItem, мне еще предстоит найти убийственное применение более короткого Get-Item.
Найти псевдоним Get-Item
Get- Child У предмета есть известный псевдоним gci, но как насчет Get- Item ?
# Техника PowerShell для поиска псевдонима.
Clear-Host
Get-Alias -определение Get-Item
Результат: gi
Имя CommandType
————————
Alias gi -> Get-Item
См. Также, как PowerShell удаляет временные Файлы Windows.
Сводка по PowerShell Get-Item
Get-Item делает то, что говорит: а именно, возвращает свойства указанного объекта. В этом примере это позволяет нам исследовать переменные среды операционной системы.
Если вам понравилась эта страница, поделитесь ею с друзьями
См. Также Примеры Windows PowerShell для реальных задач
• Учебные пособия по PowerShell • Примеры PowerShell • IpConfig • Get-Counter • PowerShell NetSh
• Монитор Производительность — PowerShell • Temp PowerShell • PowerShell Удалить временные файлы
• PowerShell WOL (Wake-on-Lan) • Службы • Изменить компьютер Описание реестра
Пожалуйста, напишите мне, если у вас есть лучший пример сценария.Также, пожалуйста, сообщайте о любых фактических ошибках, грамматических ошибках или неработающих ссылках, я буду рад исправить ошибку.
.- Товары
- Клиенты
- Случаи использования
- Переполнение стека Публичные вопросы и ответы
- Команды Частные вопросы и ответы для вашей команды
- предприятие Частные вопросы и ответы для вашего предприятия
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимать технический талант
- реклама Связаться с разработчиками по всему миру
Загрузка…
- Авторизоваться зарегистрироваться
текущее сообщество
- Переполнение стека Помогите чат