Supponendo che ho un disco mappato M:\
su \\SomeServer\SomeShare
e in PowerShell sono nella cartella M:\SomeFolder
come posso convertirlo in un percorso UNC, cioè \\SomeServer\SomeShare\SomeFolder
.
Supponendo che ho un disco mappato M:\
su \\SomeServer\SomeShare
e in PowerShell sono nella cartella M:\SomeFolder
come posso convertirlo in un percorso UNC, cioè \\SomeServer\SomeShare\SomeFolder
.
Risposte:
Sono abbastanza nuovo su PowerShell, quindi il codice seguente potrebbe essere di scarsa qualità. Tuttavia, dovrebbe ottenere le informazioni desiderate:
$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 dovrebbe contenere il percorso UNC che stai cercando.
Per chiunque sia interessato allo script RunAs per 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' }\`""
E la riga di comando in StExBar è:
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -Command "&{ &'%homedrive%%homepath%\RunAs.ps1' 'domain\username' }"
Sostituisci il percorso con il punto in cui mantieni lo script RunAs.ps1, mi piace archiviare il mio nella cartella principale della mia home.
So che questa è una vecchia domanda, ma nel caso in cui qualcuno abbia bisogno della versione a una riga di questo:
$unc = (gwmi Win32_LogicalDisk -filter "DeviceID = '$((Get-Location).Drive.Name):'").ProviderName
Mi rendo conto che questa è una vecchia domanda, ma volevo condividere un altro modo per farlo:
$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 ritirerà tutte le informazioni su un'unità (nome, spazio usato / libero, provider, root e posizione corrente) e passando il parametro Name come la lettera di unità corrente (usando get-location) consente di farlo funzionare in più scenari (anche questo tirerà indietro le informazioni sulle unità locali sulla macchina).
Per farlo funzionare su entrambe le unità locali e mappate, viene eseguito il confronto per popolare $ root con la lettera dell'unità o il percorso di rete. .Root restituirà la lettera dell'unità e .DisplayRoot tirerà indietro il percorso di rete (null se si tratta di un percorso locale, che è la ragione del confronto)
Utilizzando Join-Path, è possibile riunire il percorso, che restituirà una lettera di unità e la posizione corrente se si tratta di un percorso locale, percorso di rete e posizione corrente se si tratta di un'unità mappata.
Quindi, combinando qui la migliore delle risposte in una sola riga; Verifica il percorso corrente come UNC, associa un'unità al percorso corrente, passa a una nuova unità mappata, se è già un'unità mappata, non viene intrapresa alcuna azione.
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}
Non intendo rispondere al PO, basta aggiungere contenuti utili. Avevo uno script di cui avevo bisogno di mappare l'unità anziché i percorsi UNC, quindi l'ho fatto per verificare se in PS veniva utilizzato un UNC, quindi mappare su un'unità utilizzando quel percorso UNC, quindi passare a quella lettera di unità.
$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