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:
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-Key: 395999

Url: https://administrator.de/contentid/395999

Printed on: April 25, 2024 at 12:04 o'clock

Member: emeriks
emeriks Dec 18, 2018 at 14:40:39 (UTC)
Goto Top
Hi,
irgendwie passen Deine Sätze nicht zusammen. Reden wir jetzt von vergrößerten HDD oder von neu hinzugefügten HDD?

E.
Member: winlin
winlin Dec 19, 2018 at 06:54:18 (UTC)
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.
Member: colinardo
Solution colinardo Dec 19, 2018 updated at 16:38:23 (UTC)
Goto Top
Servus.
# 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
Member: winlin
winlin Dec 20, 2018 at 14:07:28 (UTC)
Goto Top
Du hast mir seeehr geholfen viiielen dank
Member: colinardo
colinardo Dec 20, 2018 at 14:13:53 (UTC)
Goto Top
Gern geschehen face-smile

Frohes Fest.
Uwe
Member: winlin
winlin Feb 04, 2019 at 13:00:40 (UTC)
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.
Member: colinardo
colinardo Feb 04, 2019 updated at 13:06:43 (UTC)
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 ...
Member: winlin
winlin Feb 04, 2019 updated at 13:29:09 (UTC)
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???

$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  
Member: colinardo
colinardo Feb 04, 2019, updated at Feb 11, 2019 at 11:24:27 (UTC)
Goto Top
Guten Appetit.
$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.
Member: winlin
winlin Feb 05, 2019 updated at 06:57:50 (UTC)
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:
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.
Member: colinardo
colinardo Feb 05, 2019, updated at Feb 11, 2019 at 11:13:40 (UTC)
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
$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).
Member: winlin
winlin Feb 11, 2019 at 11:01:49 (UTC)
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}"
Member: colinardo
colinardo Feb 11, 2019 updated at 11:26:30 (UTC)
Goto Top
Wurde hier getestet und funktioniert einwandfrei.

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

Grüße Uwe