Angenommen, ich habe ein zugeordnetes Laufwerk M:\
zu \\SomeServer\SomeShare
und in PowerShell bin ich im Ordner M:\SomeFolder
Wie konvertiere ich das in einen UNC-Pfad, d. h. \\SomeServer\SomeShare\SomeFolder
.
Angenommen, ich habe ein zugeordnetes Laufwerk M:\
zu \\SomeServer\SomeShare
und in PowerShell bin ich im Ordner M:\SomeFolder
Wie konvertiere ich das in einen UNC-Pfad, d. h. \\SomeServer\SomeShare\SomeFolder
.
Antworten:
Ich bin relativ neu bei PowerShell, daher ist der Code möglicherweise von schlechter Qualität. Es sollte jedoch die gewünschten Informationen erhalten:
$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 sollte den UNC-Pfad enthalten, nach dem Sie suchen.
Für alle, die sich für das RunAs-Skript für StExBar interessieren, gilt Folgendes:
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' }\`""
Die Befehlszeile in StExBar lautet:
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -Command "&{ &'%homedrive%%homepath%\RunAs.ps1' 'domain\username' }"
Ersetzen Sie den Pfad durch die Stelle, an der Sie das Skript RunAs.ps1 aufbewahren, und ich speichere es gerne im Stammverzeichnis meines Basisordners.
Ich weiß, das ist eine alte Frage, aber falls jemand die einzeilige Version davon braucht:
$unc = (gwmi Win32_LogicalDisk -filter "DeviceID = '$((Get-Location).Drive.Name):'").ProviderName
Ich weiß, dass dies eine alte Frage ist, aber ich wollte einen anderen Weg zeigen, um dies zu erreichen:
$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 holt alle Informationen zu einem Laufwerk zurück (Name, belegter / freier Speicherplatz, Anbieter, Stammverzeichnis und aktueller Speicherort). Wenn der Parameter Name als aktueller Laufwerksbuchstabe übergeben wird (mithilfe von get-location), kann dies in mehreren Szenarien funktionieren (Dadurch werden auch Informationen zu lokalen Laufwerken der Maschine abgerufen).
Damit es sowohl auf lokalen als auch auf zugeordneten Laufwerken funktioniert, wird der Vergleich durchgeführt, um $ root mit dem Laufwerksbuchstaben oder dem Netzwerkspeicherort aufzufüllen. Der .Root sendet den Laufwerksbuchstaben zurück und der .DisplayRoot zieht den Netzwerkpfad zurück (null, wenn es sich um einen lokalen Pfad handelt, der der Grund für den Vergleich ist).
Mit Join-Path können Sie den Pfad zusammenfassen, der einen Laufwerksbuchstaben und den aktuellen Speicherort zurückgibt, wenn es sich um einen lokalen Pfad, einen Netzwerkpfad und um einen aktuellen Speicherort handelt, wenn es sich um ein zugeordnetes Laufwerk handelt.
Also die besten Antworten hier zu einem Einzeiler kombinieren; Prüft den aktuellen Pfad als UNC, ordnet ein Laufwerk dem aktuellen Pfad zu, wechselt zu einem neuen zugeordneten Laufwerk. Wenn bereits ein zugeordnetes Laufwerk vorhanden ist, wird keine Aktion ausgeführt.
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}
Nicht zur Beantwortung des OP gedacht, fügen Sie einfach nützliche Inhalte hinzu. Ich hatte ein Skript, das ich anstelle von UNC-Pfaden einem zugeordneten Laufwerk benötigte. Daher überprüfte ich, ob ein UNC in PS verwendet wurde. Anschließend wurde ein Laufwerk mit diesem UNC-Pfad zugeordnet und dann zu diesem Laufwerkbuchstaben gewechselt.