2016-09-23 9 views
0

Я использую это, чтобы сопоставить букву диска в PowerShell v2, и она работает так, что буква диска появляется и может использоваться в Explorer.Доступны только буквы карт памяти?

$Network = New-Object -ComObject "Wscript.Network" 
$Network.MapNetworkDrive($drive.name, $drive.value, $true) 

Однако, если я затем попытаться использовать эту букву, чтобы сделать что-нибудь в Powershell, скажем, создать папку, я получаю DriveNotFoundException. Но, как я уже сказал, диск есть и можно использовать вручную. Я думал, что мне, возможно, придется немного подождать, или обновить Explorer, или и то, и другое, но, похоже, это ничего не влияет. Однако, если я развернусь и перезапущу скрипт, который проверяет заранее, будет ли диск там, и только создает его, если нет, он увидит диск и не воссоздает, и следующая задача будет работать нормально. Как будто, возможно, буква диска основана на сеансе? Я также попытался добавить

New-PSDrive -name:($drive.name -replace ':', '') -psProvider:FileSystem -root:$drive.value -scope:Global 

, а также, в надежде, что это будет обеспечивать диск сеанса на основе, но ни к чему хорошему.

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

Один последний момент, я знаю, что PS 3 имеет лучший способ обработки сопоставленных дисков, но из-за неконтролируемых мной я ограничена PS v2.

+0

Там может быть пробел или двоеточие, либо работает, и я найти двоеточие связывает параметр и значение визуально, что делает код более читаемым для меня. EDIT: Прокомментировал ли комментарий о том, что двоеточия удалены? – Gordon

ответ

0

Я не думаю, что вы хотите в PowerShell v2. Чтобы создать New-PSDrive создать диск Windows, вам нужно добавить параметр -Persist, который недоступен в PowerShell v2.

От documentation:

-Persist

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

Я бы сказал, что ваш лучший вариант (помимо обновления до PowerShell v3 или более поздней версии), чтобы использовать net команду:

& net use $drive.name $drive.value /persistent:yes 
+0

Хм, так что у старой команды DOS могут не возникнуть проблемы с подходом VB Script? Придется попробовать это завтра! – Gordon

+0

Команда поставляется с Windows NT и не имеет ничего общего с DOS. –

+0

А, да, нехорошо слить «Командная строка» с DOS. Различные твари. Тем не менее, я попробовал подход Net Use с теми же результатами. Я получаю букву диска в проводнике, но если позже в коде я попытаюсь создать папку с буквой диска, это приведет к ошибкам с DriveNotFoundException. :(НО, когда я сделал небольшой двухлинейный тест, он работал, поэтому, возможно, тот факт, что у меня есть несколько функций. – Gordon