Dengan asumsi saya memiliki drive yang dipetakan M:\
ke \\SomeServer\SomeShare
dan di PowerShell saya di folder M:\SomeFolder
bagaimana cara mengubahnya menjadi jalur UNC, yaitu \\SomeServer\SomeShare\SomeFolder
.
Dengan asumsi saya memiliki drive yang dipetakan M:\
ke \\SomeServer\SomeShare
dan di PowerShell saya di folder M:\SomeFolder
bagaimana cara mengubahnya menjadi jalur UNC, yaitu \\SomeServer\SomeShare\SomeFolder
.
Jawaban:
Saya cukup baru di PowerShell, jadi kode di bawah ini mungkin berkualitas buruk. Namun, itu harus mendapatkan informasi yang Anda inginkan:
$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 harus berisi jalur UNC yang Anda cari.
Untuk siapa pun yang tertarik dengan skrip RunAs untuk StExBar, itu adalah:
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' }\`""
Dan baris perintah di StExBar adalah:
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -Command "&{ &'%homedrive%%homepath%\RunAs.ps1' 'domain\username' }"
Ganti jalur dengan tempat Anda menyimpan skrip RunAs.ps1, saya ingin menyimpan milik saya di root folder rumah saya.
Saya tahu ini adalah pertanyaan lama, tetapi jika seseorang membutuhkan versi satu baris ini:
$unc = (gwmi Win32_LogicalDisk -filter "DeviceID = '$((Get-Location).Drive.Name):'").ProviderName
Saya menyadari ini adalah pertanyaan lama, tetapi saya ingin berbagi cara lain untuk mencapai ini:
$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 akan menarik kembali semua informasi tentang drive (nama, ruang bekas / bebas, penyedia, root, dan lokasi saat ini) dan meneruskan parameter Nama sebagai huruf drive saat ini (menggunakan get-location) memungkinkan ini untuk berfungsi di banyak scenerio. (ini juga akan menarik kembali informasi tentang drive lokal pada mesin).
Untuk membuatnya bekerja pada drive lokal dan yang dipetakan, perbandingan dilakukan untuk mengisi $ root dengan huruf drive atau lokasi jaringan. .Root akan mengirim kembali huruf drive, dan .DisplayRoot akan menarik kembali jalur jaringan (nol jika itu adalah jalur lokal, yang merupakan alasan untuk perbandingan)
Menggunakan Join-Path, maka Anda dapat menarik bersama path, yang akan mengembalikan huruf drive dan lokasi saat ini jika itu adalah jalur lokal, jalur jaringan, dan lokasi saat ini jika itu adalah drive yang dipetakan.
Jadi menggabungkan jawaban terbaik di sini menjadi satu kalimat; Menguji jalur saat ini sebagai UNC, memetakan drive ke jalur saat ini, perubahan ke drive yang dipetakan baru, jika sudah drive yang dipetakan, tidak ada tindakan yang diambil.
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}
Tidak dimaksudkan untuk menjawab OP, cukup tambahkan konten yang bermanfaat. Memiliki skrip yang saya perlukan memetakan drive, bukan jalur UNC, jadi saya melakukan ini untuk memeriksa apakah UNC digunakan di PS, lalu memetakan ke drive menggunakan jalur UNC itu, kemudian beralih ke huruf drive itu.
$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