powershell passthru что это

Управление текущим расположением

При навигации по системам папок в проводнике у вас обычно есть определенное рабочее расположение, т. е. текущая открытая папка. Элементами в текущей папке можно легко управлять, щелкая их. Когда в интерфейсе командной строки (например, Cmd.exe) открыта папка, в которой находится определенный файл, вы можете получить к нему доступ, указав короткое имя, а не вводить весь путь к файлу. Текущий каталог называется рабочим.

Windows PowerShell использует существительное Location для ссылки на рабочий каталог и реализует семейство командлетов для просмотра расположения и управления им.

Получение текущего расположения (Get-Location)

Чтобы определить путь к текущему каталогу, введите команду Get-Location :

Командлет Get-Location аналогичен команде pwd в оболочке BASH. Командлет Set-Location аналогичен команде cd в Cmd.exe.

Настройка текущего расположения (Set-Location)

Параметр PassThru можно использовать с некоторыми командами Set в Windows PowerShell для возврата сведений о результате, когда отсутствуют выходные данные по умолчанию.

После этого можно изменить расположение каталога на родительский каталог, который является корнем диска Windows PowerShell HKLM: с помощью относительного пути:

Вы можете ввести Set-Location или использовать любой из встроенных псевдонимов Windows PowerShell для Set-Location (cd, chdir, sl). Пример:

Сохранение и отзыв последних расположений (Push-Location и Pop-Location)

Например, Windows PowerShell обычно запускается в корневом каталоге пользователя.

Чтобы передать текущее расположение в стек, а затем переместить его в папку локальных параметров, введите:

После этого можно передать расположение локальных параметров в стек и переместить его в папку Temp, введя следующее:

Чтобы убедиться, что каталоги изменены, введите команду Get-Location :

Кроме того, можно использовать командлеты расположения с сетевыми путями. Если у вас есть сервер FS01 с общей папкой Public, можно изменить расположение, введя

Если дисковод пуст, вы получите следующее сообщение об ошибке:

В интерфейсе командной строки проводник неудобно использовать для просмотра свободных физических дисков. Также в проводнике будут показаны не все диски PowerShell. Windows PowerShell предоставляет набор команд для управления дисками Windows PowerShell, о которых речь пойдет далее.

Источник

Windows PowerShell: Такие разные пути к пользовательскому объекту

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

Недавно я сделал запись в своем блоге, где изложил двенадцать рекомендаций по использованию Windows PowerShell. Двенадцатая рекомендация предлагает разработчикам выводить в результате работы сценариев и функций объекты, а не текст. Я предложил активно использующим командлет Write-Host разработчикам остановиться и подумать, что же они делают. Командлет Write-Host не возвращает текст.

Вскоре после публикации этой записи ко мне обратился один читатель с вопросом о коде, который я собственно использовал для создания пользовательского объекта. Он сказал, что никогда не еще не встречался с таким подходом. Это неудивительно, потому что Windows PowerShell предоставляет десятки способов выполнения одной и той же задачи. Читатель предложил мне написать статью о различных способах создания пользовательских объектов, и это именно эта статья.

Полноформатный способ

Эту схему можно использовать для добавления любой другой информации в окончательный выходной объект до его записи в конвейер.

Первый способ можно сделать чуть более лаконичным, заставив Add-Member вернуть объект в конвейер:

Если строка заканчивается вертикальной чертой (|), Windows PowerShell ожидает увидеть в следующей физической строке следующую команду в конвейере. В сущности, это способ разбиения длинной команды на несколько строк. Этот прием вместе с параметром –PassThru превращает это в серию из трех разных команд.

Хеш-таблицы, вперед!

Описанные способы эффективны, но при этом «многословны». В сценарии бывает сложно визуально проследить, что происходит. New-Object предоставляет возможность решить задачу более лаконично. Это позволяет создать хеш-таблицу (или ассоциативный массив), содержащую имена свойств и значения, которые надо добавить ко вновь созданному объекту. Каждое из этих свойств автоматически создается как свойство NoteProperty:

Следующий вариант дает тот же результат, но более лаконичными средствами. Некоторые умные люди используют выражение со скобками, тогда оно становится еще короче. Однако я считаю, что это немного затрудняет чтение:

Еще один шажок

Это позволяет создать пользовательский формат для отображения вашего объекта. Я использовал этот прием с замечательными результатами в «Windows PowerShell Scripting and Toolmaking» (Concentrated Technology and Interface Technical Training, 2011), краткой книге, которую я написал и в которой рассказал о таких вещах, как использование пользовательских объектов для вывода данных из пользовательских средств Windows PowerShell.

На любой вкус и цвет…

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

Здесь фактически генерируются пользовательские свойства средствами синтаксиса, присущего этому конкретному командлету (и еще командлетам Format). Такой синтаксис обычно характерен для людей с программистским опытом. Для меня (и многих других) разбирать такой текст очень трудно, поэтому я стараюсь не писать в таком стиле.

Оболочка PowerShell ничто, если она не гибкая

Уникальность Windows PowerShell в том, что она позволяет делать некоторые по-настоящему дикие вещи. Вернемся к моему примеру с хеш-таблицами. Задачу можно решить и так:

Мораль: объекты, а не текст

Как бы вы не создавали свои пользовательские объекты, можно создавать объекты, а не возвращать в окно консоли простой текст. Объекты намного гибче и позволяют интегрировать код сценария или функции с любыми другими компонентами Windows PowerShell.

Источник

Примеры скриптов PowerShell для системного администрирования

Управление дисками и файлами

Получение текущего расположения (Get-Location)

Чтобы определить путь к текущему каталогу, введите команду Get-Location.

Командлет Get-Location аналогичен команде pwd в оболочке BASH. Командлет Set-Location аналогичен команде cd в Cmd.exe.

Настройка текущего расположения (Set-Location)

Команда Get-Location используется с командой Set-Location. Команда Set-Location позволяет вам указать расположение текущего каталога.

Обратите внимание, что после ввода команды вы не получите прямого отклика о действии команды. Большинство команд Windows PowerShell, выполняющих действия, практически не создают выходных данных, так как выходные данные не всегда полезны. Чтобы проверить успешность внесения изменения в каталог при вводе команды Set-Location, укажите параметр -PassThru при вводе команды Set-Location.

Параметр -PassThru можно использовать с некоторыми командами Set в Windows PowerShell для возврата сведений о результате, когда отсутствуют выходные данные по умолчанию.

Вы можете указать пути относительно текущего расположения так же, как и в большинстве командных оболочек UNIX и Windows. В стандартной нотации для относительных путей точка ( . ) представляет текущую папку, а две точки ( .. ) — родительский каталог текущего расположения.

После этого можно изменить расположение каталога на родительский каталог, который является корнем диска Windows PowerShell HKLM: с помощью относительного пути:

Вы можете ввести Set-Location или использовать любой из встроенных псевдонимов Windows PowerShell для Set-Location (cd, chdir, sl). Пример:

Сохранение и отзыв последних расположений (Push-Location и Pop-Location)

При изменении расположения полезно отслеживать свое предыдущее расположение и иметь возможность вернуться к нему. Командлет Push-Location в Windows PowerShell создает упорядоченный журнал («стек») путей к каталогам, которые вы открывали, чтобы можно было вернуться по нему на шаг назад, используя дополнительный командлет Pop-Location.

Например, Windows PowerShell обычно запускается в корневом каталоге пользователя.

Чтобы передать текущее расположение в стек, а затем переместить его в папку локальных параметров, введите:

После этого можно передать расположение локальных параметров в стек и переместить его в папку Temp, введя следующее:

Чтобы убедиться, что каталоги изменены, введите команду Get-Location.

После этого можно перейти в последний открытый каталог, введя команду Pop-Location, и проверить изменение, введя команду Get-Location.

Как и в случае с командлетом Set-Location, можно включить параметр -PassThru при вводе командлета Pop-Location, чтобы открыть указанный каталог.

Кроме того, можно использовать командлеты расположения с сетевыми путями. Если у вас есть сервер FS01 с общей папкой Public, можно изменить расположение, введя

или диспетчер конфигурации служб

Если дисковод пуст, вы получите следующее сообщение об ошибке:

Работа с файлами и папками. Получение списка файлов и папок, содержащихся в папке.

Следующая команда находит все исполняемые файлы в папке Program Files, которые были в последний раз изменены после 1 октября 2005 г. и размер которых не менее одного мегабайта и не более десяти мегабайт:

Копирование файлов и папок

Если целевой файл уже существует, то попытка копирования завершается неудачей. Чтобы перезаписать имеющийся целевой файл, используйте параметр Force.

Эта команда работает, даже если целевой объект доступен только для чтения.

Так же выполняется и копирование папок. Эта команда копирует папку C:\temp\test1 в новую папку C:\temp\DeleteMe рекурсивно.

Для копирования элементов файловой системы можно использовать и другие средства. В Windows PowerShell по-прежнему работают команды XCOPY, ROBOCOPY и такие COM-объекты, как Scripting.FileSystemObject. Например, можно воспользоваться COM-классом Scripting.FileSystem сервера сценариев Windows для создания резервной копии файла C:\boot.ini в файле C:\boot.bak :

Создание файлов и папок

Создание новых элементов осуществляется одинаковым образом всеми поставщиками Windows PowerShell. Если поставщик Windows PowerShell поддерживает более одного типа элементов (например, поставщик Windows PowerShell FileSystem различает каталоги и файлы), необходимо указать тип элемента.

Эта команда создает папку C:\temp\New Folder :

Удаление всех файлов и папок, содержащихся в папке

Если подтверждение для каждого вложенного элемента нежелательно, задайте параметр Recurse:

Подключение локальной папки как диска

Чтение текстового файла в массив

Одним из наиболее общих форматов хранения текстовых данных является файл, отдельные строки которого рассматриваются как отдельные элементы. Командлет Get-Content используется для чтения всего файла за один шаг, как показано далее:

Командлет Get-Content сразу рассматривает данные, считанные из файла, как массив с одним элементом на строку содержимого файла. Убедиться в этом можно, проверив свойство Length полученного содержимого:

Работа с файлами, папками и разделами реестра

Перечисление файлов, папок и разделов реестра (Get-ChildItem)

Так как получение коллекции элементов из определенного расположения является обычной задачей, командлет Get-ChildItem разработан специально для возврата всех элементов, найденных в контейнере, например в папке.

Если необходимо вернуть все файлы и папки, которые находятся непосредственно в папке C:\Windows, введите:

Списки выглядят аналогично тем спискам, которые появляются при вводе команды dir в Cmd.exe или команды ls в командной оболочке UNIX.

С помощью параметров командлета Get-ChildItem можно создавать очень сложные списки. Далее рассмотрим несколько сценариев. Синтаксис командлета Get-ChildItem можно увидеть, введя:

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

Перечисление всех элементов в контейнере (-Recurse)

Чтобы увидеть оба элемента в папке Windows и все элементы во вложенных папках, используйте параметр Recurse для Get-ChildItem. В списке отображается все, что находится в папке Windows, а также элементы в ее вложенных папках. Пример:

Фильтрация элементов по имени (-Name)

Чтобы отобразить только имена элементов, используйте параметр Name для Get-Childitem:

Принудительное перечисление скрытых элементов (-Force)

В выходных данных команды Get-ChildItem не отображаются элементы, которые обычно невидимы в проводнике или Cmd.exe. Чтобы показать скрытые элементы, используйте параметр Force для Get-ChildItem. Пример:

Этот параметр называется Force, так как позволяет принудительно переопределить обычное поведение команды Get-ChildItem. Параметр Force широко используется для принудительного выполнения действия командлетом. Тем не менее, он не будет выполнять действия, компрометирующие систему безопасности.

Сопоставление имен элементов с подстановочными знаками

Команда Get-ChildItem допускает подстановочные знаки в пути к перечисляемым элементам.

Так как сопоставление с подстановочными знаками обрабатывается подсистемой Windows PowerShell, все командлеты, которые принимают подстановочные знаки, используют одну нотацию и имеют одно поведение сопоставления. В нотацию подстановочных знаков Windows PowerShell входит:

Далее приводится несколько примеров работы спецификации из подстановочных знаков.

Чтобы найти в каталоге Windows все файлы, имеющие суффикс .log и ровно пять символов в основном имени, введите следующую команду:

Чтобы найти в каталоге Windows все файлы с именами, начинающимися на букву x, введите:

Чтобы найти все файлы с именами, начинающимися на x или z, введите:

Исключение элементов (-Exclude)

Вы можете исключить определенные элементы с помощью параметра Exclude для Get-ChildItem. Это позволит вам выполнить сложную фильтрацию в одном операторе.

Например, предположим, что вы пытаетесь найти библиотеку службы времени Windows в папке System32 и все, что вам известно об имени библиотеки, — то, что оно начинается на W и содержит «32».

Выражение w*32*.dll найдет все библиотеки DLL, удовлетворяющие условию, но может также вернуть библиотеки Windows 95 и библиотеки, совместимые с 16-разрядной версией Windows, в именах которых содержится «95» или «16». Файлы с такими числами в именах можно пропустить, используя параметр Exclude с шаблоном *[9516]* :

Смешение параметров Get-ChildItem

В одной команде можно использовать несколько параметров Get-ChildItem. Перед тем как комбинировать параметры, убедитесь, что понимаете принципы сопоставления подстановочных знаков. Например, следующая команда не возвращает результатов:

Результаты отсутствуют, даже если существуют две библиотеки, которые начинаются на букву z в папке Windows.

Чтобы указать рекурсивный поиск для файлов, имена которых соответствуют специальному шаблону, используйте параметр -Include.

Работа с записями реестра. Создание списков записей реестра.

Все свойства Windows PowerShell раздела имеют префиксы PS, например PSPath, PSParentPath, PSChildName и PSProvider.

Затем можно использовать нотацию *.* для текущего расположения, чтобы перечислить свойства без указания полного пути.

Получение одной записи реестра

Вместе с Get-ItemProperty используйте параметр Path, чтобы указать имя раздела и параметр Name, а также имя записи DevicePath.

Эта команда возвращает стандартные свойства Windows PowerShell, а также свойство DevicePath.

Хотя Get-ItemProperty содержит параметры Filter, Include и Exclude, их нельзя использовать для фильтрации по имени свойства. Эти параметры относятся к разделам реестра (путям элементов), а не записям реестра. Записи реестра — это свойства элементов.

Другой вариант — использовать средство командной строки Reg.exe. Для получения справки по reg.exe введите reg.exe /? в командной строке. Чтобы найти запись DevicePath, используйте reg.exe, как показано в следующей команде:

Также можно использовать объект WshShell COM, чтобы найти некоторые записи реестра, хотя этот метод не работает с большими двоичными данными или именами записей реестра, содержащими такие символы, как \. Добавьте имя свойства с разделителем «\» в путь элемента:

Настройка одной записи реестра

Хотя Set-ItemProperty содержит параметры Filter, Include и Exclude, их нельзя использовать для фильтрации по имени свойства. Эти параметры относятся в разделам реестра (путям элементов), а не к записям реестра (свойствам элементов).

Создание новых записей реестра

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

Значение PropertyType должно быть именем элемента перечисления Microsoft.Win32.RegistryValueKind из следующей таблицы:

ТАБЛИЦА 1

Значение PropertyTypeЗначение
Двоичные данныеДвоичные данные
DWordЧисло, которое является допустимым UInt32
ExpandStringСтрока, которая может содержать динамически раскрывающиеся переменные среды
MultiStringМногострочная строка
StringЛюбое строковое значение
QWord8 байтов двоичных данных

Запись реестра можно добавить в несколько расположений, указав массив значений для параметра Path:

Переименование записей реестра

Чтобы отобразить переименованное значение, добавьте параметр PassThru в команду.

Удаление записей реестра

Источник

Командлеты PowerShell для вывода данных

Обычно в процессе работы PowerShell генерируются некоторые выходные данные. Для вывода этих данных существуют специальные Out-командлеты (командлеты, название которых начинается с Out-). Когда выполняемая команда PowerShell возвращает данные, они передаются по конвейеру на вход Out-командлета, который обрабатывает их и отправляет в устройство вывода (на экран, в файл, на принтер и т.п.).

Для просмотра этих командлетов выполним команду:

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

Out-Host

Командлет Out-Host служит для вывода данных на экран. Например:

Get-Process powershell | Out-Host

Впрочем, добавлять Out-Host в конец команды совсем необязательно. В конце конвейера по умолчанию находится командлет Out-Default, который и перенаправляет все в Out-Host. Т.е. предыдущая команда эквивалентна команде:

Get-Process powershell | Out-Default

которая в свою очередь эквивалентна команде:

На самом деле механизм вывода еще запутаннее. Как вы помните, результатом работы PowerShell являются объекты. Out-командлеты не умеют работать с любыми объектами, а только со специальным типом объектов форматирования, поэтому при получении объекта вызывают один из командлетов форматирования (Format-*). Format-командлет предоставляет Out-командлету объекты форматирования, описывающие порядок построения выходных данных, а Out-командлет отправляет их в нужное устройство. Т.е. при выполнении команды:

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

Get-Process powershell | Format-Table | Out-Host

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

Хотя добавлять Out-Host в конец команды необязательно, но в некоторых случаях удобно. К примеру он имеет ключ Paging, с помощью которого можно организовать постраничный вывод:

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

Out-File

Командлет Out-File перенаправляет выходные данные в указанный файл, например:

Get-Process powershell | Out-File proc.txt

По умолчанию данные в файле перезаписываются. Запретить перезапись существующего файла можно, указав ключ NoClobber, а если необходимо дописывать данные в существующий файл, то можно использовать ключ Append, который добавляет данные в конец файла:

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

Для вывода в файл можно использовать сокращенный синтаксис. Например для записи:

Get-Process powershell >proc.txt

или для добавления в конец файла:

Get-Process powershell >>proc.txt

Out-GridView

Командлет Out-GridView выводит данные в виде графической таблицы, в которой их можно отфильтровать и отсортировать по нужному признаку. Для наглядности можно указать ключ Title, который будет отображаться в заголовке:

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

Начиная стретьей версии PowerShell Out-GridView поддерживает ключ PassThru, позволяющий передать полученные данные дальше по конвейеру. Например, можно вывести список процессов, в графической оснастке отобрать нужные и передать их командлету Stop-Process, который остановит выбранные процессы:

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

Out-Null

Командлет Out-Null используется в том случае, если выходные данные отображать не нужно. Он отправляет полученные данные в устройство NULL, т.е. удаляет их. Для примера возьмем такую команду:

Помимо основного действия (остановка процесса) она выводит много лишней информации. Чтобы избавится от нее, отправим вывод в Out-Null, например так:

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

Out-String

Командлет Out-String преобразует входные данные в массив строк. По сути Out-String преобразует объекты PowerShell в строки, с которыми дальше можно работать как с обычным текстом (форматировать, производить поиск и т.п.).

$a = Get-Process powershell
$a.GetType()

Как видно из примера, на входе Out-String тип данных Process, а на выходе String.

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

Out-String принципиально отличается от остальных out-командлетов. Поскольку обычные out-командлеты работают с конечным результатом предыдущих команд, то сами они не производят никаких выходных данных. Именно поэтому out-командлет обычно ставится последним в командной строке, ведь после него в конвейере не остается ничего, с чем могут работать другие командлеты.

В отличие от них Out-String принимает объекты, преобразует их в массив строк и передает дальше по конвейеру. По умолчанию данные накапливаются и возвращаются одной строкой, но с помощью ключа Stream можно указать вывод по отдельной строке для каждого объекта.

Для примера выведем список системных служб со всеми свойствами и отформатируем его в виде таблицы:

Поскольку ширина консоли граничена 80 символами, то большинство данных будет обрезано, что не очень здорово.

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

Чтобы не обрезать вывод, направим его в Out-String и увеличим ширину:

Теперь все данные попали на экран, но все равно выглядит не очень.

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

Исправим положение, передав вывод Out-String командлету Out-File:

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

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

Out-Printer

Командлет Out-Printer перенаправляет вывод на принтер. Например:

powershell passthru что это. Смотреть фото powershell passthru что это. Смотреть картинку powershell passthru что это. Картинка про powershell passthru что это. Фото powershell passthru что это

Вывод отправляется на принтер, заданный в системе по умолчанию. Для указания альтернативного принтера можно использовать ключ Name.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *