簡體   English   中英

如何檢測調用powershell腳本的批處理文件是否由Windows啟動事件運行

[英]How to detect if batch file that calls powershell script was run by Windows startup event or not

有一個調用 Powershell 腳本的批處理文件,我在 Windows 啟動文件夾中創建了該批處理文件的快捷方式,因此每次 Windows 啟動時,Powershell 腳本都會運行。 我只想知道我的 Powershell 腳本如何在運行時檢測它是否在 Windows 啟動事件期間被批處理文件調用,或者當用戶手動運行批處理文件時它是否被批處理文件調用。

如果用戶運行時他們只會直接運行批處理文件而不是通過啟動快捷方式,那么您可以設置啟動快捷方式以在運行時將參數傳遞給批處理。

右鍵單擊快捷方式並選擇屬性。 在目標字段中,添加一個空格,然后添加1

例如,如果它是"C:\\MyDir\\MyScript.bat" ,請將其更改為"C:\\MyDir\\MyScript.bat" 1

當您運行此快捷方式時,它將啟動批處理文件,但也會將變量%1的值1傳遞給批處理文件

接下來,在頂部的批處理文件中(或您想要的任何位置)添加以下內容。

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

如果 Batch 是從啟動快捷方式運行的,則可以將echo行替換為要運行的命令。

方案A:從用戶中刪除選項。 從它們的運行鍵啟動 .bat 文件。

HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run

Plan 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"
}

嘗試這個:

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

它使用 wmi 類 Win32_StartupCommand(在 wmic 別名startup中檢查 bat 文件是否在啟動時運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM