Copy-item

Advantages of using the PassThru Parameter

Many cmdlets in PowerShell have a PassThru parameter. Cmdlets that typically return nothing can return the objects they are manipulating using the PassThru parameter. This cmdlet is no different. When I first started scripting, I never used this parameter because I didn’t feel I needed to.

For example, if I wanted to copy a file to a remote location and then reference that file later on in my script I’d do something like this:

This method works but it can be better. Instead of defining a variable for the remote path, why not just capture the object that gets returned from cmdlet when using the parameter instead? The objects returned will always have the destination file path.

Создание командлетов PowerShell на основе конечной точки OData с помощью ODataUtils

Модуль ODataUtils позволяет создавать командлеты PowerShell на базе конечных точек REST, которые поддерживают OData. Модуль Microsoft.PowerShell.ODataUtils включает следующие компоненты:

  • Передача дополнительных сведений с серверной конечной точки на сторону клиента
  • Поддержки разбивки на страницы на стороне клиента
  • Фильтрация на стороне сервера с помощью параметра Select
  • Поддержка заголовков веб-запросов

Командлеты прокси-сервера, созданные командлетом , предоставляют дополнительные сведения из конечной точки OData на стороне сервера в потоке Information.

В следующем примере мы получаем данные о самом популярном продукте и записываем выходные данные в переменную .

Указав параметр IncludeTotalResponseCount, мы получаем общее число всех записей Product, доступных на сервере.

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

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

Командлет и созданные на его основе командлеты прокси-сервера теперь поддерживают параметр Headers. Заголовок может использоваться для передачи дополнительных сведений, ожидаемых конечной точкой OData.

В следующем примере в параметр Headers передается хэш-таблица, содержащая ключ подписки. Это типичный пример для служб, которые ожидают ключ подписки для проверки подлинности.

Устранение проблем политики и предпочтений

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

Изменение политики выполнения для Import-PSSession и Import-Module

Командлеты и создают модули, которые содержат неподписанные файлы скриптов и файлы форматирования.

Чтобы импортировать модули, созданные этими командлетами, с помощью или , политика выполнения в текущем сеансе не может быть ограничена или AllSigned. Дополнительные сведения о политиках выполнения PowerShell см. в разделе about_Execution_Policies.

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

Например, следующая команда запускает процесс с политикой выполнения. Изменение политики выполнения влияет только на текущий процесс и не изменяет параметр реестра PowerShell ExecutionPolicy .

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

Дополнительные сведения о политиках выполнения см. в разделе about_Execution_Policies. Для получения дополнительных сведений введите .

Как задать и изменить квоты

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

В базовой конфигурации доступны следующие квоты.

  • Поставщик WSMan (WSMan:) предоставляет несколько параметров квот, таких как параметры максенвелопесизекб и макспровидеррекуестс в узле, а также параметры максконкуррентоператионс, свойств maxconcurrentoperationsperuser и MaxConnections в узле.

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

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

При конфликте квот с помощью команды PowerShell создает ошибку.

Чтобы устранить эту ошибку, измените удаленную команду так, чтобы она соответствовала квоте. Или определите источник квоты, а затем увеличьте квоту, чтобы завершить выполнение команды.

Например, следующая команда увеличивает квоту размера объекта в конфигурации сеанса Microsoft. PowerShell на удаленном компьютере с 10 МБ (значение по умолчанию) до 11 МБ.

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

Дополнительные сведения о WS-Management квотах см. в разделе about_WSMan_Provider.

Устранение ошибок времени ожидания

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

В базовой конфигурации доступны следующие тайм-ауты.

  • Поставщик WSMan (WSMan:) предоставляет несколько параметров времени ожидания на стороне клиента и службы, например параметр макстимеаутмс в узле и параметры енумератионтимеаутмс и макспаккетретриевалтимесекондс в узле.

  • Защитить локальный компьютер можно с помощью параметров канцелтимеаут, IdleTimeout, OpenTimeout и OperationTimeout командлета и переменной предпочтений.

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

Если значение времени ожидания не позволяет завершить операцию, PowerShell завершает операцию и создает ошибку.

Чтобы устранить эту ошибку, измените команду для завершения в течение интервала времени ожидания или определите источник предельного времени ожидания и Увеличьте интервал времени ожидания, чтобы завершить выполнение команды.

Например, следующие команды используют командлет для создания объекта параметра сеанса со значением OperationTimeout , равным 4 минутам (в мс), а затем используйте объект параметра сеанса для создания удаленного сеанса.

Дополнительные сведения об истечении времени ожидания WS-Management см. в разделе справки по поставщику WSMan (тип ).

Дополнительные сведения о командлете см. в разделе New-PSSessionOption.

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

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

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

PS> Get-Location

Path
----
C:\Documents and Settings\PowerUser

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

Push-Location -Path "Local Settings"

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

Push-Location -Path Temp

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

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

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

PS> Pop-Location -PassThru

Path
----
C:\Documents and Settings\PowerUser

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

Set-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.

Что такое Windows PowerShell?

Прежде чем мы углубимся в PowerShell, давайте сначала ответим на другой вопрос: «Что такое оболочка?»

Оболочка — это компьютерная программа, которая принимает команды с клавиатуры, интерпретирует их и передает их операционной системе для выполнения. По сути, он действует как интерфейс между вами и операционной системой. Он может быть основан на графическом интерфейсе пользователя (GUI ) или может быть построен поверх CLI (интерфейса командной строки).

Хотя оболочка существует с момента выпуска операционной системы Multics в 1969 году, Windows представила ее версию, Shell, в ноябре 1985 года. Это была базовая оболочка, которая была полезна для управления файлами и называлась MS-DOS Executive. Затем последовала разработка этой базовой оболочки, но всегда требовалось что-то более мощное.

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

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

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

Что такое командлет PowerShell?

Теперь, когда вы знакомы с PowerShell, давайте рассмотрим один из наиболее важных аспектов PowerShell: командлет .

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

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

Подобно Get-Help , Get-Command — это еще один командлет, который можно использовать для устранения различных проблем из оболочки. В частности, он показывает все команды, установленные в вашей системе. Отображаемые команды включают командлеты, функции, псевдонимы, фильтры, сценарии и приложения. При использовании с параметрами он покажет вам все конкретные команды, связанные с этим параметром.

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

С другой стороны, Get-Command с параметром ListImported будет получать команды только из текущих сеансов.

Получение списка сетевых дисков и их удаление

Мы можем получить список сетевых дисков используя обе команды модуля:

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

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

Команды удаления отличаются только наличием параметра ‘UpdateProfile’. Если он присутствует в команде ‘Remove-SMBMapping’, то диск не будет восстанавливать соединение после перезагрузки компьютера. В случае с Remove-PSDrive это предусмотрено автоматически:

Force удаляет подключение без подтверждения.

Управление сетевыми коммутаторами с помощью PowerShell

Командлеты сетевых коммутаторов, представленные в WMF 5.0, позволяют применять конфигурацию коммутатора, виртуальной локальной сети и портов базового сетевого коммутатора уровня 2 к сетевым коммутаторам, прошедшим сертификацию для Windows Server 2012 R2. Эти командлеты позволяют осуществлять следующее.

  • Глобальная конфигурация коммутаторов, например следующее.

    • Задание имени узла
    • Задание баннера параметров
    • Сохранение конфигурации
    • Включение и отключение функции
  • Конфигурация виртуальной локальной сети:

    • Создание или удаление виртуальной ЛС
    • Включение или отключение виртуальной ЛС
    • Перечисление виртуальной ЛС
    • Указание понятного имени для виртуальной ЛС
  • Конфигурация портов уровня 2:

    • Перечисление портов
    • Включение или отключение портов
    • Задание свойств и режимов портов
    • Добавление или сопоставление виртуальной ЛС с режимом магистрали или доступа для порта

Дополнительные сведения см. в статье документации NetworkSwitchManager.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Звездочка () соответствует нулю или большему количеству вхождений любого символа.

  • Знак вопроса () соответствует ровно одному символу.

  • Открывающая квадратная скобка () и закрывающая квадратная скобка () заключают в себя набор символов для сопоставления.

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

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

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

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

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

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

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

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

Такое выражение, как , найдет все библиотеки DLL, которые отвечают этим условиям, но вам может потребоваться дополнительно отфильтровать файлы и пропустить все файлы win32. Эти файлы можно пропустить с помощью параметра Exclude с шаблоном .

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

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

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

Результаты не возвращены, так как подстановочный знак указан как часть пути. Хотя команда и была рекурсивной, командлет ограничил элементы до тех, которые находятся в папке Windows с именами, заканчивающимися на .

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

Параметры удаленного взаимодействия PowerShell по умолчанию

Удаленное взаимодействие PowerShell (и WinRM) прослушивают следующие порты:

  • HTTP — 5985;
  • HTTPS — 5986.

По умолчанию функция удаленного взаимодействия PowerShell допускает подключения только от участников группы «Администраторы».
Сеансы запускаются в контексте пользователя, поэтому все элементы управления доступом операционной системы, примененные к отдельным пользователям и группам, продолжают применяться к ним при подключении через удаленное взаимодействие PowerShell.

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

Предупреждение

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

Просмотр

  1. Как включить удаленное взаимодействие PowerShell?
  2. Какая команда PowerShell используется для запуска интерактивного сеанса с удаленным компьютером?
  3. В чем преимущество использования сеанса удаленного взаимодействия PowerShell по сравнению с простым указанием имени компьютера с помощью каждой команды?
  4. Можно ли использовать сеанс удаленного взаимодействия PowerShell с сеансом удаленного взаимодействия «один к одному»?
  5. Чем отличается тип объектов, возвращаемых командлетами, от типа объектов, которые возвращаются при выполнении этих же командлетов на удаленных компьютерах с ?

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

Если необходимо изменить определенную запись в разделе реестра, можно использовать один из нескольких подходов. Этот пример изменяет запись Path в разделе . Запись Path указывает расположение для поиска исполняемых файлов.

  1. Получите текущее значение записи Path с помощью .
  2. Добавьте новое значение, отделив его с помощью .
  3. Используйте  с указанным разделом, именем записи и значением, чтобы изменить запись реестра.
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path += ";C:\src\bin\"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath

Примечание

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

Другой вариант — использовать средство командной строки Reg.exe. Для получения справки по reg.exe введите reg.exe /? . в командной строке.

В следующем примере запись Path изменяется за счет удаления пути, добавленного в предыдущем примере.  по-прежнему используется для получения текущего значения, исключая анализ строки, возвращаемой . Методы SubString и LastIndexOf используются для получения последнего добавленного пути в запись Path.

$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path.SubString(0, $value.Path.LastIndexOf(';'))
reg add HKCU\Environment /v Path /d $newpath /f
The operation completed successfully.

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

Если необходимо получить конкретную запись в разделе реестра, можно использовать один из нескольких возможных подходов. Этот пример получает значение DevicePath в .

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

Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
               Microsoft\Windows\CurrentVersion
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\
               Microsoft\Windows
PSChildName  : CurrentVersion
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry
DevicePath   : C:\WINDOWS\inf

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

 Примечание

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

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

reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath
! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
    DevicePath  REG_EXPAND_SZ   %SystemRoot%\inf

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

(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf

Psexec

Пожалуй, это первое, что приходит на ум, когда идет речь об удаленном запуске программ. Утилита от Марка Руссиновича используется еще со времен Windows NT и до сих пор применяется. Помимо основной функции, можно использовать ее и как Runas, и для запуска программ в пользовательской сессии терминального сервера. Psexec также позволяет задавать ядра процессора, на которых будет запускаться программа, и ее приоритет в системе.

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

В файле computers.txt находится список компьютеров. Для запуска по всему домену можно использовать \\*. В файле \\server\share\log.txt будут появляться имена рабочих станций или серверов без обновления. Если в домене существуют компьютеры с *nix на борту или нет доступа к административному сетевому ресурсу Admin$ ― команда на этой машине не выполнится, но обработка продолжится. Чтобы скрипт не зависал при каждой попытке подключения, можно задать тайм-аут с помощью ключа -n.

Если компьютер выключен ― мы об этом не узнаем. Поэтому лучше предварительно проверять доступность машин или собирать в файле информацию об успешном или неудачном выполнении.

К минусам Psexec можно отнести то, что она из-за своего удобства и популярности часто используется вирусописателями. Поэтому антивирусные системы могут обнаруживать утилиту как опасность вида remote admin.

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

Пример 4

C:\PS>get-childitem -path . -recurse -include *.txt | move-item -destination C:\TextFiles

Описание
-----------
Эта команда рекурсивно перемещает все текстовые файлы из текущего каталога и вложенных в него каталогов в каталог C:\TextFiles. 

Эта команда с помощью командлета Get-ChildItem извлекает все дочерние элементы с расширением "*.txt" из текущего каталога (обозначенного точкой (.)) и вложенных в него каталогов. В данной команде для обеспечения рекурсивности извлечения используется параметр Recurse, а параметр Include позволяет извлечь только TXT-файлы.

Оператор конвейера (|) пересылает результаты данной команды командлету Move-Item, который перемещает текстовые файлы в папку TextFiles.

Если имена перемещаемых в каталог "C:\Textfiles" файлов совпадают, командлет Move-Item отображает сообщение об ошибке и продолжает работу; при этом в каталог "C:\Textfiles" перемещается только один файл с данным именем. Другие файлы остаются в своих исходных каталогах.

Если каталог Textfiles (или любой другой элемент пути назначения) не существует, команда завершается с ошибкой. Отсутствующий каталог не будет создан даже в случае использования параметра Force. Командлет Move-Item перемещает первый элемент в файл "Textfiles" и отображает сообщение об ошибке, указывающее, что файл уже существует. 

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






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

Удалить вложенные элементы можно с помощью командлета , однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. Например, при попытке удаления папки , которая содержит другие элементы, 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?
 Yes   Yes to All   No   No to All   Suspend   Help
(default is "Y"):

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

Remove-Item -Path C:\temp\DeleteMe -Recurse

Справка или помощь по Windows PowerShell

В PowerShell есть различные командлеты для получения той или иной справки. Но наиболее важный из них это: Get-Help

Введите в консоли команды:

И получите два различных описания, которые дополняют друг-друга, того как пользоваться справкой.

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

Например:

  • powershell -command Get-Help Get-Help — общая справка по командлету Get-Help
  • powershell -command get-help Get-Help -examples — примеры того, как можно использовать командлет get-help
  • powershell -command get-help Get-Help -detailed — подробная справка по командлету get-help
  • powershell -command get-help Get-Help -full — наиболее полная справка по командлету get-help

winintro.ru/windowspowershellhelp.ru/ — справка в виде html-книги

Параметры командлетов powershell

-ErrorAction — параметр присутствует во всех командлетах, позволяет задать действие выполняемое при возникновении ошибки:

  • Continue — вывести сообщение об ошибке и продолжить выполнение
  • SilentlyContinue — проигнорировать ошибку и продолжить
  • Stop — при первой же ошибке прервать выполнение
  • Inquire — при возникновении ошибки вывести запрос что делать дальше

Пример: Copy-Item «d:\test1\klbackup*» «d:\test2\» -ErrorAction stop

-WhatIf — отображает сообщение, в котором описан результат команды, без фактического ее выполнения.  Присутствует во всех командлетах.

get-help about_CommonParameters — описание параметров, которые могут использоваться с любым командлетом.

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

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

Set-Location -Path C:\Windows

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

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:\

Тот же метод работает для дисков Windows PowerShell, которые не являются дисками файловой системы, например HKLM: . В реестре в качестве расположения можно задать раздел HKLM\Software путем ввода следующего кода:

PS> Set-Location -Path HKLM:\SOFTWARE -PassThru

Path
----
HKLM:\SOFTWARE

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

PS> Set-Location -Path .. -PassThru

Path
----
HKLM:\

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

cd -Path C:\Windows
chdir -Path .. -PassThru
sl -Path HKLM:\SOFTWARE -PassThru

Копирование файлов между сессиями

Copy-Item — копирование файлов на удаленный ПК. На целевой машине должна работать служба удаленного управления WinRM, которая конфигурируется одной командой:

Enable-PSRemoting

Для подключения к машине в доверенном домене больше ничего не требуется.

В рабочей группе надо на своем ПК добавить целевой компьютер в доверенные узлы по имени ПК или IP-адресу:

#добавить ПК в доверенные узлы
Set-Item wsman:localhost\client\trustedhosts -value "192.168.1.113"
#убрать ПК из доверенных узлов
#Set-Item wsman:localhost\client\trustedhosts -value ""

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

$rs = New-PSSession -ComputerName 192.168.1.113 -Credential test-pc\vadim
Copy-Item -Path "C:\temp\my.csv" -Destination "C:\temp\" -ToSession $rs
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: