Получить текущий путь UNC из локального пути в powershell

Предполагая, что у меня есть сопоставленный диск M:\ до \\SomeServer\SomeShare и в powershell Я в папке M:\SomeFolder как мне преобразовать это в UNC-путь, то есть \\SomeServer\SomeShare\SomeFolder

9 голосов | спросил Chris Chilvers 26 PM00000030000001731 2009, 15:05:17

5 ответов


13

Я довольно новичок в PowerShell, поэтому приведенный ниже код может быть низкого качества. Однако он должен получить нужную информацию:

$currentDirectory = Get-Location
$currentDrive = Split-Path -qualifier $currentDirectory.Path
$logicalDisk = Gwmi Win32_LogicalDisk -filter "DriveType = 4 AND DeviceID = '$currentDrive'"
$uncPath = $currentDirectory.Path.Replace($currentDrive, $logicalDisk.ProviderName)

$ uncPath должен содержать путь UNC, который вы ищете.

ответил firedfly 26 PM00000040000005931 2009, 16:55:59
4

Для любого, кто интересуется скриптом RunAs для StExBar, это:

param([string] $username)

$path = Get-Location
$currentDrive = Split-Path -qualifier $path
$logicalDisk = Get-WmiObject Win32_LogicalDisk -filter "DeviceID = '$currentDrive'"

if ($logicalDisk.DriveType -eq 4)
{
    $path = Join-Path $logicalDisk.ProviderName (Split-Path -NoQualifier $path)
}

$systemroot = [System.Environment]::SystemDirectory

&"$systemroot\runas.exe" /user:$username "$systemroot\windowspowershell\v1.0\powershell.exe -NoExit -Command \`" &{ Set-Location '$path' }\`""

И командная строка в StExBar:

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -Command "&{ &'%homedrive%%homepath%\RunAs.ps1' 'domain\username' }"

Замените путь тем, где вы храните скрипт RunAs.ps1, мне нравится хранить мой файл в корне моей домашней папки.

ответил firedfly 26 PM00000040000005931 2009, 16:55:59
3

Я знаю, что это старый вопрос, но если кому-то нужна одна строка:

$unc = (gwmi Win32_LogicalDisk -filter "DeviceID = '$((Get-Location).Drive.Name):'").ProviderName
ответил David Martin 11 Jpm1000000pmFri, 11 Jan 2013 17:24:49 +040013 2013, 17:24:49
2

Я понимаю, что это старый вопрос, но я хотел бы поделиться другим способом для этого:

$drive = Get-PSDrive -Name (get-location).Drive.Name
$root = if($drive.DisplayRoot -ne $null){$drive.DisplayRoot} else {$drive.Root}
Join-Path -Path $root -ChildPath $drive.CurrentLocation

Get-PSDrive отбросит всю информацию о диске (имя, используемое /свободное пространство, провайдер, корневое и текущее местоположение) и передав параметр Name, поскольку текущая буква диска (с использованием get-location) позволяет это работать в нескольких сценариях (это также приведет к отмене информации о локальных дисках на машине).

Чтобы заставить его работать как с локальными, так и с сопоставленными дисками, сравнение выполняется для заполнения $ root буквой диска или местоположением сети. .Root отправит обратно букву диска, а .DisplayRoot вернет сетевой путь (null, если это локальный путь, который является причиной сравнения)

Используя Join-Path, вы можете соединить путь, который вернет букву диска и текущее местоположение, если это локальный путь, сетевой путь и текущее местоположение, если это сопоставленный диск.

ответил Ryan 7 PMpFri, 07 Apr 2017 18:24:48 +030024Friday 2017, 18:24:48
0

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

IF ((Get-Location | %{$_.Drive}) -eq $NUL){$dltr=%{for($j=67;gdr($d=[char]++$j)2>0){}$d}; New-PSDrive –Name $dltr –PSProvider FileSystem –Root ((Get-Location).ProviderPath) –Persist; Set-Location -Path $dltr`: -PassThru}

Не предназначен для ответа на OP, просто добавьте полезный контент. Имел сценарий, в котором мне нужен сопоставленный диск вместо UNC-путей, поэтому я сделал это, чтобы проверить, был ли UNC использован в PS, затем сопоставить диск с использованием этого UNC-пути, а затем переключиться на эту букву диска.

ответил Cynomus 20 PMpMon, 20 Apr 2015 23:14:35 +030014Monday 2015, 23:14:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132