分類: DOS Command

用Powershell取代Diskpart

用Powershell取代Diskpart

一直以來都很習慣使用Diskpart來執行磁碟機操作,利用呼叫Diskpart搭配參數給他txt檔,很放便可以做成批次執行。當然用Powershell也能這樣呼叫Diskpart帶參數也可以。不過如果能用Powershell直接對磁碟進行操作當然是更好的。

列出所有磁碟


1
Get-Disk

列出所有分割區


1
Get-Partition

列出磁碟 0 的分割區


1
Get-Partition -DiskNumber 0

清除磁碟【警告:清除之前請確認磁碟號碼


1
Get-disk 4 | Clear-Disk -RemoveData

建立分割區,使用全部空間


1
New-Partition -DiskNumber 4 -UseMaximumSize

建立分割區,先使用部分空間32GB,然後再使用剩下空間
(分割為兩個磁碟區)


1
New-Partition -DiskNumber 4 -Size 32GB

1
New-Partition -DiskNumber 4 -UseMaximumSize

格式化磁碟4分割區1為NTFS


1
Get-Partition -DiskNumber 4 -PartitionNumber 1 | Format-Volume -FileSystem NTFS

格式化磁碟4分割區2為FAT32


1
Get-Partition -DiskNumber 4 -PartitionNumber 2 | Format-Volume -FileSystem FAT32

指定磁碟4分割區1磁碟機代號為L
指定磁碟4分割區2磁碟機代號為M


1
2
Set-Partition -DiskNumber 4 -PartitionNumber 1 -NewDriveLetter L
Set-Partition -DiskNumber 4 -PartitionNumber 2 -NewDriveLetter M

更換磁碟機代號L為Q


1
Set-Partition -DriveLetter L -NewDriveLetter Q

下面是一段我寫在批次檔裡面使用Diskpart 叫用文字檔當參數的內容
環境大概是主機裡有一顆500G硬碟,已經切了200G做C,剩下的尚未指定。
當下的隨身碟是D,因此我必須先將隨身碟變更磁碟機代號為E,然後將本機硬碟剩下的空間分割為D並快速格式化NTFS,本機硬碟磁區0/1為EFI/還原用保護磁區,磁區3為C,所以選擇磁碟4來分割操作。


1
2
3
4
5
6
7
8
9
select disk 1
select partition 1
assign letter=e
select disk 0
create partition primary
select partition 4
FORMAT FS=NTFS LABEL="DATA" quick
assign letter=d
exit

換成Powershell,兩行搞定


1
2
Set-Partition -DriveLetter D -NewDriveLetter E
New-Partition -DiskNumber 0 -UseMaximumSize -IsActive -DriveLetter D  | Format-Volume -FileSystem NTFS -NewFileSystemLabel Data

關於MBR / GPT轉換,Powershell預設操作Clear-Disk完就是GPT,要轉回MBR目前看來只能找Diskpart


1
2
Select disk 4
convert mbr
Powershell:與Batch讀取txt檔內容作為變數

Powershell:與Batch讀取txt檔內容作為變數

如果你寫了很多Powershell或批次檔是放在Fileserver/ShareFolder給大家用,
那麼FileServer搬家對你來說肯定是個痛苦,因為如果當初你的路徑是寫死的,髂麼肯定是很痛苦的。

最早,我都是在Powershell/Batch檔頭做變數宣告,例如:


1
2
3
Dos command / Batch
%Srv_A% = \\1.2.3.4
%Srv_B% = \\5.6.7.8

1
2
3
Powershell
$Srv_A = \\1.2.3.4
$Srv_B = \\5.6.7.8

但是如果這類的Script越來越多,某一天Share Folder搬家的時候也是改得很痛苦。所以我就萌生了如何可以一次改好的方式。把路徑的變數放在某個TXT檔案,需要的時候去讀出來就好了。

下面是文字檔的部分,我自己命名為GlobalVar.txt


1
2
FSRV_A=\\1.2.3.4
FSRV_B=\\5.6.7.8

Dos Command / Batch讀取方式,在檔頭放這一行利用 %~dp0的方式來讀取同目錄的txt檔案


1
for /f "delims== tokens=1,2" %%G in (%~dp0GlobalVar.txt) do set %%G=%%H

Powershell讀取方式,在檔頭放這一行,利用$PSScriptRoot來讀取同目錄txt檔案。


1
2
3
4
Get-Content $PSScriptRoot\GlobalVar.txt | Foreach-Object{
   $var = $_.Split('=')
   New-Variable -Name $var[0] -Value $var[1]
}

如果你沒有把Script放的太多目錄,這樣應該可以減少你Share Folder搬家時的困擾。

Tree.exe

Tree.exe

這一個很簡單地描繪出硬碟目錄結構與檔案名稱的方式,搭配輸出成文字檔,可以提供快速檢視目錄檔案結構的方式

他的參數就只有兩個:
/F 在目錄下,列出所有檔案名稱。
/A 使用ASCII代替延伸字元

通常只會/F就很方便輸出整個目錄檔案結構了


1
tree /f D:\Test