Warum ist das Powershell Script so langsam?
Hallo,
ich habe ein Powershell Script, um Remote Desktop zu aktivieren und den User der Gruppe hinzuzufügen. Klappt alles wunderbar, dauert aber ca. 1 Minute... Liegt das an meinem Script? Kennt jemand eine Möglichkeit, das ein wenig zu beschleunigen?
Danke für alle Antworten im Vorraus!
Hier der wesentliche Teil des Scripts:
#$deviceName und $userName sind schon gegeben (an anderer Stelle eingegeben)
$connection = Test-Connection -BufferSize 32 -Count 1 -ComputerName $deviceName -Quiet
if ($connection){
$energySetting = "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"
C:\pstools\psexec.exe \\$deviceName powercfg -setactive $energySetting
C:\pstools\psexec.exe \\$deviceName powercfg -x -standby-timeout-ac 0
C:\pstools\psexec.exe \\$deviceName powercfg -x -standby-timeout-dc 0
C:\pstools\psexec.exe \\$deviceName reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
$remoteSysLanguage =C:\pstools\psexec.exe \\$deviceName cmd.exe /c 'reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage'
if ($remoteSysLanguage -match '0407'){
$group = "Administratoren"
} else {
$group = "Administrators"
}
C:\pstools\psexec.exe \\$deviceName net localgroup $group ad\$userName /add
}
1 Antwort
vielleicht bist du auch schon selbst dahinter gestiegen...
test-conection ist langsam
versuche doch einfach den Klassiker
#-w begrenzt die wartezeit vür einen "toten" Server auf 1000ms (reicht im lokalen Netzwerk dicke)
ping 192.168.0.201 -n 1 -w 1000
für dein script sähe die "flotte" Variante dann so aus:
$connection = ping 192.168.0.101 -n 1 -w 1000 |findstr /i '"Zeit< Zeit="'
if ($connection){
'psexec blah'
}
pause
...oder
$connection = pping $deviceName -n 1 -w 1000 |?{($_ -match 'Zeit=|Zeit<')}
Dein Gerödel mit den einzelnen psexec-Befehlen hätte ich in einer Batch auf dem Zielrechner untergebacht und nur diese per einem psexec-Aufruf auf dem Zielrechner ausgeführt.
Damit verschwindet er Overheat durch das für jeden psexecaufruf erneute verbinden /berechtigungen abfragen und was psexec noch so alles veranstaltet...
Letztlich frage ich mich weshalb Du überhaupt den Aufwand mit Powershell treibst? wenn Du dein PS1 nicht gerade mi rechtsklick startest, brauchst du eine Starter-Batch um di Policies zu setzen... dan kanst Du uch gleich die Sache in Batch abhaken
set "deviceName=ESELHIMMEL"
for /f "tokens=*" %%a in ('ping %deviceName% -n 1 -w 1000 ^|findstr /i "Zeit< Zeit="') do (
rem wird nur ausgeführt wenn das gerät im Netz geantwortet hat (echo vor dem befehl ist ein Dummy)
echo C:\pstools\psexec.exe \\$deviceName setup_power.cmd
)
pause
es gibt durchaus Gründe weshalb Administratoren Powershell nicht unbedingt als StandardScriptspache nutzen.
Powershell is in vielen Bereichen wirklich toll, aber für Kleinkram einfach "Kanonen au Spatzen"
Powershell is in vielen Bereichen wirklich toll, aber für Kleinkram einfach "Kanonen au Spatzen"
Stimmt, aber das war nur ein Teilausschnitt des Scripts, ausenrum steht noch eine Abfrage bestimmter AD-Computer, denen dann bestimmte User aus bestimmten AD-Gruppen zugeteilt werden. Aber die Idee, eine Batch auf den entsprechenden Rechner zu kopieren und einmal per PSexec auszuführen ist gut, das werde ich mal machen.