यह मानते हुए कि मेरे पास मैप्ड ड्राइव M:\है \\SomeServer\SomeShareऔर पावरशेल में मैं फ़ोल्डर में M:\SomeFolderहूं कि मैं इसे यूएनसी पथ में कैसे परिवर्तित करूं, अर्थात \\SomeServer\SomeShare\SomeFolder।
यह मानते हुए कि मेरे पास मैप्ड ड्राइव M:\है \\SomeServer\SomeShareऔर पावरशेल में मैं फ़ोल्डर में M:\SomeFolderहूं कि मैं इसे यूएनसी पथ में कैसे परिवर्तित करूं, अर्थात \\SomeServer\SomeShare\SomeFolder।
जवाबों:
मैं PowerShell में काफी नया हूं, इसलिए नीचे दिया गया कोड खराब गुणवत्ता वाला हो सकता है। हालाँकि, इसे वह जानकारी मिलनी चाहिए जो आप चाहते हैं:
$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)
$ अनपैथ में UNC पथ होना चाहिए जिसे आप ढूंढ रहे हैं।
StExBar के लिए RunAs स्क्रिप्ट में रुचि रखने वाले किसी भी व्यक्ति के लिए यह है:
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' }\`""
और StExBar में कमांड लाइन है:
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -Command "&{ &'%homedrive%%homepath%\RunAs.ps1' 'domain\username' }"
उस पथ को बदलें जहाँ आप कभी भी RunAs.ps1 स्क्रिप्ट रखते हैं, मुझे अपने होम फ़ोल्डर की जड़ में स्टोर करना पसंद है।
मुझे पता है कि यह एक पुराना सवाल है, लेकिन अगर किसी को इसके एक लाइन संस्करण की आवश्यकता है:
$unc = (gwmi Win32_LogicalDisk -filter "DeviceID = '$((Get-Location).Drive.Name):'").ProviderName
मुझे लगता है कि यह एक पुराना सवाल है, लेकिन मैं इसे पूरा करने के लिए एक और तरीका साझा करना चाहता था:
$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 एक ड्राइव (नाम, प्रयुक्त / निशुल्क स्थान, प्रदाता, रूट और वर्तमान स्थान) के बारे में सभी जानकारी को वापस खींच लेगा और वर्तमान पैरामीटर अक्षर (गेट-लोकेशन का उपयोग करके) के रूप में नाम पैरामीटर को पास करने से यह कई स्केनरियोस में काम करने की अनुमति देता है (यह मशीन पर स्थानीय ड्राइव की जानकारी भी वापस खींच लेगा)।
इसे स्थानीय और मैप किए गए दोनों ड्राइव पर काम करने के लिए ड्राइव लेटर या नेटवर्क लोकेशन के साथ $ जड़ को पॉप्युलेट करने के लिए तुलना की जाती है। .Root ड्राइव लेटर को वापस भेज देगा, और .DisplayRoot नेटवर्क पाथ को वापस खींच लेगा (यदि यह एक लोकल पाथ है, जो कि तुलना का कारण है)
Join-Path का उपयोग करते हुए, फिर आप एक साथ पाथ खींच सकते हैं, जो एक ड्राइव लेटर और करंट लोकेशन को लौटा देगा यदि यह एक लोकल पाथ, नेटवर्क पाथ और करंट लोकेशन है यदि यह मैप्ड ड्राइव है।
तो यहां सर्वश्रेष्ठ उत्तरों को एक-लाइनर में संयोजित करना; यूएनसी के रूप में वर्तमान पथ के लिए टेस्ट, वर्तमान पथ पर ड्राइव को मैप करता है, नए मैप किए गए ड्राइव में परिवर्तन करता है, यदि पहले से मैप किया गया ड्राइव है, तो कोई कार्रवाई नहीं की जाती है।
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}
ओपी का जवाब देने का इरादा नहीं है, बस उपयोगी सामग्री जोड़ें। एक स्क्रिप्ट थी जिसे मुझे UNC रास्तों के बजाय मैप की गई ड्राइव की आवश्यकता थी, इसलिए मैंने यह जांचने के लिए किया कि यदि कोई UNC PS में उपयोग किया जा रहा है, तो उस UNC पथ का उपयोग करके ड्राइव पर मैप करें, फिर उस ड्राइव अक्षर पर स्विच करें।
$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