winlin
Goto Top

Resize HD script Windows

Hallo Leute,

ich habe virtuelle Maschinen unter W2K12R2 am laufen. Bei manchen werden Platten vergrössert wenn das gewollt wird. Passiert dann im vcenter auf der "VM". Um dann per Skript diese platte zu erkennen zu assignen und im Arbeitsplatz verfügbar zu machen habe ich dieses Skript:
1
2
3
Initialize-Disk 1
New-Partition -DiskNumber 1 -AssignDriveLetter -UseMaximumSize 
Format-Volume -DriveLetter D -Confirm:$false -FileSystem NTFS -force

Wie müsste das Skript aussehen wenn ich es gerne in mein OS template in den Autostart packen möchte? Ziel ist es das Wenn eine VM aus diesem Template erstellt wird, die Platten geprüft werden und wenn eine un-assignte Platte da ist das diese als neue Festplatte dem System hinzugefügt wird.

Wenn ich das o.g. Skript in den Autostart tue und bei jedem Start oder Login ausführen lasse dann löscht er mir ja immer die komplette Platte face-smile

Content-ID: 395999

Url: https://administrator.de/forum/resize-hd-script-windows-395999.html

Ausgedruckt am: 06.04.2025 um 17:04 Uhr

emeriks
emeriks 18.12.2018 um 15:40:39 Uhr
Goto Top
Hi,
irgendwie passen Deine Sätze nicht zusammen. Reden wir jetzt von vergrößerten HDD oder von neu hinzugefügten HDD?

E.
winlin
winlin 19.12.2018 um 07:54:18 Uhr
Goto Top
Sorry meinte von neu hinzugefügten hdd.

Szenario:
1. vm hat nur eine systemplatte und es wird eine neue Platte hinzugefügt übers vcenter. Hier sollte das Skript beim starten der vm im os diese erkennen und einrichten.

2. vm hat schon eine zweite Platte und diese wird nur im vcenter vergrößert . In diesem Fall sollte das Skript die zweite platte im os beim starten erweitern.
colinardo
Lösung colinardo 19.12.2018 aktualisiert um 17:38:23 Uhr
Goto Top
Servus.
1
2
3
4
5
6
7
# initialize uninitialized raw disks (set partition scheme to your needs)
Get-Disk | ?{$_.PartitionStyle -eq 'Raw'} | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -UseMaximumSize -AssignDriveLetter | Format-Volume -FileSystem NTFS -Force -Confirm:$false  

# extend last partition of extended disks to the max if there is free extend
Get-Disk  | ?{$_.Number -ne 0 -and $_.LargestFreeExtent -gt 0} | Get-Partition | sort PartitionNumber -Desc | select -F 1 | %{
    Resize-Partition -DiskNumber $_.Disknumber -PartitionNumber $_.Partitionnumber -Size ((Get-PartitionSupportedSize -DiskNumber $_.DiskNumber -PartitionNumber $_.PartitionNumber).SizeMax) -Verbose
}
Grüße Uwe
winlin
winlin 20.12.2018 um 15:07:28 Uhr
Goto Top
Du hast mir seeehr geholfen viiielen dank
colinardo
colinardo 20.12.2018 um 15:13:53 Uhr
Goto Top
Gern geschehen face-smile

Frohes Fest.
Uwe
winlin
winlin 04.02.2019 um 14:00:40 Uhr
Goto Top
hey vielleicht kannst du mir nochmal aushelfenface-smile

das skript funktiooniert tadellos. Ich würde aber nun gerne ein skript erstellen welches mir einen task erstellt der dein skript bei jedem startup ausführt. Somit müsste ich diese Task in meinem template nicht manuell anlegen.
colinardo
colinardo 04.02.2019 aktualisiert um 14:06:43 Uhr
Goto Top
Zitat von @winlin:
das skript funktiooniert tadellos. Ich würde aber nun gerne ein skript erstellen welches mir einen task erstellt der dein skript bei jedem startup ausführt. Somit müsste ich diese Task in meinem template nicht manuell anlegen.
Wo ist das Problem?
https://docs.microsoft.com/en-us/powershell/module/scheduledtasks/new-sc ...
https://blogs.technet.microsoft.com/heyscriptingguy/2015/01/13/use-power ...
winlin
winlin 04.02.2019 aktualisiert um 14:29:09 Uhr
Goto Top
So ungefähr? Soll beim erstmaligen ausführen einen task anlegen der dann bei jedem startup ausgeführt werden soll. Das skript habe ich angegeben das es lokal auf der VM liegt. Kann ich das Skript auch hier in dem code einfügen, sodass ich mir es sparen kann das ich das skript auf der VM pflegen muss???

1
2
3
4
5
$Trigger= New-ScheduledTaskTrigger -AtStartup
$User= "NT AUTHORITY\SYSTEM"  
$task.Settings.Hidden = $true
$Action= New-ScheduledTaskAction -Execute "C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe" -Argument -ExecutionPolicy Bypass -File "C:\PS\StartupScript.ps1"  
Register-ScheduledTask -TaskName "StartupScript_PS" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force  
colinardo
colinardo 04.02.2019, aktualisiert am 11.02.2019 um 12:24:27 Uhr
Goto Top
Guten Appetit.
1
2
3
4
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument '-Executionpolicy ByPass -enc RwBlAHQALQBEAGkAcwBrACAAfAAgAD8AewAkAF8ALgBQAGEAcgB0AGkAdABpAG8AbgBTAHQAeQBsAGUAIAAtAGUAcQAgACIAUgBhAHcAIgB9ACAAfAAgAEkAbgBpAHQAaQBhAGwAaQB6AGUALQBEAGkAcwBrACAALQBQAGEAcgB0AGkAdABpAG8AbgBTAHQAeQBsAGUAIABHAFAAVAAgAC0AUABhAHMAcwBUAGgAcgB1ACAAfAAgAE4AZQB3AC0AUABhAHIAdABpAHQAaQBvAG4AIAAtAFUAcwBlAE0AYQB4AGkAbQB1AG0AUwBpAHoAZQAgAC0AQQBzAHMAaQBnAG4ARAByAGkAdgBlAEwAZQB0AHQAZQByACAAfAAgAEYAbwByAG0AYQB0AC0AVgBvAGwAdQBtAGUAIAAtAEYAaQBsAGUAUwB5AHMAdABlAG0AIABOAFQARgBTACAALQBGAG8AcgBjAGUAIAAtAEMAbwBuAGYAaQByAG0AOgAkAGYAYQBsAHMAZQA7AEcAZQB0AC0ARABpAHMAawAgAHwAIAA/AHsAJABfAC4ATgB1AG0AYgBlAHIAIAAtAG4AZQAgADAAIAAtAGEAbgBkACAAJABfAC4ATABhAHIAZwBlAHMAdABGAHIAZQBlAEUAeAB0AGUAbgB0ACAALQBnAHQAIAAwAH0AIAB8ACAARwBlAHQALQBQAGEAcgB0AGkAdABpAG8AbgAgAHwAIABzAG8AcgB0ACAAUABhAHIAdABpAHQAaQBvAG4ATgB1AG0AYgBlAHIAIAAtAEQAZQBzAGMAIAB8ACAAcwBlAGwAZQBjAHQAIAAtAEYAIAAxACAAfAAgACUAewBSAGUAcwBpAHoAZQAtAFAAYQByAHQAaQB0AGkAbwBuACAALQBEAGkAcwBrAE4AdQBtAGIAZQByACAAJABfAC4ARABpAHMAawBuAHUAbQBiAGUAcgAgAC0AUABhAHIAdABpAHQAaQBvAG4ATgB1AG0AYgBlAHIAIAAkAF8ALgBQAGEAcgB0AGkAdABpAG8AbgBuAHUAbQBiAGUAcgAgAC0AUwBpAHoAZQAgACgAKABHAGUAdAAtAFAAYQByAHQAaQB0AGkAbwBuAFMAdQBwAHAAbwByAHQAZQBkAFMAaQB6AGUAIAAtAEQAaQBzAGsATgB1AG0AYgBlAHIAIAAkAF8ALgBEAGkAcwBrAE4AdQBtAGIAZQByACAALQBQAGEAcgB0AGkAdABpAG8AbgBOAHUAbQBiAGUAcgAgACQAXwAuAFAAYQByAHQAaQB0AGkAbwBuAE4AdQBtAGIAZQByACkALgBTAGkAegBlAE0AYQB4ACkAIAAtAFYAZQByAGIAbwBzAGUAfQA='  
$trigger = New-ScheduledTaskTrigger -AtStartup
$principal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest  
Register-ScheduledTask -TaskName DiskPrepare -Action $action -Description "DiskPrepareStartupTask" -Principal $principal -Trigger $trigger -TaskPath "\" -Force  
Macht dann vier fuffzich, der Herr.
winlin
winlin 05.02.2019 aktualisiert um 07:57:50 Uhr
Goto Top
@colinardo scripting godface-smile
Thaaaank youuuface-smile

Ich habe dieses Skript gestern mal ausgeführt. Es wird der Task angelegt mit der entsprechenden Action für die Disk Anpassung. Habe das dann mal getestet indem ich die VM heruntergefahren habe die Disk von 40 auf 60 GB erwitert habe und dann die VM gebootet. Im Diskmanager sah ich dann die extra 20GB die noch unassigned waren. Habe dann gewartet das der Task ausgeführt wird aber auch nach einigen Minuten tat sich nichts. In der Task History sehe ich nur das der Task ausgeführt wird aber die Platte wird nicht erweitert.

Habe dann mal den command:
1
Get-Disk | ?{$_.PartitionStyle -eq "Raw"} | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -UseMaximumSize -AssignDriveLetter | Format-Volume -FileSystem NTFS -Force -Confirm:$false;Get-Disk | ?{$_.Number -ne 0 -and $_.LargestFreeExtent -gt 0} | Get-Partition | sort PartitionNumber -Desc | select -F 1 | %{Resize-Partition -DiskNumber $_.Disknumber -PartitionNumber $_.Partitionnumber -Size ((Get-PartitionSupportedSize -DiskNumber $_.DiskNumber -PartitionNumber $_.PartitionNumber).SizeMax) -Verbose}  
manuell ausgeführt und dann klappte das erst. Wieso führt denn der Task nicht den Command aus? Liegt es an der Execution Policy? Habe die mal auf Bypass gesetzt im obigen Skript von dir nach "-Argument" aber trotzdem passiert nix - die disk bleibt immer noch unallocated.
colinardo
colinardo 05.02.2019, aktualisiert am 11.02.2019 um 12:13:40 Uhr
Goto Top
Waren zwei Anführungszeichen nicht escaped, habe es dir oben als Base64 Encoded-Command hinterlegt dann passiert sowas nicht mehr.

Falls du es nicht als EncodedCommand haben möchtest, hier auch noch diese Fassung
1
2
3
4
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument '-Executionpolicy ByPass -Command "Get-Disk | ?{$_.PartitionStyle -eq \"Raw\"} | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -UseMaximumSize -AssignDriveLetter | Format-Volume -FileSystem NTFS -Force -Confirm:$false;Get-Disk | ?{$_.Number -ne 0 -and $_.LargestFreeExtent -gt 0} | Get-Partition | sort PartitionNumber -Desc | select -F 1 | %{Resize-Partition -DiskNumber $_.Disknumber -PartitionNumber $_.Partitionnumber -Size ((Get-PartitionSupportedSize -DiskNumber $_.DiskNumber -PartitionNumber $_.PartitionNumber).SizeMax) -Verbose}"'  
$trigger = New-ScheduledTaskTrigger -AtStartup
$principal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest  
Register-ScheduledTask -TaskName DiskPrepare -Action $action -Description "DiskPrepareStartupTask" -Principal $principal -Trigger $trigger -TaskPath "\" -Force  

(hier getestet).
winlin
winlin 11.02.2019 um 12:01:49 Uhr
Goto Top
hey mein Freund,

erstmal danke das du dich meiner annimmstface-smile

Also der Task wird jetzt angelegt in der History sehe ich auch das es keinen Fehler beim ausführen gibt. Aber ich sehe im Diskamanagement immer noch eine Disk die nicht initialisiert ist sprich uter My Computer ist keine Platte drin (wie sie im Disk Management) steht.

habe mal den Task editiert und da steht nun folgendes drin:
1. [GENERAL] When running the task, use the following user account: SYSTEM
2. [GENERAL ]Run with highest Privileges: Aktiviert
3. Triggers: Trigger at system startup, Status enabled
4. Actions: Start a program
Program/script: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Add Arguments: -Executionpolicy ByPass -Command "Get-Disk | ?{$_.PartitionStyle -eq \"Raw\"} | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -UseMaximumSize -AssignDriveLetter | Format-Volume -FileSystem NTFS -Force -Confirm:$false;Get-Disk | ?{$_.Number -ne 0 -and $_.LargestFreeExtent -gt 0} | Get-Partition | sort PartitionNumber -Desc | select -F 1 | %{Resize-Partition -DiskNumber $_.Disknumber -PartitionNumber $_.Partitionnumber -Size ((Get-PartitionSupportedSize -DiskNumber $_.DiskNumber -PartitionNumber $_.PartitionNumber).SizeMax) -Verbose}"
colinardo
colinardo 11.02.2019 aktualisiert um 12:26:30 Uhr
Goto Top
Wurde hier getestet und funktioniert einwandfrei.

Beschäftige dich selbst mal damit. Danke. Ich bin jetzt raus.

Grüße Uwe