পাওয়ারশেল স্ক্রিপ্টে ডিস্ক পার্ট ব্যবহার করা স্ক্রিপ্টটিকে ড্রাইভ চিঠিটি পুনরায় ব্যবহার করতে দেয় না


8

আমি একটি স্ক্রিপ্ট নির্মিত যে মাউন্ট (সংযুক্ত) একটি VHD ব্যবহার Diskpart , কিছু সিস্টেম ফাইল এবং তারপর unmounts (আলাদা) এটি সাফ করে। এটি একটি ফোরচ লুপ ব্যবহার করে এবং ধরে নেওয়া যায় যে একই ড্রাইভ লেটার ব্যবহার করে একাধিক ভিএইচডি পরিষ্কার করা যায়। তবে 1 ম ভিএইচডি পরে এটি ব্যর্থ হয়। আমি আরও লক্ষ্য করেছি যে আমি যখন ডিস্ক পার্টের সাথে ম্যানুয়ালি একটি ভিএইচডি সংযুক্ত করার চেষ্টা করি, ডিস্কপার্টটি সফল হয়, ডিস্ক ম্যানেজারটি সঠিক ড্রাইভের অক্ষর দিয়ে ডিস্কটি দেখায়, তবে একই PoSH উদাহরণের মধ্যে আমি সেই ড্রাইভের সাথে (সেট-লোকেশন) সংযোগ করতে পারি না। আমি যখন 1 তম পিওএসএইচ খুলি আমি কোনও ম্যানুয়াল ডিস্ক পার্ট করি তবে আমি যা চাই তা সংযুক্ত করতে এবং আলাদা করতে পারি এবং প্রতিবার ড্রাইভ চিঠিটি পাই। স্ক্রিপ্টে ডিস্কপার্টটি পুনরায় সেট করতে আমার কিছু করার দরকার আছে? আমি যে স্ক্রিপ্টটি ব্যবহার করছি তার একটি স্নিপেট এখানে।

function Mount-VHD {
         [CmdletBinding()]
         param (
                 [Parameter(Position=0,Mandatory=$true,ValueFromPipeline=$false)]
                         [string]$Path,
                 [Parameter(Position=1,Mandatory=$false,ValueFromPipeline=$false)]
                         [string]$DL,
                 [string]$DiskpartScript = "$env:SystemDrive\DiskpartScript.txt",
                 [switch]$Rescan
         )

         begin {
                 function InvokeDiskpart {
                         Diskpart.exe /s $DiskpartScript
                 }
                 ## Validate Operating System Version ##
                 if (Get-WmiObject win32_OperatingSystem -Filter "Version < '6.1'") {throw "The script operation requires at least Windows 7 or Windows Server 2008 R2."}
         }
         process{
                 ## Diskpart Script Content ## Here-String statement purposefully not indented ##
 @"
 $(if ($Rescan) {'Rescan'})
 Select VDisk File="$Path" `nAttach VDisk
 Exit
 "@ | Out-File -FilePath $DiskpartScript -Encoding ASCII -Force
                 InvokeDiskpart
 Start-Sleep -Seconds 3
 @"
 Select VDisk File="$Path"`nSelect partition 1 `nAssign Letter="$DL"
 Exit
 "@ | Out-File -FilePath $DiskpartScript -Encoding ASCII -Force
                 InvokeDiskpart
                         }
         end {
                 Remove-Item -Path $DiskpartScript -Force ; ""
                 Write-Host "The VHD ""$Path"" has been successfully mounted." ; ""
         }
 }
 function Dismount-VHD {
         [CmdletBinding()]
         param (
                 [Parameter(Position=0,Mandatory=$true,ValueFromPipeline=$false)]
                         [string]$Path,
                 [switch]$Remove,
                 [switch]$NoConfirm,
                 [string]$DiskpartScript = "$env:SystemDrive\DiskpartScript.txt",
                 [switch]$Rescan
         )

         begin {
                 function InvokeDiskpart {
                         Diskpart.exe /s $DiskpartScript
                 }

                 function RemoveVHD {
                         switch ($NoConfirm) {
                                 $false {
                                         ## Prompt for confirmation to delete the VHD file ##
                                         "" ; Write-Warning "Are you sure you want to delete the file ""$Path""?"
                                         $Prompt = Read-Host "Type ""YES"" to continue or anything else to break"
                                         if ($Prompt -ceq 'YES') {
                                                 Remove-Item -Path $Path -Force
                                                 "" ; Write-Host "VHD ""$Path"" deleted!" ; ""
                                         } else {
                                                 "" ; Write-Host "Script terminated without deleting the VHD file." ; ""
                                         }
                                 }
                                 $true {
                                         ## Confirmation prompt suppressed ##
                                         Remove-Item -Path $Path -Force
                                         "" ; Write-Host "VHD ""$Path"" deleted!" ; ""
                                 }
                         }
                 }
                 ## Validate Operating System Version ##
                 if (Get-WmiObject win32_OperatingSystem -Filter "Version < '6.1'") {throw "The script operation requires at least Windows 7 or Windows Server 2008 R2."}
         }
         process{
         ## DiskPart Script Content ## Here-String statement purposefully not indented ##
 @"
 $(if ($Rescan) {'Rescan'})
 Select VDisk File="$Path"`nDetach VDisk
 Exit
 "@ | Out-File -FilePath $DiskpartScript -Encoding ASCII -Force
                 InvokeDiskpart
                 Start-Sleep -Seconds 10
         }
         end {
                 if ($Remove) {RemoveVHD}
                 Remove-Item -Path $DiskpartScript -Force ; ""
         }
 }

তিন দিন এবং এখনও কোনও উত্তর নেই। কারো কোন ধারণা আছে? এটি আমার একটি প্রকল্পে একটি বড় বিলম্ব তৈরি করছে
কাইল

আপনি এই স্ক্রিপ্টটি কোন ওএসটিতে চালাচ্ছেন? আমি প্রধানত জিজ্ঞাসা করি কারণ 8/2012 সালে অন্তর্নির্মিত ভিএইচডি মাউন্ট / আনমাউন্টগুলি সেমিডলেট রয়েছে। আপনার কাছে 7 / 2008আর 2 প্রয়োজন একটি চেক রয়েছে তবে সর্বোচ্চ নয়।
মাইকবাজ - এমএসএফটি

উত্তর:


1

আমি আপনার স্ক্রিপ্টটি ঠিক কীভাবে ব্যর্থ হচ্ছে তা দেখতে পাচ্ছি না, তবে আপনি যে সেট-অবস্থান পরীক্ষাটি উল্লেখ করেছেন তা আমাকে স্ক্রিপ্টে বারবার মানচিত্র / আন-ম্যাপ / মানচিত্রের অবস্থানের চেষ্টা করার সময় আমার একটি সমস্যা মনে করেছিল।

/programming/10994979/net-use-only-works-once-in-powershell

সংক্ষিপ্ত ব্যবহারে FILESYSTEM::X:\

পরিবর্তে X:\

সম্পাদনা: ঠিক আছে তাই আমি আপনার স্ক্রিপ্টটি পড়ে 30 সেকেন্ডে ব্যয় করেছি। আমি রাখতাম

$Path = FILESYSTEM::$Path

প্রতিটি ফাংশন টু এ।


0

আমি জানি এটি সরাসরি উত্তর নয় তবে আপনি কি ড্রাইভ লেটারে এটি মাউন্ট না করার চেষ্টা করেছেন? ব্যবহার করুন assign mount=<PATH>বিকল্প পরিবর্তে এবং তামাশা উপ-ডিরেক্টরির মধ্যে কাজ আপনার ক্লিনার স্ক্রিপ্ট।

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