Bir eşlenen sürücü var varsayarsak M:\
için \\SomeServer\SomeShare
ve powershell ben klasöründe olduğum M:\SomeFolder
nasıl yaptıklarını yani bir UNC yolu, bu dönüştürmek \\SomeServer\SomeShare\SomeFolder
.
Bir eşlenen sürücü var varsayarsak M:\
için \\SomeServer\SomeShare
ve powershell ben klasöründe olduğum M:\SomeFolder
nasıl yaptıklarını yani bir UNC yolu, bu dönüştürmek \\SomeServer\SomeShare\SomeFolder
.
Yanıtlar:
PowerShell için oldukça yeniyim, bu nedenle aşağıdaki kod kalitesiz olabilir. Ancak, istediğiniz bilgileri almalıdır:
$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, aradığınız UNC yolunu içermelidir.
StExBar için RunAs betiği ile ilgilenen herhangi biri için:
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' }\`""
Ve StExBar'daki komut satırı:
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -Command "&{ &'%homedrive%%homepath%\RunAs.ps1' 'domain\username' }"
Yolu RunAs.ps1 betiğini sakladığınız yerle değiştirin, benim ana klasörümün kökünde benimkini saklamak istiyorum.
Bu eski bir soru olduğunu biliyorum, ama birisi bunun bir satır sürümüne ihtiyaç durumunda:
$unc = (gwmi Win32_LogicalDisk -filter "DeviceID = '$((Get-Location).Drive.Name):'").ProviderName
Bunun eski bir soru olduğunun farkındayım, ancak bunu başarmanın başka bir yolunu paylaşmak istedim:
$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, bir sürücü (ad, kullanılan / boş alan, sağlayıcı, kök ve geçerli konum) hakkındaki tüm bilgileri geri alır ve Name parametresini geçerli sürücü harfi olarak (get-location kullanarak) iletmek, bunun birden fazla senaryoda çalışmasına izin verir (bu aynı zamanda makinedeki yerel sürücüler hakkındaki bilgileri geri alır).
Hem yerel hem de eşlenmiş sürücülerde çalışmasını sağlamak için, $ root'u sürücü harfi veya ağ konumu ile doldurmak için karşılaştırma yapılır. .Root sürücü harfini geri gönderir ve .DisplayRoot ağ yolunu geri çeker (karşılaştırmanın nedeni bu yerel bir yolsa null)
Birleştirme Yolu'nu kullanarak, bir yerel yol, ağ yolu ve eşlenmiş bir sürücü ise geçerli konum ise bir sürücü harfi ve geçerli konumu döndürecek yolu bir araya getirebilirsiniz.
Buradaki cevapların en iyilerini tek satırda birleştirmek; Geçerli yolu UNC olarak test eder, bir sürücüyü geçerli yola eşler, yeni eşlenen sürücüye değişir, zaten eşlenmiş bir sürücü varsa, herhangi bir işlem yapılmaz.
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'ye cevap vermek için tasarlanmamıştır, sadece yararlı içerik ekleyin. UNC yolları yerine eşlenmiş sürücüye ihtiyaç duyduğum bir komut dosyası vardı, bu yüzden bunu bir UNC'nin PS'de kullanılıp kullanılmadığını kontrol etmek için yaptım, daha sonra bu UNC yolunu kullanarak bir sürücüye eşleyin, sonra bu sürücü harfine geçin.
$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