Odpowiedzi:
Dynamicznie ustaw wartość zmiennej w skrypcie wsadowym, który będzie wykonywany przez Harmonogram zadań
Ponieważ wyjaśniłeś i potwierdziłeś, co następuje:
- Potrzebujesz wartości zmiennej w skrypcie wsadowym wykonywanym przez Harmonogram zadań,
SYSTEM
aby ustawić ją jako wartość zgodną z SID użytkownika uruchamiającego skrypt logowania- Możesz użyć lokalnej ścieżki pliku na maszynę do lokalizacji skryptu , którą wykona Harmonogram zadań
- Nigdy nie będziesz mieć więcej niż jednego użytkownika, który zaloguje się do tego samego systemu operacyjnego, który wykona ten skrypt
Zapisałem to rozwiązanie jako osobną odpowiedź z bardziej szczegółowymi sugerowanymi podejściami.
Będziesz chciał upewnić się, że:
- Upewnij się, że na każdym komputerze, który wykona skrypt wsadowy, zostanie skonfigurowana skorelowana nazwa zaplanowanego zadania
- Potwierdź, że każde skorelowane zaplanowane zadanie na każdym komputerze, które jest wykonywane,
schtasks
wszystkie wskazują tę samą jedną standardową ścieżkę skryptu wsadowego i nazwę pliku.
Ponownie wykorzystałem logikę, którą już skonfigurowałeś, ale dodałem kilka dodatkowych zmiennych i warunkową logikę JEŻELI, która utworzy folder lokalny na komputerze lokalnym, skrypt skryptowy będzie rezydował, jeśli jeszcze nie istnieje, i usuń plik wsadowy z tego folder, jeśli już istnieje, ponieważ jest tworzony dla każdego uruchomienia.
Zasadniczo spowoduje to utworzenie dynamicznego skryptu wsadowego za każdym razem, gdy zostanie wykonany (przy logowaniu). Skrypt wsadowy, który tworzy, będzie zawierał Reg Add
logikę i polecenia z wartościami SID części użytkownika, dla którego skrypt logowania uruchomił się przy logowaniu. Kiedy więc Harmonogram zadań uruchomi skrypt, zapewni to, że skrypt zawsze będzie miał wymaganą wartość dodaną przy każdym logowaniu / wykonywaniu skryptu.
@ECHO ON
SET LocalDir=C:\localfolder
SET TaskScript=TaskScript.cmd
IF NOT EXIST "%LocalDir%" MD "%LocalDir%"
IF EXIST "%LocalDir%\%TaskScript%" DEL /Q /F "%LocalDir%\%TaskScript%"
for /f "tokens=2" %%i in ('whoami /user /fo table /nh') do set usersid=%%i
ECHO reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%usersid%" /v "State" /t REG_DWORD /d 128 /f>>"%LocalDir%\%TaskScript%"
schtasks /run /tn "My Profile Changer"
Musisz tylko upewnić się, że zadanie, które każesz schtasks
wykonać (tj. "My Profile Changer"
), Wskaże tę samą pełną ścieżkę, którą podałeś w skrypcie wsadowym logowania dla wartości zmiennych SET LocalDir=
i SET TaskScript=
.
Jeśli więc zmienne skryptu logowania są równe, C:\localfolder\TaskScript.cmd
jest to ta sama wartość, na którą ma Program/Script
wskazywać pole. Sugerowałbym również umieszczenie SET LocalDir=
wartości zmiennej w Start in (optional):
polu, ale NIE będziesz musiał dodawać żadnych argumentów, więc zostaw Add Arguments (optional):
pole puste lub puste, bez żadnych elementów ( poniżej zrzutu ekranu ).
schtasks
z wiersza poleceń lub z harmonogramu zadań GUI. Możesz również utworzyć logikę po schtasks
zakończeniu, aby usunąć skrypt wsadowy i folder, aby nie istniał, a użytkownik końcowy musiałby utworzyć oba, a następnie mieć dostęp do wiersza poleceń lub dostęp do GUI Harmonogramu zadań i wiedzieć, co wykonać.