有一个调用Powershell脚本的批处理文件,我在Windows启动文件夹中创建了该批处理文件的快捷方式,因此Powershell脚本在Windows每次启动时都会运行。我只想知道Powershell脚本如何在运行时检测到它是在windows启动事件期间被批处理文件调用的,还是在用户手动运行批处理文件时被批处理文件调用的。
发布于 2020-03-02 12:49:55
如果由用户运行时,它们只会直接运行批处理文件,而不是通过启动快捷方式,那么您可以设置启动快捷方式,以便在运行时将参数传递给批处理。
右键单击快捷方式,然后选择属性。在目标字段中,添加一个空格,然后单击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行替换为要运行的命令。
发布于 2020-03-02 13:23:53
计划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"
}发布于 2020-03-02 16:31:15
试试这个:
@echo off
wmic startup get command | find "%~f0" >nul && (
echo I am running at startup!
)它使用WMI类Win32_StartupCommand (在wmic别名的startup中)来检查bat文件在启动时是否正在运行。
https://stackoverflow.com/questions/60482543
复制相似问题