Как определить, был ли командный файл, который вызывает сценарий powershell, запускаться при Windows событии запуска или нет - PullRequest
3 голосов
/ 02 марта 2020

Существует пакетный файл, который вызывает скрипт Powershell, и я создал ярлык для этого пакетного файла в папке запуска Windows, поэтому скрипт Powershell запускается каждый раз при запуске Windows. Я просто хочу знать, как мой скрипт Powershell может обнаружить во время выполнения, был ли он вызван пакетным файлом во время события запуска windows или был ли он вызван пакетным файлом, когда пользователь вручную запустил пакетный файл.

Ответы [ 3 ]

2 голосов
/ 02 марта 2020

Если при запуске пользователем он будет запускать только пакетный файл напрямую, а не через ярлык запуска, вы можете установить ярлык запуска для передачи аргумента пакету при запуске.

Щелкните правой кнопкой мыши Ярлык и выберите свойства. В поле назначения добавьте пробел, затем 1.

Например, если это было "C:\MyDir\MyScript.bat", измените его на "C:\MyDir\MyScript.bat" 1

. При запуске этого ярлыка запускается командный файл. , но также передайте пакетному файлу значение 1 в переменной %1

Далее, внутри вашего пакетного файла вверху (или там, где вы хотите) добавьте следующее.

@echo off
if "%1"=="1" (
   echo Hey I'm running at startup
)

Вы можете заменить строку echo командой, которую хотите запустить, если пакет запускался из ярлыка запуска.

0 голосов
/ 02 марта 2020

Попробуйте:

@echo off
wmic startup get command | find "%~f0" >nul && (
  echo I am running at startup!
)

Он использует wmi класс Win32_StartupCommand (в wmi c aliased startup, чтобы проверить, запускался ли файл bat при запуске.

0 голосов
/ 02 марта 2020

План A: удалить опцию у пользователя. Запустите файл .bat с помощью клавиши запуска.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

План B: может использоваться, если ваши потребности сложны.

# The time the script was ran
$runtime = get-date

# Starts when the user logs on
$LogonTime = (Get-Process explorer)[0].starttime

$differenceTime = New-TimeSpan -Start $logontime -End $runtime

If ($differenceTime.TotalMinutes -lt 1) {
    White-host "$env:USERNAME did not run it"
}
Else {
    Write-host "$env:USERNAME did run it"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...