Монтирование диска windows powershell
Обновлено: 07.07.2024
В Powershell реализована возможность подключать сетевые диски используя протоколы SMB/CIFS. Эта возможность использует разные команды работа с которыми может вызвать сложности. Рассмотрим применение команд на примерах.
Навигация по посту
Как работают в Powershell сетевые диски
Такой способ ограничен пользователем, который открыл консоль или запустил скрипт. Если вы запустите консоль от имени доменного администратора - то обращение к сетевому пути будет от его имени.
Возможность использовать другие учетные записи, а так же подключать сетевые диски, реализованы в 2 командах:
Обе команды, аналогично Get-ChildItem, подключают диски под учетной записью, которая запустила консоль.
Хоть эти команды достаточно старые, в каждой из новых версий Powershell находятся ошибки и баги. На момент написания статьи баги были найдены в версиях 5.1 - 7.1 и все они касались процесса подключения.
Основной момент, который упростит работу с сетевыми папками в Powershell кроется в понимании понятии провайдеров. Создавая сетевой диск обычными средствами Windows вы сразу видите результат в проводнике. Делая то же самое в Powershell вы изначально обращаетесь к провайдеру услуг, а он обращается к Windows. В зависимости от указанных вами параметров и возможностью команды у вас может быть создан диск только в рамках этого провайдера либо в рамках провайдера и области Windows.
Если это сложно понять, то представьте, что среда Windows и Powershell это разные вещи и что бы скопировать файл с одного места на другое - нужно использовать дополнительный параметр, которого может и не быть.
Получение списка сетевых дисков и их удаление
Мы можем получить список сетевых дисков используя обе команды модуля:
Мы можем вывести учетную запись, под которой подключена сетевая папка, следующим образом:
Force удаляет подключение без подтверждения.
Подключение сетевых дисков
Проблемы с командами могут зависеть от версии вашего интерпретатора. Powershell 5-ой версии был предустановлен во всех версиях начиная с Windows 10 и Windows Server 2016. Если вы сомневаетесь в версии, то это можно проверить следующей командой:
New-SmbMapping
Самый простой способ подключить диски, используя команду New-SmbMapping, будет выглядеть следующим способом:
В этой команде используются следующие ключи:
Мы можем перезапустить процесс средствами Powershell. Выполнение этой команды, как минимум, закроет все открытые окна:
Так же у вас могут появиться другие ошибки, например следующие говорят об уже занятой букве:
- New-SmbMapping : Имя локального устройства уже используется.
- New-SmbMapping : The local device name is already in use.
- New-SmbMapping : The network name cannot be found.
New-PSDrive
В отличие от предыдущего способа - у него нет проблем с проводником, но после перезагрузки компьютера подключение к диску пропадет. Как я прочитал в каких-то версиях Powershell это исправлено, в каких-то появились новые проблем. Один из способов сделать диск постоянным - будет рассмотрен ниже.
Подключить аналогичный диск можно следующим способом:
У вас могут появиться следующие ошибки:
- New-PSDrive : The network resource type is not correct;
- The specified network resource or device is no longer available.
Подключение дисков под другим пользователем
Обе команды позволяют выполнять подключение используя других пользователей. Для каждой из команд этот подход отличается.
Эта переменная будет хранить ссылку на объект в памяти, который нельзя будет экспортировать на другой компьютер. Как упростить процесс, если вы планируете использовать учетные данные на разных компьютерах, рассмотрено в другой статье.
- UserName - логин;
- Password - пароль;
- SaveCredential - нужно ли сохранять учетные данные.
Пример подключения с сохранением учетных данных:
Подключение дисков удаленно
Диск Windows PowerShell — это расположение хранилища данных, доступ к которому можно получить так же, как к диску файловой системы в Windows PowerShell. Поставщики Windows PowerShell создают несколько дисков, например диски файловой системы (включая C: и D:), диски реестра (HKCU: и HKLM:) и диск сертификата (Cert:), а вы можете создать собственные диски Windows PowerShell. Эти диски очень полезны, но они доступны только в Windows PowerShell. К ним невозможно получить доступ с помощью других средств Windows, например проводника или Cmd.exe.
Windows PowerShell использует существительное PSDrive для команд, которые работают на дисках Windows PowerShell. Для получения списка дисков Windows PowerShell в сеансе Windows PowerShell используйте командлет Get-PSDrive .
Хотя отображение дисков в списке зависит от дисков в вашей системе, список будет выглядеть аналогично выходным данным команды Get-PSDrive , показанной выше.
Диски файловой системы являются подмножеством дисков Windows PowerShell. Их можно идентифицировать по записи FileSystem в столбце "Поставщик". (Диски файловой системы в Windows PowerShell поддерживаются поставщиком FileSystem Windows PowerShell.)
Чтобы просмотреть синтаксис командлета Get-PSDrive , введите команду Get-Command с параметром Syntax:
Параметр PSProvider позволит отобразить только диски Windows PowerShell, поддерживаемые конкретным поставщиком. Например, чтобы отобразить только те диски Windows PowerShell, которые поддерживаются поставщиком FileSystem Windows PowerShell, введите команду Get-PSDrive с параметром PSProvider и значением FileSystem:
Чтобы просмотреть диски Windows PowerShell, представляющие кусты реестра, используйте параметр PSProvider для отображения только тех дисков Windows PowerShell, которые поддерживаются поставщиком реестра Windows PowerShell:
С дисками Windows PowerShell также можно использовать стандартные командлеты расположения:
Добавление новых дисков Windows PowerShell (New-PSDrive)
Добавить собственные диски Windows PowerShell можно с помощью команды New-PSDrive . Чтобы получить синтаксис для команды New-PSDrive , введите команду Get-Command с параметром Syntax:
Чтобы создать новый диск Windows PowerShell, необходимо указать три параметра:
имя диска (можно использовать любое допустимое имя Windows PowerShell);
PSProvider (используйте FileSystem для расположений файловой системы и Registry для расположений реестра);
корень, т. е. путь к корню нового диска.
Например, можно создать диск с именем Office, который сопоставляется с папкой, содержащей приложения Microsoft Office на компьютере, например C:\Program Files\MicrosoftOffice\OFFICE11 . Чтобы создать диск, введите следующую команду:
Обычно пути не зависят от регистра.
Ссылка на новый диск Windows PowerShell, как и на все диски Windows PowerShell, указывается по его имени, за которым следует двоеточие ( : ).
Диск Windows PowerShell может упростить множество задач. Например, некоторые наиболее важные разделы в реестре Windows содержат слишком длинные пути, что делает их громоздкими и сложными для запоминания. Сведения о критической конфигурации см. в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion . Чтобы просмотреть и изменить элементы в разделе реестра CurrentVersion, можно создать диск Windows PowerShell, корень которого находится в этом разделе, введя:
После этого можно изменить расположение на диск cvkey: (как и для любого другого диска):
Командлет New-PsDrive добавляет новый диск только в текущий сеанс Windows PowerShell. Если закрыть окно Windows PowerShell, новый диск будет потерян. Чтобы сохранить диск Windows PowerShell, используйте командлет Export-Console для экспорта текущего сеанса Windows PowerShell, а затем используйте параметр PSConsoleFile файла PowerShell.exe для импорта. Также можно добавить новый диск в профиль Windows PowerShell.
Удаление дисков Windows PowerShell (Remove-PSDrive)
Диски из Windows PowerShell можно удалить, используя командлет Remove-PSDrive . Командлет Remove-PSDrive прост в использовании. Чтобы удалить определенный диск Windows PowerShell, необходимо только указать имя диска Windows PowerShell.
Например, если вы добавили диск Windows PowerShell Office: , как описано в разделе New-PSDrive , вы можете удалить его, выполнив следующую команду:
Чтобы удалить диск Windows PowerShell cvkey:, также показанный в разделе New-PSDrive , используйте следующую команду:
Удалить диск Windows PowerShell легко, но его невозможно удалить, если он открыт. Пример:
Обычно для работы с дисками я использую оснастку управления дисками (Disk management) или утилиту Diskpart. А недавно решил проверить, нет ли в PowerShell каких либо средств для работы с дисками. Оказалось, что есть. В PowerShell (начиная с третьей версии) входит модуль Storage, предназначенный как раз для управления дисковыми устройствами.
В него входит больше сотни командлетов, вывести их список можно командой:
Get-Command -Module Storage
Первым делом выведем список всех дисков в системе командой:
Новый диск можно узнать по значению RAW в поле Partition Stylle. Инициализируем его:
Initialize-Disk -Number 1 -PartitionStyle GPT
Затем создадим раздел размером 40Гб и дадим ему букву диска X:
New-Partition -DiskNumber 1 -Size 40GB -DriveLetter X
Отформатируем полученный раздел в NTFS и укажем для него метку тома:
Format-Volume -DriveLetter X -FileSystem NTFS -NewFileSystemLabel Disk2 -Confirm:$false
Теперь предположим, я промахнулся с размером раздела и его надо увеличить. Посмотреть доступный размер для раздела можно командой:
Get-PartitionSupportedSize -DriveLetter X | Format-List
Увеличим раздел до максимально возможного:
$size = (Get-PartitionSupportedSize -DriveLetter X).SizeMax
Resize-Partition -DriveLetter X -Size $size
И до кучи сменим букву диска:
Set-Partition -DriveLetter X -NewDriveLetter Y
И наконец мне понадобилось вернуть диск в первоначальное состояние. Для очистки диска воспользуемся командой, которая удалит все данные и информацию о разделах:
Clear-Disk -Number 1 -RemoveData -Confirm:$false
И снова получим чистый, не разбитый диск.
И еще, все командлеты имеют параметр CimSession, позволяющий выполнять операции с дисками на удаленных компьютерах, например:
$session = New-CimSession -ComputerName SRV1 -Credential Contoso\Administrator
Get-Disk -Cimsession $session
Напомню, что по умолчанию модуль Storage есть только в Windows 8\Server 2012 и выше, для более старых ОС придется устанавливать PowerShell v3 отдельно. Более подробную информацию о командлетах для работы с дисками можно посмотреть на TechNet, либо воспользовавшись встроенной справкой PowerShell.
Как я могу монтировать и отключать ISO-образы из PowerShell в Windows 8 без сторонних программ?
Оригинальная версия этого вопроса заставила меня задуматься, возможно ли смонтировать ISO-образ через PowerShell в Windows 8.
Если вы сидите в командной строке и хотите смонтировать ISO, выполните следующую команду:
Это вызовет командлет PowerShell. Вам будет предложено указать путь к ISO-образу, который вы хотите смонтировать. Когда вы закончите, оставьте последний пустой и нажмите Enter .
Тада! Это установлено:
Чтобы отключить ISO из PowerShell, запустите Dismount-DiskImage и следуйте инструкциям. Если вы знаете только букву диска в верхней части головы, а не путь к изображению, используйте эту команду:
Get-Volume [Drive Letter] | Get-DiskImage | Dismount-DiskImage
Эта команда захватит указанный вами диск, найдет образ диска и отключит его.
Вы также можете использовать этот -PassThru флаг для хранения данных, переданных команде. Давайте смонтируем несколько ISO-образов, отобразим их буквы дисков, запустим файл на одном из дисков, а затем отключим все ISO-образы.
Отображение информации о громкости для каждого ISO, установленного с помощью foreach петли
Чтобы отключить ISO, используйте следующую команду:
Чтобы создать простой сценарий, который проверяет, подключен ли ISO-файл и является ли он действительно (по сравнению с VHD), я хотел бы использовать его -PassThru для временного хранения объекта и использовать Get-DiskImage команду для обновления состояния объекта DiskImage. Это обновит Attached свойство. StorageType Свойство будет сказать, является ли файл является ISO или VHD в соответствии с его расширением файла.
StorageType Из VHD 2, где ISO возвратит 1. Вот вывод $UbuntuISO :
Это вывод $temp после монтирования VHD: ( Mount-DiskImage также может монтировать VHD!)
Обратите внимание, что Attached свойство выше False , несмотря на то, что Mount-DiskImage команда работает без заминки.
Имейте в виду, что $UbuntuISO переменная также не будет обновляться:
Читайте также: