jan4321
Goto Top

AllUsersStartup Variable in PowerShell und COM-Komponenten

Hi,
ich muss was auf eine menge Domain less Server in den All Users Startup Folder schieben (also ein Script, was als logon Script fungieren soll), aber Problem:

ich hab Deutsche und Englische Server, also müsste ich eigentlich direkt in den Startup schreiben, anstatt das jetzt so Hardcore einzutragen.

Hab dazu auch schon was gefunden, nur gibt es die Methode "Namespace" nicht (oder ich stehe gerade auf dem Schlauch xD)

http://technet.microsoft.com/en-us/library/ee176604.aspx


Script sieht mom so aus:


$scriptLocation = "C:\HalloWelt.bat"


$wshShellObject = New-Object -com WScript.Shell

$allUserProfileFolder = (get-childitem env:ALLUSERSPROFILE).Value

$wshShellLink = $wshShellObject.CreateShortcut($allUserProfileFolder+"\Microsoft\Windows\Start Menu\Programs\StartUp\HalloWelt.lnk")

$wshShellLink.TargetPath = "$scriptLocation "

$wshShellLink.WindowStyle = 7
$wshShellLink.IconLocation = "$scriptLocation"

$wshShellLink.Save()

if($error){
exit 1
} else{
exit 0
}

Content-Key: 203797

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

Printed on: April 16, 2024 at 06:04 o'clock

Member: format-c
format-c Mar 23, 2013 at 00:28:19 (UTC)
Goto Top
Hallo Jan.

Der vollständige Pfad zum Autostart-Ordner ist in der Registry unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders gespeichert. Mit reg query kannst du ihn auslesen.
Hilft dir das ein wenig?


Gruß
format-c
Member: jan4321
jan4321 Mar 25, 2013 at 00:59:37 (UTC)
Goto Top
Ah super thx^^

Das der Ordner auch einen Reg Key hat ist fast zu einfach xD

Thx
Jan
Member: jan4321
jan4321 Mar 27, 2013 updated at 21:26:08 (UTC)
Goto Top
So Ich habe es gerade mal fertig geschrieben.

reg query war übrigens aber hierfür unbrauchbar, da da die ausgabe so aussieht:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
Common Startup REG_SZ C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

aber get-item im zusammenspiele mit .GetValue war die Lösung:

$scriptLocation = "C:\HalloWelt.bat"  

$wshShellObject = New-Object -com WScript.Shell

$allUserStartupFolder =  (get-item "HKLM:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders").GetValue("Common Startup")  

$wshShellLink = $wshShellObject.CreateShortcut($allUserStartupFolder+"\HalloWelt.lnk")  

$wshShellLink.TargetPath = "$scriptLocation "  

$wshShellLink.WindowStyle = 7
$wshShellLink.IconLocation = "$scriptLocation"   

$wshShellLink.Save()

if($error){
	exit 1
} else{
	exit 0
}
Member: format-c
format-c Mar 27, 2013 at 12:35:26 (UTC)
Goto Top
Naja, ganz unbrauchbar ist es nicht. In der Powershell kann man sich halt den Umweg über die for-Schleife
for /f "tokens=2,*" %%i in ('reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Startup"') do set "autostart=%%j"
, den man in CMD nehmen muss, sparen. Da ist GetValue() die elegantere Lösung.


Gruß
format-c
Member: jan4321
jan4321 Mar 27, 2013 updated at 13:01:46 (UTC)
Goto Top
Ich sachte ja auch nur für hier face-wink

Klar, wenn man über die CMD gehen muss, dann geht das nicht anderes, aber ab Windows 7 ist die PowerShell ja sogar auf den Clients vorinstalliert (Ein hoch darauf face-big-smile).

Trotzdem danke, sonst wäre ich nicht auf den RegKey gekommen^^
Member: 5t8d1e
5t8d1e Mar 27, 2013 at 20:15:28 (UTC)
Goto Top
Ahoi,

ist ja schon schlimm genug das wsh für die Linkerstellung genutzt werden muss. Aber dann wieder auf so alte Dinge wie for und reg aus der cmd zu nutzen tz tz. Dabei sieht es doch in der PoSh so einfach aus face-wink

[string]$myUsersStartup = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders' -name 'Common Startup').'Common Startup'  

der Torsten wars
Hail to the PoSh
Member: jan4321
jan4321 Mar 27, 2013 updated at 21:32:46 (UTC)
Goto Top
wo liegt darin eigentlich der Unterschied? Sry für die frage, aber ich bin noch ein ziemlicher PS neuling. Das ist erst mein 2. Script in der Ausbildung xD

gut, meins versthe ich ja, erst sage ich ihn wo, dann, mit der Methode .getValue(), der man was übergeben kann, wie z.B. "Common Startup", was ich gern hätte, aber wie kommt der mit Get-ItemProperty und dann 2 mal Common Startup an das richtige Value
Haben die Klammern was damit zu tun? face-wink
Member: 5t8d1e
5t8d1e Mar 27, 2013 at 22:07:05 (UTC)
Goto Top
Ahoi,

Also am Ergebnis gibt es kein Unterschied!

Ich lasse mir die NoteProperty des neuen Objektes anzeigen und du nutzt halt die Methode getvalue des Items.

Und wenn ich ehrlich bin, habe ich dein Code irgendwie übersehen. Ich Schiebe es einfach auf mein Alter, voller Cache oder schlechtes Wetter. face-wink

Wenn das wirklich dein 2. Skript war, dann sehe ich ein große Zukunft für dich face-wink

So und weil ich neugierig war habe ich auch mal mitgemessen, und gebe zu deine Methode ist benötigt nur die Hälfte der Zeit (4 Milisekunden statt 8-9 Milisekunden)

Wünsche frohe Ostern

der Torsten wars
Member: jan4321
jan4321 Mar 27, 2013 at 22:13:40 (UTC)
Goto Top
face-big-smile Dann danke für die Blumen und Thx fürs nachmessen

Gruß
Jan