Suponiendo que tengo una unidad asignada M:\
a \\SomeServer\SomeShare
como en PowerShell que estoy en la carpeta M:\SomeFolder
¿Cómo convierto eso a una ruta UNC, es decir \\SomeServer\SomeShare\SomeFolder
.
Suponiendo que tengo una unidad asignada M:\
a \\SomeServer\SomeShare
como en PowerShell que estoy en la carpeta M:\SomeFolder
¿Cómo convierto eso a una ruta UNC, es decir \\SomeServer\SomeShare\SomeFolder
.
Respuestas:
Soy bastante nuevo en PowerShell, por lo que el siguiente código puede ser de baja calidad. Sin embargo, debe obtener la información que desea:
$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 debe contener la ruta UNC que está buscando.
Para cualquiera interesado en el script RunAs para StExBar es:
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' }\`""
Y la línea de comando en StExBar es:
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -Command "&{ &'%homedrive%%homepath%\RunAs.ps1' 'domain\username' }"
Reemplace la ruta con el lugar donde guarda el script RunAs.ps1, me gusta almacenar el mío en la raíz de mi carpeta de inicio.
Sé que esta es una vieja pregunta, pero en caso de que alguien necesite la versión de una línea de esto:
$unc = (gwmi Win32_LogicalDisk -filter "DeviceID = '$((Get-Location).Drive.Name):'").ProviderName
Me doy cuenta de que esta es una vieja pregunta, pero quería compartir otra forma de lograr esto:
$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 retirará toda la información sobre una unidad (nombre, espacio utilizado / libre, proveedor, raíz y ubicación actual) y pasar el parámetro Nombre como la letra de unidad actual (usando get-location) permite que esto funcione en múltiples escenarios (Esto también retirará la información sobre las unidades locales en la máquina).
Para que funcione en unidades locales y mapeadas, la comparación se realiza para completar $ root con la letra de unidad o la ubicación de red. .Root devolverá la letra de la unidad, y .DisplayRoot retirará la ruta de red (nulo si es una ruta local, que es la razón de la comparación)
Usando Join-Path, puede juntar la ruta, que devolverá una letra de unidad y la ubicación actual si es una ruta local, ruta de red y ubicación actual si es una unidad asignada.
Así que combina la mejor de las respuestas aquí en una sola línea; Prueba la ruta actual como UNC, asigna una unidad a la ruta actual, cambia a la nueva unidad asignada, si ya es una unidad asignada, no se toman medidas.
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}
No está destinado a responder el OP, solo agregue contenido útil. Tenía un script que necesitaba una unidad asignada en lugar de rutas UNC, así que hice esto para verificar si se estaba utilizando una UNC en PS, luego se asignó a una unidad usando esa ruta UNC, luego cambié a esa letra de unidad.
$CurrentFolder = "H:\Documents"
$Query = "Select * from Win32_NetworkConnection where LocalName = '" + $CurrentFolder.Substring( 0, 2 ) + "'"
( Get-WmiObject -Query $Query ).RemoteName
$Tst = $CurrentFolder.Substring( 0, 2 )
( Get-WmiObject -Query "Select * from Win32_NetworkConnection where LocalName = '$Tst'" ).RemoteName