ankhmorpork
Goto Top

Powershell: Registry-Wert setzen

Hallo zusammen,

Win XP, 32 bit, SP3, Patchstand tagesaktuell
PS 2.0

Ich versuche die Auslagerungsdatei in der Registry neu zu setzen:

Set-StrictMode -Version "2.0"  
 
$Key = "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management"  
$Wert = "PagingFiles"  
$PathSize = [String]"C:\PageFile.sys", [long]5008, [long]5008  

Set-Itemproperty -Path $Key -Name $Wert -Value $PathSize

Der Reg-Typ von PagingFiles ist REG_MULTI_SZ, also MultiString.
Meine Überlegung: In der PS sollte das einem Array-Typ entsprechen.

In die Registry wird der Wert eingetragen, aber leider nicht übernommen. Wenn ich über die Systemsteuerung den virtuellen Arbeitsspeicher abrufe, steht dort "Keine Auslagerungsdatei".
Selbstverständlich nach Reboot.

Hat jemand einen Hinweis?


Gruß

ANKH

Content-Key: 227788

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

Ausgedruckt am: 29.03.2024 um 15:03 Uhr

Mitglied: colinardo
colinardo 26.01.2014 aktualisiert um 14:57:51 Uhr
Goto Top
Hallo ANKH,
du solltest diese Einstellung nicht manuell über die Registrierung vornehmen sondern die dafür vorgesehenen WMI-Methoden benutzen:
$pf = gwmi -Class "Win32_PageFileSetting"  
$pf.InitialSize = [int]4000
$pf.MaximumSize = [int]4000
$pf.Put()
Grüße Uwe
Mitglied: AnkhMorpork
AnkhMorpork 26.01.2014 um 16:19:57 Uhr
Goto Top
Zitat von @colinardo:

Hallo ANKH,
du solltest diese Einstellung nicht manuell über die Registrierung vornehmen sondern die dafür vorgesehenen WMI-Methoden
benutzen:
> $pf = gwmi -Class "Win32_PageFileSetting"  
> $pf.InitialSize = [int]4000
> $pf.MaximumSize = [int]4000
> $pf.Put()
> 
Grüße Uwe

Hallo Uwe,

danke für die Meldung. Ich bekomme mit deiner Lösung folgende Mecker:

Property 'InitialSize' cannot be found on this object; make sure it exists and is settable.
At C:\Dokumente und Einstellungen\XPMUser\Eigene Dateien\PowerShell\Scripts\regkeywrite2.ps1:2 char:5
+ $pf. <<<< InitialSize = [int]4000
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException

Property 'MaximumSize' cannot be found on this object; make sure it exists and is settable.
At C:\Dokumente und Einstellungen\XPMUser\Eigene Dateien\PowerShell\Scripts\regkeywrite2.ps1:3 char:5
+ $pf. <<<< MaximumSize = [int]4000
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException

Method invocation failed because [System.Object[]] doesn't contain a method named 'Put'.
At C:\Dokumente und Einstellungen\XPMUser\Eigene Dateien\PowerShell\Scripts\regkeywrite2.ps1:4 char:8
+ $pf.Put <<<< ()
    + CategoryInfo          : InvalidOperation: (Put:String) , RuntimeException
    + FullyQualifiedErrorId : MethodNotFound


Was tun nun?

Gruß

ANKH
Mitglied: colinardo
colinardo 26.01.2014 aktualisiert um 16:23:44 Uhr
Goto Top
Das wäre aber seltsam, denn hier geht es in einer Test-XP-VM mit PS2.0 einwandfrei.
mach mal folgendes:
Get-WMIObject -Class "Win32_PageFileSetting"  | get-member
und poste hier die Ausgabe ..
Mitglied: AnkhMorpork
AnkhMorpork 26.01.2014 aktualisiert um 16:32:41 Uhr
Goto Top
Zitat von @colinardo:

Das wäre aber seltsam, denn hier geht es in einer Test-XP-VM mit PS2.0 einwandfrei.
mach mal folgendes:
> Get-WMIObject -Class "Win32_PageFileSetting"  | get-member
> 
und poste hier die Ausgabe ..

Ja seltsam, denn die Parameter stimmen ja wohl:


PS C:\Dokumente und Einstellungen\XPMUser\Eigene Dateien\PowerShell\Scripts> Get-WMIObject -Class "Win32_PageFileSetting"  | gm


   TypeName: System.Management.ManagementObject#root\cimv2\Win32_PageFileSetting

Name                MemberType   Definition
----                ----------   ----------
Caption             Property     System.String Caption {get;set;}
Description         Property     System.String Description {get;set;}
InitialSize         Property     System.UInt32 InitialSize {get;set;}
MaximumSize         Property     System.UInt32 MaximumSize {get;set;}
Name                Property     System.String Name {get;set;}
SettingID           Property     System.String SettingID {get;set;}
__CLASS             Property     System.String __CLASS {get;set;}
__DERIVATION        Property     System.String __DERIVATION {get;set;}
__DYNASTY           Property     System.String __DYNASTY {get;set;}
__GENUS             Property     System.Int32 __GENUS {get;set;}
__NAMESPACE         Property     System.String __NAMESPACE {get;set;}
__PATH              Property     System.String __PATH {get;set;}
__PROPERTY_COUNT    Property     System.Int32 __PROPERTY_COUNT {get;set;}
__RELPATH           Property     System.String __RELPATH {get;set;}
__SERVER            Property     System.String __SERVER {get;set;}
__SUPERCLASS        Property     System.String __SUPERCLASS {get;set;}
ConvertFromDateTime ScriptMethod System.Object ConvertFromDateTime();
ConvertToDateTime   ScriptMethod System.Object ConvertToDateTime();

Gruß

ANKH
Mitglied: colinardo
colinardo 26.01.2014 aktualisiert um 16:51:31 Uhr
Goto Top
Dann setzt mal deinen Registry-Wert auf Standard zurück, vielleicht steht der jetzt auf einem ungültigen Wert, danach Neustart:
C:\pagefile.sys 0 0
zusätzlich sollte folgende Ausgabe einen Count von 1 ergeben:
gwmi -Class "Win32_PageFileSetting" | measure-object

Dies lässt sich auch mit dem Tool wbemtest.exe in Windows überprüfen:

b39287739ac0ea888502ce5ef32a2bfc
Mitglied: AnkhMorpork
AnkhMorpork 26.01.2014 um 16:56:53 Uhr
Goto Top
Zitat von @colinardo:

Dann setzt mal deinen Registry-Wert auf Standard zurück, vielleicht steht der jetzt auf einem ungültigen Wert, danach
Neustart:
> C:\pagefile.sys 0 0
> 
zusätzlich sollte folgende Ausgabe einen Count von 1 ergeben:
> gwmi -Class "Win32_PageFileSetting" | measure-object
> 

Dies lässt sich auch mit dem Tool wbemtest.exe in Windows überprüfen:

b39287739ac0ea888502ce5ef32a2bfc

So sieht es aus:

Nach Rücksetzung und Reboot kommt:
Exception calling "Put" with "0" argument(s): "Der Wert liegt außerhalb des Gültigkeitsbereichs. "
At C:\Dokumente und Einstellungen\XPMUser\Eigene Dateien\PowerShell\Scripts\regkeywrite2.ps1:4 char:8

back-to-top$pf.Put <<<< ()

+ CategoryInfo : NotSpecified: (face-smile , MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

Count 1 kommt:
PS C:\Dokumente und Einstellungen\XPMUser\Eigene Dateien\PowerShell\Scripts> gwmi -Class "Win32_PageFileSetting" | measure-object


Count : 1
Average :
Sum :
Maximum :
Minimum :
Property :


ANKH
Mitglied: colinardo
Lösung colinardo 26.01.2014 aktualisiert um 17:16:24 Uhr
Goto Top
Das ist schon mal gut, setze mal einen niedrigeren Wert als 4096 für beide Werte ein dann sollte es funktionieren, aus irgendeinem Grund möchte Windows hier keine Werte größer 4095 setzen ...scheint mit 32bit und 4GB Grenze zu tun zu haben, obwohl es über die GUI auch größer geht ...
Mitglied: AnkhMorpork
AnkhMorpork 26.01.2014 um 17:16:06 Uhr
Goto Top
Zitat von @colinardo:

Das ist schon mal gut, setze mal einen niedrigeren Wert als 4096 für beide Werte ein dann sollte es funktionieren, aus
irgendeinem Grund möchte Windows hier keine Werte größer 4095 setzen ...scheint mit 32bit und 4GB Grenze zu tun zu
haben

Hallo Uwe,

Strike!

2048 nimmt es. Ich muss das jetzt nicht verstehen?

Die Sache mit wbemtest.exe hatte ich zu spät gesehen, war aber konsistent mit deinen Bildern.

Herzlichen Dank für deine Hilfe!

Bin wieder etwas weiter und etwas ratloser ... bleibe aber dicht am Ball.

Gruß

ANKH
Mitglied: colinardo
colinardo 26.01.2014 aktualisiert um 17:22:07 Uhr
Goto Top
ansonsten mach es nach deiner ursprünglichen Methode, aber schreibe die Zeile für die Werte so:
$PathSize = 'C:\PageFile.sys 5008 5008'  

Viel Erfolg weiterhin face-smile
Grüße Uwe
Mitglied: AnkhMorpork
AnkhMorpork 26.01.2014 um 17:33:36 Uhr
Goto Top
Zitat von @colinardo:

ansonsten mach es nach deiner ursprünglichen Methode, aber schreibe die Zeile für die Werte so:
> $PathSize = 'C:\PageFile.sys 5008 5008'  
> 

Viel Erfolg weiterhin face-smile
Grüße Uwe

Hatte ich irgendwann auch schon mal, aber eher mit " " (mein Kriegsfußthema).

Gruß

ANKH