Wie starte ich PowerShell, um einen Befehl auszuführen und eine Variable an den neuen Prozess zu übergeben?

Wie starte ich PowerShell, um einen Befehl auszuführen und eine Variable an den neuen Prozess zu übergeben?

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 -Sstarte einen pwshProzess, um die Befehle mit Berechtigungen auszuführen TrustedInstaller. Leider weiß ich nicht, wie ich Variablen an neue Prozesse übergebe und diese automatisch beende, psexecum 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 TrustedInstallerBerechtigung schlägt der Befehl mit der Fehlermeldung „Zugriff verweigert“ fehl.

Um dieses Problem zu lösen, führen Sie psexecden Befehl aus (ich habe SysInternalsden 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 $TiSvczur neuen pwshSitzung 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 pwshSitzung 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, TrustedInstallerin einer Textdatei im selben Pfad wie Ihre Skriptdatei ab. Stellen Sie sicher, PsExec.exedass 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 PowerShellProzess 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 PsExecwird dieser Fehler nicht generiert.

Aber dieser Fehler:

Set-ItemProperty: Attempted to perform an unauthorized operation.

Wird noch generiert.

Ich vermute, das liegt daran, dass PsExeces auf Remote-Sachen angewiesen ist und ich „Remoteunterstützung“, „Remotedesktop“ und „Remoteregistrierung“ deaktiviert habe.

Ich habe es verwendet NSudoLC.exeund es hat Windows Defender erfolgreich und ohne Fehler deaktiviert:

NSudoLC.exe -U:T -P:E $pwsh -file $home\desktop\tisvc.txt

Bei Verwendung NSudobeider werden die oben genannten Fehler nicht generiert.

verwandte Informationen