Ich arbeite derzeit an einem Skript, das alle meine Hacks für mein Windows 10 20H2-Betriebssystem in einem Durchgang ausführt.
Ich verwende PowerShell 7.0.4 x64 und möchte das Skript im Administratormodus ausführen pwsh
. Dabei habe ich festgestellt, dass für einige Registrierungsschlüssel die TrustedInstaller-Berechtigungen geändert werden müssen. Ich habe eine Lösung gefunden: Ich psexec -S
starte einen pwsh
Prozess, um die Befehle mit Berechtigungen auszuführen TrustedInstaller
. Leider weiß ich nicht, wie ich Variablen an neue Prozesse übergebe und diese automatisch beende, psexec
um mit der Skriptausführung fortzufahren.
Ich werde dies als Beispiel verwenden:
$TiSvc=@(
"PrintWorkflowUserSvc"
"RmSvc"
"SCardSvr"
"SecurityHealthService"
"Sense"
"SgrmBroker"
"wscsvc"
)
$TiSvc | %{Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$_" -Name Start -Type DWord -Value 4}
Ohne TrustedInstaller
Berechtigung schlägt der Befehl mit der Fehlermeldung „Zugriff verweigert“ fehl.
Um dieses Problem zu lösen, führen Sie psexec
den Befehl aus (ich habe SysInternals
den Ordner in abgelegt path
):
$PwSh=(Get-Process -Id $pid).path
PsExec -S $PwSh ???
[array]
Ich möchte die Variable in der aktuellen Sitzung festlegen $TiSvc
, weiß aber nicht, wie ich sie $TiSvc
zur neuen pwsh
Sitzung weiterleite und diesen Befehl ausführe:
$TiSvc | %{Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$_" -Name Start -Type DWord -Value 4}
Beenden Sie nach der Ausführung des Befehls die neue pwsh
Sitzung und beenden Sie das Programm psexec
, um mit der Skriptausführung fortzufahren.
Wie kann ich das machen? Jede Hilfe ist willkommen.
Antwort1
Legen Sie alle Befehle, die Sie ausführen möchten, TrustedInstaller
in einer Textdatei im selben Pfad wie Ihre Skriptdatei ab. Stellen Sie sicher, PsExec.exe
dass sie sich im befindet Path
, und verwenden Sie dann diese Befehle:
$PwSh=(Get-Process -Id $pid).path
psexec -S $pwsh -file $psscriptroot\tiworker.txt
Um die Befehle, die TrustedInstaller-Berechtigungen erfordern, in einem anderen PowerShell
Prozess auszuführen, wird der Prozess nach Abschluss der Ausführung automatisch beendet, sodass die Ausführung des Hauptskripts fortgesetzt werden kann.
Ein kleiner Fehler wurde behoben, der dazu führte, dass der PowerShell-Prozess ohne TrustedInstaller-Berechtigung gestartet wurde.
Die obige Methode hat irgendwie nicht richtig funktioniert, als ich versucht habe, diese Befehle auszuführen:
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WinDefend" -Name "Start" -Type DWord -Value 4
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WdBoot" -Name "Start" -Type DWord -Value 4
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WdFilter" -Name "Start" -Type DWord -Value 4
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WdNisDrv" -Name "Start" -Type DWord -Value 4
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WdNisSvc" -Name "Start" -Type DWord -Value 4
Ich habe den Fehler erhalten:
Set-ItemProperty: Attempted to perform an unauthorized operation.
Wenn ichreg add
ERROR: Access is denied.
Die Befehle davor wurden jedoch alle zurückgegeben:
The operation completed successfully.
Konkret diese Befehle:
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender" -Name "DisableAntiSpyware" -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender" -Name "DisableRoutinelyTakingAction" -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender" -Name "ProductStatus" -Type DWord -Value 0
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\Real-Time Protection" -Name "DisableAntiSpywareRealtimeProtection" -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\Real-Time Protection" -Name "DisableRealtimeMonitoring" -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\Scan" -Name "AutomaticallyCleanAfterScan" -Type DWord -Value 0
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\Scan" -Name "ScheduleDay" -Type DWord -Value 8
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\UX Configuration" -Name "AllowNonAdminFunctionality" -Type DWord -Value 0
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\UX Configuration" -Name "DisablePrivacyMode" -Type DWord -Value 1
Wenn Sie es als Administrator und nicht als TrustedInstaller ausführen, wird in beiden Fällen dieser Fehler zurückgegeben:
Set-ItemProperty: Requested registry access is not allowed.
Bei der Ausführung mit PsExec
wird dieser Fehler nicht generiert.
Aber dieser Fehler:
Set-ItemProperty: Attempted to perform an unauthorized operation.
Wird noch generiert.
Ich vermute, das liegt daran, dass PsExec
es auf Remote-Sachen angewiesen ist und ich „Remoteunterstützung“, „Remotedesktop“ und „Remoteregistrierung“ deaktiviert habe.
Ich habe es verwendet NSudoLC.exe
und es hat Windows Defender erfolgreich und ohne Fehler deaktiviert:
NSudoLC.exe -U:T -P:E $pwsh -file $home\desktop\tisvc.txt
Bei Verwendung NSudo
beider werden die oben genannten Fehler nicht generiert.