Ich habe ein Batch-Skript, das alle Dienste auflistet, nimmt die BINARY_PATH, entfernt alle Zeilen, die c "\ Windows" enthalten und stellt eine Liste von BINARY_PATHS.FOR Schleife Leerzeichen und Behandlung
Die Idee besteht darin, diese Liste dann in ICACLS zu übergeben, um die Berechtigungen zu bestimmen, die auf jedem dieser ausführbaren Dateien festgelegt sind.
Das Problem, das ich habe, ist, dass einige BINARY_PATHS führende und nachfolgende enthalten. " Also musste ich dafür Rechnung tragen, indem ich die delims =" zu meiner for/f-Anweisung hinzufüge.
Im Folgenden finden Sie die Batchdatei, die
for /f "tokens=2" %%n in ('sc query state^= all ^| findstr SERVICE_NAME') do (
for /f "delims=: tokens=1*" %%r in (
'sc qc "%%~n" ^| findstr BINARY_PATH_NAME'
) do (
for /f tokens^=1-2^ delims^=^" %%x in ('echo %%~s^| findstr /V /I "c:\windows\system32"') do (
echo "%%~x%%~y"
)
)
)
Der ECHO Ausgang ist wie folgt auf ECHO gibt - eine schöne, saubere Liste würde es von dem führenden Raum scheint auseinander
" C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_state.exe"
" C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe"
" C:\Windows\Microsoft.Net\Framework\v3.0\WPF\PresentationFontCache.exe"
" C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\infoc
ard.exe"
" C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMSvc
Host.exe"
" C:\Program Files\Photodex\ProShow Producer\ScsiAccess.exe"
" C:\Windows\servicing\TrustedInstaller.exe"
" C:\Program Files\VMware\VMware Tools\vmtoolsd.exe"
Wenn ich versuche, die Ausgabe an Icacls ohne das führende und das nachfolgende "" zu übergeben, bricht es zusammen, weil in einigen PATHs Leerzeichen vorhanden sind.
ICACLS Batch-Datei:
for /f "tokens=2" %%n in ('sc query state^= all ^| findstr SERVICE_NAME') do (
for /f "delims=: tokens=1*" %%r in (
'sc qc "%%~n" ^| findstr BINARY_PATH_NAME'
) do (
for /f tokens^=1-2^ delims^=^" %%x in ('echo %%~s ^| findstr /V /I "c:\windows\system32"') do (
icacls %%~x%%~y
)
)
)
Einige Ausgabe von ICACLS Partie:
C:\Windows\Microsoft.Net\Framework\v3.0\WPF\PresentationFontCache.exe NT SERVICE
\TrustedInstaller:(F)
BUILTIN\Ad
ministrators:(RX)
NT AUTHORI
TY\SYSTEM:(RX)
BUILTIN\Us
ers:(RX)
Successfully processed 1 files; Failed processing 0 files
Invalid parameter "Communication"
Invalid parameter "Communication"
Invalid parameter "Files\Photodex\ProShow"
C:\Windows\servicing\TrustedInstaller.exe NT SERVICE\TrustedInstaller:(F)
BUILTIN\Administrators:(RX)
NT AUTHORITY\SYSTEM:(RX)
BUILTIN\Users:(RX)
Successfully processed 1 files; Failed processing 0 files
Invalid parameter "Files\VMware\VMware"
Irgendwelche Ideen?
Die äußerste "for/f" -Schleife verwendet die Variable '%% n', die innerste verwendet implizit auch die Variable' %% n' wegen '%% m' und den' Tokens = 1-2 'Option; Obwohl es funktioniert, empfehle ich, nicht überlappende Variablen für die innerste Schleife zu verwenden (z. B. '%% x' und so auch' %% y'). Um führende und nachfolgende "" "zu entfernen, brauchen Sie nicht die Option" delims^=^"'; geben Sie einfach 'for/f" an delims = "%% x in ('echo %% ~ s') echo% % ~ x' (der '~' Modifikator entfernt die Anführungszeichen) ... – aschipfl
danke gute Idee. – Ankh2054
Das Problem ist mehr die führenden und nachgestellten Leerzeichen als die "". – Ankh2054