Giả sử tôi có một ổ đĩa được ánh xạ M:\
tới \\SomeServer\SomeShare
và trong powershell Tôi đang ở trong thư mục, M:\SomeFolder
làm thế nào để tôi chuyển đổi nó thành một đường dẫn UNC, tức là \\SomeServer\SomeShare\SomeFolder
.
Giả sử tôi có một ổ đĩa được ánh xạ M:\
tới \\SomeServer\SomeShare
và trong powershell Tôi đang ở trong thư mục, M:\SomeFolder
làm thế nào để tôi chuyển đổi nó thành một đường dẫn UNC, tức là \\SomeServer\SomeShare\SomeFolder
.
Câu trả lời:
Tôi khá mới với PowerShell, vì vậy mã dưới đây có thể kém chất lượng. Tuy nhiên, cần có thông tin bạn muốn:
$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)
$ unsPath nên chứa đường dẫn UNC mà bạn đang tìm kiếm.
Đối với bất kỳ ai quan tâm đến tập lệnh RunAs cho StExBar, đó là:
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' }\`""
Và dòng lệnh trong StExBar là:
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -Command "&{ &'%homedrive%%homepath%\RunAs.ps1' 'domain\username' }"
Thay thế đường dẫn bằng bất cứ nơi nào bạn giữ tập lệnh RunAs.ps1, tôi muốn lưu trữ của tôi trong thư mục gốc của tôi.
Tôi biết đây là một câu hỏi cũ, nhưng trong trường hợp ai đó cần phiên bản một dòng này:
$unc = (gwmi Win32_LogicalDisk -filter "DeviceID = '$((Get-Location).Drive.Name):'").ProviderName
Tôi nhận ra đây là một câu hỏi cũ, nhưng tôi muốn chia sẻ một cách khác để thực hiện điều này:
$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 sẽ lấy lại tất cả thông tin về một ổ đĩa (tên, không gian đã sử dụng / không gian trống, nhà cung cấp, vị trí gốc và vị trí hiện tại) và truyền tham số Tên dưới dạng ký tự ổ đĩa hiện tại (sử dụng get-location) cho phép nó hoạt động trong nhiều khung cảnh (điều này cũng sẽ lấy lại thông tin về các ổ đĩa cục bộ trên máy).
Để làm cho nó hoạt động trên cả ổ đĩa cục bộ và ánh xạ, việc so sánh được thực hiện để điền $ root với ký tự ổ đĩa hoặc vị trí mạng. .Root sẽ gửi lại ký tự ổ đĩa và .DisplayRoot sẽ kéo lại đường dẫn mạng (null nếu đó là đường dẫn cục bộ, đó là lý do để so sánh)
Sử dụng Đường dẫn tham gia, sau đó bạn có thể kết hợp đường dẫn, sẽ trả về ký tự ổ đĩa và vị trí hiện tại nếu đó là đường dẫn cục bộ, đường dẫn mạng và vị trí hiện tại nếu đó là ổ đĩa được ánh xạ.
Vì vậy, kết hợp tốt nhất của các câu trả lời ở đây thành một lót; Kiểm tra đường dẫn hiện tại là UNC, ánh xạ ổ đĩa sang đường dẫn hiện tại, thay đổi ổ đĩa được ánh xạ mới, nếu đã là ổ đĩa được ánh xạ, sẽ không có hành động nào được thực hiện.
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}
Không có ý định trả lời OP, chỉ cần thêm nội dung hữu ích. Có một tập lệnh mà tôi cần ánh xạ ổ đĩa thay vì đường dẫn UNC, vì vậy tôi đã làm điều này để kiểm tra xem UNC có được sử dụng trong PS không, sau đó ánh xạ tới ổ đĩa bằng đường dẫn UNC đó, sau đó chuyển sang ký tự ổ đĩa đó.
$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