Примеры powershell: Пример кода Windows PowerShell — PowerShell

Содержание

Пример кода Windows PowerShell — PowerShell





Twitter




LinkedIn




Facebook




Адрес электронной почты










  • Статья


Windows PowerShell ® примеры доступны в Windows SDK. в этом разделе содержится пример кода, который содержится в примерах Windows SDK.

Примечание

при установке Windows SDK создается каталог samples , в котором доступны все образцы Windows PowerShell. типичный каталог установки — C:\Program Files\Microsoft sdks \ Windows \v6.0. запустите Windows PowerShell и введите «cd самплес\сисмгмт\повершелл» , чтобы перейти к каталогу Windows PowerShell samples. в этом документе каталог примеров Windows PowerShell называется <PowerShell Samples> .

Пример листинга кода

Пример кодаОписание
Пример кода AccessDbProviderSample01это поставщик, описанный в статье создание базового поставщика Windows PowerShell.
Пример кода AccessDbProviderSample02это поставщик, описанный в разделе создание поставщика Windows PowerShellного накопителя.
Пример кода AccessDbProviderSample03это поставщик, описанный в разделе создание поставщика Windows PowerShell элемента.
Пример кода AccessDbProviderSample04это поставщик, описанный в разделе создание поставщика контейнера Windows PowerShell.
Пример кода AccessDbProviderSample05это поставщик, описанный в разделе создание поставщика навигации Windows PowerShell.
Пример кода AccessDbProviderSample06это поставщик, описанный в разделе создание поставщика содержимого Windows PowerShell.
Примеры кода GetProc01Это базовый Get-Process Пример командлета, описанный в разделе Создание первого командлета.
Примеры кода GetProc02Это Get-Process Пример командлета, описанный в разделе Добавление параметров, которые обрабатывают Command-Line входе.
Примеры кода GetProc03Это Get-Process Пример командлета, описанный в разделе Добавление параметров, обрабатывающих входные данные конвейера.
Примеры кода GetProc04Это Get-Process Пример командлета, описанный в статье Добавление незавершенных отчетов об ошибках в командлет.
Примеры кода GetProc05Этот Get-Process командлет аналогичен командлету, описанному в статье Добавление незавершенных отчетов об ошибках в командлет.
Примеры кода StopProc01Это Stop-Process Пример командлета, описанный в разделе Создание командлета, изменяющего систему.
Примеры кода StopProcessSample04Это Stop-Process Пример командлета, описанный в разделе Добавление наборов параметров в командлет.
Примеры кода Runspace01Ниже приведены примеры кода для пространства выполнения, описанного в разделе Создание консольного приложения, выполняющего указанную команду.
Примеры кода Runspace02В этом примере используется класс System. Management. Automation. рунспацеинвоке для Get-Process синхронного выполнения командлета.
Примеры кода RunSpace03Ниже приведены примеры кода для пространства выполнения, описанного в разделе «Создание консольного приложения, запускающего указанный скрипт».
Примеры кода RunSpace04Это пример кода для пространства выполнения, в котором используется класс System. Management. Automation. рунспацеинвоке для выполнения скрипта, который создает завершающую ошибку.
Примеры кода RunSpace05
Примеры кода RunSpace06
Примеры кода RunSpace07
Примеры кода RunSpace08
Примеры кода RunSpace09
Примеры кода RunSpace10Это исходный код для образца Runspace10, который добавляет командлет в System. Management. Automation. пространства. рунспацеконфигуратион , а затем использует измененные сведения о конфигурации для создания пространства выполнения.

См. также:

Руководство программиста по Windows PowerShell

Пакет SDK для Windows PowerShell






Обратная связь







Просмотреть все отзывы по странице

PowerShell Скрипты — примеры автоматизации

В этой записи буду складировать свои (и не только свои) небольшие PowerShell скрипты, которые не настолько велики, чтоб им посвящать отдельную запись.

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

Windows Powershell — оснастка командной строки и скриптовый язык для различной автоматизации задач и администрирования в windows. Официальный сайт — microsoft.com/powershell

Содержание

Удаление всех бекапов кроме трех последних

На сервере локально сохраняются бекапы, где папки именуются таким образом: «klbackup2014-01-22#23-00-00». PowerShell скрипт переносит эти папки на сетевой диск и хранить не более 3-х последних бекапов.

Copy-Item "C:\backups\klbackup*\" "\\Server\Backups\klBackup\" -force -recurse -ErrorAction stop
Remove-Item "C:\backups\klbackup*" -force -recurse
$folders = Get-ChildItem "\\Server\Backups\klBackup\klbackup*"
$i = 0
While ($i -lt $folders.count-3) {
   Remove-Item $folders[$i] -force -recurse
   $i++
}

Удаляем файлы старше трех месяцев

$date = (Get-Date). AddMonths(-3)
Get-ChildItem -Path D:\Files\Common | where {!$_.PSIsContainer} |
foreach {
   if ($_.LastWriteTime -lt $date) {
      # в тестовых целях указываем -whatif
      # когда убедимся что все корректно работает то убираем его
      Remove-Item $_ -whatif
   }
}

Разрешение скачанного изображения

PowerShell скрипт скачивает изображение из Интернета и отображает ее разрешение

Function Get-Image{
   begin{[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") |Out-Null}
   process{
      $fi=[System.IO.FileInfo]$_
      if( $fi.Exists){
         $img = [System.Drawing.Image]::FromFile($_)
         $img.Clone()
         $img.Dispose()
      }else{Write-Host "File not found: $_" -fore yellow }
   }
   end{}
}
#Скачиваем файл
$webclient = New-Object System.Net.WebClient
$url = "http://cs418720.userapi.com/v418720852/20d0/DiSlb-_mVBg.jpg"
$file = "D:\ImageSize.jpg"
$webclient.DownloadFile($url,$file)
#Получаем ширину и высоту изображения
$image = $file | Get-Image
$Width = $image. Width
$Height = $image.Height
#Вывод на экран
write-output “Width:$Width, Height:$Height"

Среднее арифметическое трех последних чисел

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

$date = Get-Date -format yyyy-MM-dd
$filename = "C:\Program Files\Zabbix\CheckHost_INET-" + $date + ".res"
$file = Get-Content $filename #считываем файл в переменную. В файле каждая строка содержит по числу.
$lenght = $file.count #получаем количество строк файла
$avg=([int]$file[$lenght-1]+[int]$file[$lenght-2]+[int]$file[$lenght-3])/3 #вычисляем арифметическое среднее трех последних чисел
Write-Host([int]$avg) #выводим среднее арифметическое с откидыванием дроби

Количество файлов в папках и размер папок

PowerShell скрипт выводит на экран и в файл D:\CountFiles.csv информацию о том, сколько содержит файлов каждая папка и подпапки в директории D:\Photos, а также размер этих папок и подпапок. csv файл можно импортировать в exel или гугл-таблицы и отсортировать столбцы по возрастанию или спаданию. Скрипт может пригодиться при оптимизации файлового хранилища.

$source="D:\Photos"
Get-ChildItem $source -recurse -force | where {$_.psIscontainer} | foreach {
   $count = Get-ChildItem $_.fullname -recurse | where {$_.length} | Measure-Object -property length -Sum
   Write-Host($_.FullName)
   $FilesSize = '{0:F}' -f ((($count.Sum)/1024)/1024)
   Write-Host("Files: " + $count.count )
   Write-Host("Size: " + $FilesSize + " MB")
   '"' + $_.FullName + '","' + $count.count + '","' + $FilesSize + '"' | Out-File D:\CountFiles.csv -Append
}

Случайный афоризм из файла

#Автор скрипта: https://elims.org.ua
#читаем содержимое файла в масив построчно и берем случайную строку
$file = Get-Content "C:\aphorism.txt"
$aphorism = Get-Random -input $file #берем случайный афоризм из массива афоризмов
$tag = Get-Random -input " #афоризмы"," #цитаты", " #цитаты" #берем случайный тег
$aphorism = $aphorism + $tag
Write-Host($aphorism)

Отображение mp3-файлов с низким битрейтом

PowerShell скрипт выводит список mp3-файлов, которые находятся в папке D:\vk-music\ и имеют битрейт мене 320

#скрипт выводит список mp3-файлов, которые находятся в папке D:\vk-music\ и имеют битрейт мене 320 
$objShell = New-Object -ComObject Shell. Application
$mp3files = Get-ChildItem "D:\vk-music\" -include "*.mp3" -recurse #получили список mp3-файлов
foreach($mp3Item in $mp3files){ #для каждого файла из списка
 $file = split-path $mp3Item -leaf #из полного имени вырезали имя файла
 $path = split-path $mp3Item #из полного имени вырезали адрес папки
 $objFolder = $objShell.namespace($path)
 $objFile = $objFolder.parsename($file)
 if ($objFolder.getDetailsOf($objFile, 28)) { # 28 - номер свойства файла, в котором хранится информация о битрейте
  $bitrate = [int]$objFolder.getDetailsOf($objFile, 28).Substring(1,3) #из строки, где хранится битрейт, вырезаем числовое значение битрейта
  if ($bitrate -lt 320) { #если битрейт меньше 320
   "№" + ++$i + ' bitrate: ' + $bitrate + " file: " + [string]$mp3Item #выводим битрейт и полное имя файла
  }
 }
}

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

Удаляем в указанных папках (рекурсивно) изображения jpg с худшим качеством чем HD Ready

Function Get-Image{
 begin{[System. Reflection.Assembly]::LoadWithPartialName("System.Drawing") |Out-Null}
 process{
 $fi=[System.IO.FileInfo]$_
 if( $fi.Exists){
 $img = [System.Drawing.Image]::FromFile($_)
 $img.Clone()
 $img.Dispose()
 }else{Write-Host "File not found: $_" -fore yellow }
 }
 end{}
}
$paths = @()
$paths = $paths + "D:\Folder1\"
$paths = $paths + "E:\Folder2"
$paths = $paths + "X:\Folder3\"
Foreach ($path in $paths) { 
 Get-ChildItem -Path $path -recurse -filter *.jpg | where {!$_.PSIsContainer} | foreach {
 #Получаем ширину и высоту изображения
 $image = $_.FullName | Get-Image
 $Width = $image.Width
 $Height = $image.Height
 #Вывод на экран 
 $pixels = $Width*$Height
 $hd_ready = 1280*720
 $string = $_.FullName+' Width:'+$Width+' Height:'+$Height + " Pixels:"+$pixels 
 $image.dispose()
 if ($pixels -le $hd_ready) {
 Remove-Item $_.FullName 
 write-host $string
 } 
 }
}

Копирование бекапов на резервную площадку

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

После окончания работы:

  • присылается письмо в котором указано:
    • свободное место на локальных дисках (до старта и после окончания), объем бекапа
    • время старта и окончания, длительность бекапа
    • средняя скорость копирования
  • компьютер выключается

Компьютер выключается потому, что он в основном выключен. Для резервного копирования он автоматически включается (настройка в биосе).

$StartTimeHour = (Get-Date).Hour #Запоминаем когда запустилась задача
$Day_of_week = [int]((Get-Date).DayofWeek) #текущий день недели
if ((($Day_of_week -eq 2)-or($Day_of_week -eq 4)-or($Day_of_week -eq 6))-and($StartTimeHour -eq 11)) {
#старт копирования если сейчас вторник, среда, суббота и при этом 11 часов
 $StartTime = Get-Date -Format "yyyy.MM.dd HH:mm:ss" #время старта копирования 
 $Free_Space_Start = Get-WMIObject Win32_LogicalDisk -Filter "DeviceID='D:'" | ForEach-Object {[math]::truncate($_.freespace / 1GB)} #свободное место до бекапа
 $Free_Space_Start_Bytes = Get-WMIObject Win32_LogicalDisk -Filter "DeviceID='D:'" | ForEach-Object {$_. freespace} #свободное место до бекапа
 $log_file = "D:\Backups\log.txt" #лог файл скрипта, можно понять на каком этапе работа скрипта
 $date = "{0:yyyy-MM-dd}" -f (get-date) #текущая дата для имени папки
 $path = "D:\Backups\" + $date + "\" #имя папки
 if (-not(Test-Path $path)) { #если папка не существует
 write-host "создаем папку: " + $path 
 $result = New-Item -ItemType directory -Path $path #создаем папку
 }
 #копируем резервные копии медка
 $time = "{0:yyyy-MM-dd HH:mm:ss}" -f (get-date)
 $string = $time + " Start Copy \\172.16.13.1\Backups\Medoc"
 "##################################################" | Out-File -Append $log_file -Encoding UTF8
 $string | Out-File -Append $log_file -Encoding UTF8 
 & robocopy \\172.16.13.1\Backups\Medoc D:\Backups\Medoc /e /log:"D:\Backups\robocopy_log.txt"
 #копируем резервные копии разных устройств и ПО
 $time = "{0:yyyy-MM-dd HH:mm:ss}" -f (get-date)
 $string = $time + " Start Copy \\172.16.13.1\Backups\Other"
 $string | Out-File -Append $log_file -Encoding UTF8
 & robocopy \\172. 16.13.1\Backups\Other D:\Backups\Other /e /log:"D:\Backups\robocopy_log.txt"
 #копируем резервные копии Windows с 1-го сервера
 $path = $path + "WindowsImageBackup"
 $time = "{0:yyyy-MM-dd HH:mm:ss}" -f (get-date)
 $string = $time + " Start Copy \\172.16.13.1\Backups\WindowsImageBackup"
 $string | Out-File -Append $log_file -Encoding UTF8
 & robocopy \\172.16.13.1\Backups\WindowsImageBackup $path /e /log:"D:\Backups\robocopy_log.txt"
 #копируем резервные копии Windows с 2-го сервера
 $time = "{0:yyyy-MM-dd HH:mm:ss}" -f (get-date)
 $string = $time + " Start Copy \\172.16.13.2\Backups\WindowsImageBackup"
 $string | Out-File -Append $log_file -Encoding UTF8
 & robocopy \\172.16.13.2\Backups\WindowsImageBackup $path /e /log:"D:\Backups\robocopy_log.txt"
 #запись в лог-файл окончания работы
 $time = "{0:yyyy-MM-dd HH:mm:ss}" -f (get-date)
 $string = $time + " Finish Backup"
 $string | Out-File -Append $log_file -Encoding UTF8
 "##################################################" | Out-File -Append $log_file -Encoding UTF8
 #Формируем данные для письма
 $EndTime = Get-Date -Format "yyyy. MM.dd HH:mm:ss"
 $Free_Space_End = Get-WMIObject Win32_LogicalDisk -Filter "DeviceID='D:'" | ForEach-Object {[math]::truncate($_.freespace / 1GB)} #свободное место после бекапа
 $Free_Space_End_Bytes = Get-WMIObject Win32_LogicalDisk -Filter "DeviceID='D:'" | ForEach-Object {$_.freespace} #свободное место до бекапа 
 $backup_Size = $Free_Space_Start-$Free_Space_End
 $backup_Size_Bytes = $Free_Space_Start_Bytes-$Free_Space_End_Bytes
 $Work_time = $(NEW-TIMESPAN –Start $StartTime –End $EndTime)
 $Work_time_seconds = $Work_time.TotalSeconds
 $NetworkSpeed = '{0:N1}' -f ((($backup_Size_Bytes / $Work_time_seconds) / (1024*1024)) * 8)
 $Mail_String = "Свободное место до бекапа: " + $Free_Space_Start + " ГБ | `r`n"
 $Mail_String = $Mail_String + "Свободное место после бекапа:" + $Free_Space_End + " ГБ | `r`n"
 $Mail_String = $Mail_String + "Размер бекапа: " + $backup_Size + " ГБ | `r`n"
 $Mail_String = $Mail_String + "Старт бекапа: " + $StartTime + " | `r`n"
 $Mail_String = $Mail_String + "Конец бекапа: " + $EndTime + " | `r`n"
 $Mail_String = $Mail_String + "Время выполнения: " + $Work_time + " | `r`n"
 $Mail_String = $Mail_String + "Средняя скорость копирования: " + $NetworkSpeed + " Мбит в секунду `r`n" 
 Write-host $Mail_String 
 #Заголовки письма и данные почтового ящика
 $From = "admin-notify@домен. com.ua"
 $To = "admin@домен.ком.ua"
 $SMTPServer = "адрес.сервера.com.ua"
 $SMTPPort = "25"
 $Username = "admin-notify@домен.ком.ua"
 $Password = "тут_пароль"
 $subject = "Copy Backups to ReserveServer" 
 $body = $Mail_String 
 #формируем сообщение в формате html:
 $message = New-Object System.Net.Mail.MailMessage $From, $To
 $message.Subject = $subject
 $message.IsBodyHTML = $true
 $message.Body = $body
 #Отправляем:
 Write-host "Отправляем письмо"
 $smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort)
 $smtp.EnableSSL = $true
 $smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password)
 $smtp.Send($message)
 Write-host "Письмо отправленно"
 & shutdown -s -t 300 #выключаем компьютер через 5 минут
}

Информация об обновлениях WSUS

Этот Powershell скрипт получает информацию со WSUS и показывает:

  • количество обновлений по заданных критериям
  • краткую сводную информацию об обновлениях
  • имена обновлений
  • отображает список обновлений по заданным критериям для каждого компьютера по отдельности
$WSUSServer = 'SERVER_NAME' #WSUS-сервер
$PortNumber = 8530 #http порт wsus
[void][reflection. assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($WSUSServer,$False,$PortNumber)
$UpdateScope = New-Object Microsoft.UpdateServices.Administration.UpdateScope
#$UpdateScope.ApprovedStates = 'NotApproved' #указываем критерии апдейтов: не одобренные
#$UpdateScope.IncludedInstallationStates = 'NotInstalled' #указываем критерии апдейтов: не проинсталированные
$UpdateScope.IncludedInstallationStates = 'Installed' #указываем критерии апдейтов: проинсталированные
$UpdateScope #просматриваем сформированные критерии апдейтов
$wsus.GetUpdateCount($updatescope) #получаем и выводим количество апдейтов
$wsus.GetUpdateStatus($updatescope,$False) #получаем и выводим краткую информацию об обновлениях
$wsus.GetUpdates($updatescope).Title #выводим имена апдейтов
$computers = $wsus.GetComputerTargets() #все компьютеры со wsus
ForEach ($computer in $computers){ #для каждого компьютера
 $Computername = $computer. fulldomainname #получаем его имя 
 $updates = $computer.GetUpdateInstallationInfoPerUpdate($updateScope) #получаем апдейты по указаным критериям
 $UpdateCount = $updates.Count #количество апдейтов для текущего компьютера
 write-host $Computername $UpdateCount #выводим имя компьютера и количество апдейтов
 $i = 0
 ForEach ($update in $updates) { #для каждого апдейта выводим подробную информацию 
 $i++
 $update_info = $update.GetUpdate() #запрашиваем инфо об апдейте
 $UpdateTitle = $update_info.Title #имя апдейта
 $IsApproved = $update_info.IsApproved #является ли он одобренным 
 write-host $Computername $i "of" $UpdateCount $IsApproved $UpdateTitle 
 }
}

Лочим экран и произносим текст

Задача: если в заббиксе сработал тригер и он не потвержден, то необходимо лочить экран и произность этот тригер.

Тригеры из заббикса запрашиваются утилитой zabbixctl и выводяться в текстовый файл, который опубликован по веб-адресу.

Сам powershell скрипт:

Add-Type -AssemblyName System. speech
$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
$request = (New-Object System.Net.WebClient).DownloadString("http://server/status.txt") #получаем тригеры
$speak.Rate = -2 #Замедляем скорость произношения
$zabbix_message = ($request -split '\n')[0] #первая строка - первый тригер
if ($zabbix_message.length -ge 1) { #если строка не пустая
 cmd /c rundll32.exe user32.dll,LockWorkStation #лочим экран
 $speak.Speak("zabbix. " + $zabbix_message) #произносим текст
 $Time = Get-Date -Format "yyyy.MM.dd HH:mm:ss" 
 $log_message = $Time + " " + $zabbix_message
 $log_message | Out-File -Append "c:\WINDOWS\scripts\log.txt" -Encoding UTF8 #записываем в лог-файл
}

Вывод размера какой-либо веб страницы

$web = New-Object System.Net.WebClient
"{0} bytes" -f ($web.DownloadString("https://elims.org.ua/")).length.toString("###,###,##0")

Остальные Powershell-скрипты:

  • Powershell скрипты для Вконтакте
  • Powershell скрипт: Автоответчик болтун для Вконтакте
  • Powershell скрипт: Антиспам в коментариях стены и фотоальбомах сообщества во Вконтакте
  • Powershell скрипт: Чтение Вконтакте через RSS
  • Powershell скрипт: скачиваем фотографии из Вконтакте
  • Powershell скрипт для скачивания музыки из Вконтакте
  • Powershell скрипт: Отправка писем через gmail
  • Powershell скрипт: охрана с помощью вебкамеры
  • PowerShell скрипт автопубликации изображений на блог

Понравилось? =) Поделись с друзьями:

Опубликовано в рубрике Программирование

Метки: develop, PowerShell

« VBS: автоматическая архивация логов

Игра Flappy Bird: описание и как играть онлайн »

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

Редактировать

Твиттер

LinkedIn

Фейсбук

Электронная почта

Работа с объектами

Практическое руководство

  • Просмотр структуры объекта
  • Выделение частей объектов
  • Удаление объектов из пайплайна
  • Сортировка объектов
  • Создание . NET и COM-объектов
  • Использование статических классов и методов
  • Получение объектов WMI с помощью Get-CimInstance
  • Прямое управление элементами

Управление компьютерами

Практическое руководство

  • Изменение состояния компьютера
  • Сбор информации о компьютерах
  • Создание запросов Get-WinEvent с помощью FilterHashtable

Управление процессами и услугами

Практическое руководство

  • Управление процессами с помощью командлетов процесса
  • Управление услугами
  • Работа с принтерами
  • Выполнение сетевых задач
  • Работа с установками программного обеспечения
  • Декодировать команду PowerShell из запущенного процесса

Работа с выводом

Концепция

  • Перенаправление вывода
  • Использование команд форматирования для изменения вида вывода

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

Практическое руководство

  • Управление текущим местоположением
  • Управление дисками PowerShell
  • Работа с файлами и папками
  • Работа с папками файлов и ключами реестра
  • Работа с записями реестра
  • Работа с ключами реестра

Создание элементов пользовательского интерфейса

Практическое руководство

  • Создание пользовательского поля ввода
  • Создание графического средства выбора даты
  • Несколько списков выбора
  • Выбор элементов из списка

Управление дисками PowerShell — PowerShell

  • Статья

Этот пример применим только к платформам Windows.

Диск PowerShell — это место хранения данных, к которому вы можете получить доступ как к диску файловой системы в
PowerShell. Поставщики PowerShell создают для вас некоторые диски, например файл
системные диски (включая C: и D: ), диски реестра ( HKCU: и HKLM: ) и
диск сертификата ( Cert: ), и вы можете создавать свои собственные диски PowerShell. Эти диски
полезны, но доступны только в PowerShell. Вы не можете получить к ним доступ с помощью других Windows
инструменты, такие как File Explorer или Cmd.exe .

PowerShell использует существительное PSDrive для команд, которые работают с PowerShell.
диски. Чтобы получить список дисков PowerShell в сеансе PowerShell, используйте
Командлет Get-PSDrive .

 Получить-PSDrive
 
 Корень поставщика имен CurrentLocation
---- -------- ---- ---------------
Файловая система A:\
Псевдоним Псевдоним
C FileSystem C:\ . ..и настройки\me
сертификат Сертификат \
D Файловая система D:\
Окружающая среда
Функция Функция
Реестр HKCU HKEY_CURRENT_USER
Реестр HKLM HKEY_LOCAL_MACHINE
переменная переменная
 

Хотя диски на дисплее различаются в зависимости от дисков в вашей системе, список выглядит примерно так:
вывод команды Get-PSDrive , показанный выше.

Диски файловой системы

являются подмножеством дисков PowerShell. Вы можете идентифицировать диски файловой системы по
запись FileSystem в столбце Provider. Диски файловой системы в PowerShell поддерживаются
поставщик файловой системы PowerShell.

Чтобы просмотреть синтаксис командлета Get-PSDrive , введите Команда Get-Command с синтаксисом
параметр:

 Get-Command -Name Get-PSDrive -Syntax
 
 Get-PSDrive [[-Name] ] [-Scope ] [-PSProvider ] [-V
erbose] [-Debug] [-ErrorAction ] [-ErrorVariable ] [-
OutVariable ] [-OutBuffer ]
 

Параметр PSProvider позволяет отображать только те диски PowerShell, которые поддерживаются
конкретного провайдера. Например, чтобы отобразить только те диски PowerShell, которые поддерживаются
Поставщик файловой системы PowerShell, введите Команда Get-PSDrive с параметром PSProvider и
значение FileSystem :

 Get-PSDrive -PSProvider FileSystem
 
 Корень поставщика имен CurrentLocation
---- -------- ---- ---------------
Файловая система A:\
C FileSystem C:\ ...nd Settings\PowerUser
D Файловая система D:\
 

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

 Get-PSDrive -PSProvider Registry
 
 Корень поставщика имен CurrentLocation
---- -------- ---- ---------------
Реестр HKCU HKEY_CURRENT_USER
Реестр HKLM HKEY_LOCAL_MACHINE
 

Вы также можете использовать стандартные командлеты Location с дисками PowerShell:

 Set-Location HKLM:\SOFTWARE
Нажмите-местоположение . \Microsoft
Получить-местоположение
 
 Путь
----
HKLM:\ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Майкрософт
 

Добавление новых дисков PowerShell

Вы можете добавить свои собственные диски PowerShell с помощью команды New-PSDrive . Чтобы получить синтаксис для
Команда New-PSDrive , введите команду Get-Command с параметром Syntax :

 Get-Command -Name New-PSDrive -Syntax
 
 New-[-Description ] [-Scope ] [-Credential ] [-Verbose] [-Debug ]
[-ErrorAction ] [-ErrorVariable ] [-OutVariable ]
[-OutBuffer ] [-WhatIf] [-Confirm]
 

Чтобы создать новый диск PowerShell, необходимо указать три параметра:

  • Имя диска (можно использовать любое допустимое имя PowerShell)
  • PSProvider — используйте FileSystem для местоположений файловой системы и Registry для местоположений реестра
  • Корень, то есть путь к корню нового диска

Например, можно создать диск с именем Office , сопоставленный с папкой, содержащей
Приложения Microsoft Office на вашем компьютере, такие как C:\Program Files\MicrosoftOffice\OFFICE11 .
Чтобы создать диск, введите следующую команду:

 New-PSDrive -Name Office -PSProvider FileSystem -Root "C:\Program Files\Microsoft Office\OFFICE11"
 
 Корень поставщика имен CurrentLocation
---- -------- ---- ---------------
Файловая система Office C:\Program Files\Microsoft Offic...
 

Примечание

Как правило, пути не чувствительны к регистру.

Доступ к диску PowerShell осуществляется по его имени, за которым следует двоеточие ( : ).

Диск PowerShell может значительно упростить многие задачи. Например, некоторые из наиболее важных ключей в
реестр Windows имеет чрезвычайно длинные пути, что делает доступ к ним громоздким и трудным для
помнить. Критическая информация о конфигурации находится в
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion . Для просмотра и изменения элементов в
В разделе реестра CurrentVersion вы можете создать диск PowerShell с корнем в этом разделе, набрав:

 New-PSDrive -Name cvkey -Реестр PSProvider -Root HKLM\Software\Microsoft\Windows\CurrentVersion
 
 Корень поставщика имен CurrentLocation
---- -------- ---- ---------------
ключ реестра HKLM\Software\Microsoft\Windows\. ..
 

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

 cd cvkey:
 

или:

 Set-Location cvkey: -PassThru
 
 Путь
----
cvkey:\
 

Командлет New-PSDrive добавляет новый диск только в текущий сеанс PowerShell. Если вы закроете
PowerShell, новый диск потерян. Чтобы сохранить диск PowerShell, используйте командлет Export-Console .
для экспорта текущего сеанса PowerShell, а затем используйте PowerShell.exe PSConsoleFile
параметр, чтобы импортировать его. Или добавьте новый диск в свой профиль Windows PowerShell.

Удаление дисков PowerShell

Вы можете удалить диски из PowerShell с помощью командлета Remove-PSDrive . Например, если вы добавили
диск Office: PowerShell, как показано в разделе New-PSDrive , его можно удалить, введя:

 Remove-PSDrive -Name Office
 

Чтобы удалить диск cvkey: PowerShell, используйте следующую команду:

 Remove-PSDrive -Name cvkey
 

Однако вы не можете удалить его, пока находитесь в накопителе.