পাওয়ারশেলের স্থানীয় পথ থেকে বর্তমান ইউএনসি পথটি পান


10

ধরে নিলাম আমার কাছে ম্যাপড ড্রাইভ M:\আছে \\SomeServer\SomeShareএবং পাওয়ারশালে আমি ফোল্ডারে থাকি কীভাবে আমি এটিকে ইউএনসির M:\SomeFolderপথে রূপান্তর করব, অর্থাৎ \\SomeServer\SomeShare\SomeFolder


স্ট্যাকওভারফ্লোতে থাকা উচিত?
চামচ

উত্তর:


14

আমি পাওয়ারশেলে মোটামুটি নতুন, তাই নীচের কোডটি নিম্নমানের হতে পারে। তবে এটি আপনার যে তথ্য চান তা পাওয়া উচিত:

$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)

$ আনপথে ইউএনসি পাথটি থাকা উচিত যা আপনি সন্ধান করছেন।


অনেক ধন্যবাদ, যে নিখুঁতভাবে কাজ করে। স্থানীয় পাথগুলির সাথে কাজ করার জন্য আমি এটিকে কিছুটা সংশোধন করেছি, এটি স্টেক্সবার + রানাস + পাওয়ারসেলের সাথে আমার বিরক্তিকর সমস্যাগুলি কোনও ম্যাপড ড্রাইভের সাথে সমাধান করতে হবে।
ক্রিস চিলভার্স

@ ফায়ারফ্লাই, লোকাল ড্রাইভগুলি (যেমন eg সি: `) সমর্থন করার জন্য কীভাবে এটি পরিবর্তন করা দরকার? এটির জন্য সম্ভবত মেশিনটির নাম অন্তর্ভুক্ত করা দরকার, তবে আমি জানি না যে কীভাবে একজন এইচডিডি এবং সিডি / ডিভিডি ড্রাইভের মধ্যে পার্থক্য করতে পারে।
ক্রেগ

4

স্টেক্সবারের জন্য রানআস স্ক্রিপ্টে আগ্রহী যে কোনও ব্যক্তির জন্য এটি হ'ল:

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' }\`""

এবং স্টেক্সবারে কমান্ড লাইনটি হ'ল:

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -Command "&{ &'%homedrive%%homepath%\RunAs.ps1' 'domain\username' }"

আপনি যেখানেই রানআস.পিএস 1 স্ক্রিপ্ট রেখেছেন সেই পথটি প্রতিস্থাপন করুন, আমি আমার বাড়ির ফোল্ডারের মূলটিতে আমার সঞ্চয় করতে চাই।


3

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে কারও ক্ষেত্রে এর এক লাইন সংস্করণ প্রয়োজন:

$unc = (gwmi Win32_LogicalDisk -filter "DeviceID = '$((Get-Location).Drive.Name):'").ProviderName

আপনি যদি ড্রাইভ-ম্যাপযুক্ত নেটওয়ার্কের পথে থাকেন তবে এটি কেবলমাত্র কার্যকর হয় Note আপনি যদি স্থানীয় পথে থাকেন তবে প্রোভাইডার নামটি বাতিল; আপনি যদি ড্রাইভবিহীন ম্যাপযুক্ত নেটওয়ার্কের পথে থাকেন তবে ড্রাইভটি শূন্য। যদি আপনাকে এই 3 টি ক্ষেত্রে পার্থক্য করতে হয় তবে একটি ওয়ান-লাইনার এটি কাটবে না।
টিম্বো

3

আমি বুঝতে পারি এটি একটি পুরানো প্রশ্ন, তবে আমি এটি সম্পাদন করার জন্য অন্য একটি উপায় ভাগ করতে চেয়েছিলাম:

$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

গেট-পিএসডিআরআইভ কোনও ড্রাইভ সম্পর্কিত সমস্ত তথ্য (নাম, ব্যবহৃত / মুক্ত স্থান, সরবরাহকারী, মূল এবং বর্তমান অবস্থান) ফিরিয়ে আনবে এবং বর্তমান ড্রাইভ লেটার হিসাবে নাম প্যারামিটারটি (গেট-লোকেশন ব্যবহার করে) একাধিক দৃশ্যে কাজ করার অনুমতি দেয় (এটি মেশিনে লোকাল ড্রাইভের তথ্যও ফিরিয়ে আনবে)।

এটি স্থানীয় এবং ম্যাপযুক্ত ড্রাইভ উভয় ক্ষেত্রেই কাজ করার জন্য তুলনাটি ড্রাইভ চিঠি বা নেটওয়ার্কের অবস্থানের সাথে $ মূলকে পপুলেট করার জন্য করা হয়। । রুট ড্রাইভ চিঠিটি ফেরত পাঠাবে, এবং .ডিসপ্লে রুটটি নেটওয়ার্কের পথটি আবার টেনে তুলবে (এটি যদি স্থানীয় পথ হয় তবে এটি তুলনার কারণ)

জয়েন-পাথ ব্যবহার করে, আপনি সেই পথটি একসাথে টানতে পারবেন, এটি কোনও স্থানীয় পাথ, নেটওয়ার্কের পথ এবং বর্তমান অবস্থান যদি কোনও ম্যাপযুক্ত ড্রাইভ থাকে তবে কোনও ড্রাইভ লেটার এবং বর্তমান অবস্থান ফিরিয়ে আনবে।


এটি কিভাবে কাজ করে ব্যাখ্যা করুন?
অ্যাডাম 15

1
ব্যাখ্যা ব্যাখ্যা - এটি কল করার জন্য ধন্যবাদ।
রায়ান

1
আপনি যদি শেয়ারপয়েন্টের সাথে কাজ করছেন ঠিক তেমন তথ্য। আমি নিউ-পিএসডিআরভিউ সেমিডিলেট ব্যবহার করে একটি শেয়ারপয়েন্ট ডকুমেন্ট লাইব্রেরিতে একটি ড্রাইভ ম্যাপ করেছি। এক্ষেত্রে আমার কাছে নেম সম্পত্তিটিতে ড্রাইভ লেটার রয়েছে, রুটের সম্পত্তিটিতে ইউএনসি পাথ থাকে এবং ডিসপ্লে রুট সম্পত্তি খালি থাকে।
ফোপ্পার

0

সুতরাং উত্তরের উত্তমকে এখানে এক-লাইনের সাথে সংযুক্ত করে; ইউএনসি হিসাবে বর্তমান পাথের পরীক্ষাগুলি, বর্তমান পথটিতে একটি ড্রাইভের মানচিত্র, নতুন ম্যাপযুক্ত ড্রাইভে পরিবর্তন, যদি ইতিমধ্যে ম্যাপযুক্ত ড্রাইভ থাকে তবে কোনও পদক্ষেপ নেওয়া হয় না।

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}

ওপিকে উত্তর দেওয়ার উদ্দেশ্যে নয়, কেবল দরকারী সামগ্রী যুক্ত করুন। একটি স্ক্রিপ্ট ছিল যে আমার ইউএনসি পাথের পরিবর্তে ম্যাপিং ড্রাইভের দরকার ছিল, সুতরাং আমি কোনও ইউএনসি পিএস-তে ব্যবহার করা হচ্ছে কিনা তা পরীক্ষা করতে এটি করেছি, তারপরে সেই ইউএনসি পাথ ব্যবহার করে কোনও ড্রাইভে ম্যাপ করুন, তারপরে সেই ড্রাইভ চিঠিতে স্যুইচ করুন।


-2
$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

1
এই কোডটি কী করে তা আপনাকে বিশদভাবে জানাবে? দয়া করে দেখুন কীভাবে উত্তর দেবেন এবং আমাদের ভ্রমণটি করুন
বুড়ি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.