Então eu decidi criar este script do Powershell.
projeto do Github aqui .
Versão com a captura dos argumentos do processo também
As ações realizadas:
- Excluir o arquivo anterior.
- Verifique os processos em execução.
- Filtre a lista pelo caminho que contém uma palavra específica ( Programa ), que pressupõe que todos os programas estejam instalados em Arquivos de programas ou Arquivos de programa (x86)
- Obtenha os caminhos absolutos para executáveis de processos que foram encontrados
- Gravar caminhos para o arquivo temporário no diretório temporário.
- Mova o arquivo temporário para o diretório de destino que está na pasta de inicialização do usuário.
Prós:
- Escrito em powershell, então o código é nativo e deve funcionar em
Windows Vista e acima.
- Obras.
Contras:
-
Programas instalados em outro caminho - não em arquivos de programa -
não é pego nesta versão. Isso é obviamente necessário para evitar o início de processos nativos do Windows como o explorer.exe e assim por diante. No entanto, se você tem um caminho como
D:\Apps
onde você também instala programas, você pode modificar a linha
$ _. Path -match "Programa"
para
$ .Path -match "Programa" -ou $ .Path -match "D: \ Apps"
e funcionará do mesmo jeito.
Agora, o código do script:
###############################
# AUTOMATIC STARTUP GENERATOR #
# ASGEN v.1.0 by mnmnc @ 2014 #
###############################
# VARIABLES
# CURRENT PATH
$current = $(pwd).ToString()
# DESTINATION PATH
$destination_path = "$env:userprofile\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\programs.bat"
# MOVING TO TEMP
cd $env:systemroot\Temp
# REMOVING OLD FILE
del $destination_path
# EMPTY ARRAYS
$arr_names = @()
$arr_paths = @()
# FILLING ARRAYS
Get-Process | Where-Object {$_.Path -match "Program" } | foreach { $arr_names += $_.Name; $arr_paths += $_.Path }
# CREATING FILE
for($i = 0; $i -le $arr_names.count -1; $i++)
{
$out = "'"" + $arr_paths[$i] + "'""
write-output $out | out-file "programs.bat" -append -Encoding ascii
}
# INFO
Write-host "'nFolowwing programs will be started on next boot:'n"
cat programs.bat
Write-host "'n"
# MOVING TO STARTUP FOLDER
mv programs.bat "$destination_path"
# RETURNING
cd $current
exit
Simpy copie este código e cole-o no arquivo shutdown.ps1
em sua área de trabalho. Salve e feche este arquivo. Agora crie um segundo arquivo shutdown.bat
e coloque o código
powershell shutdown.ps1
shutdown -s -t 1
neste arquivo. Salve e feche o arquivo bat. Agora você pode mover os dois arquivos para o diretório preferido. Depois disso, você pode clicar com o botão direito do mouse em um arquivo bat e criar um atalho para este arquivo. Em seguida, clique com Botão direito do mouse em um atalho desta vez e escolha Pin to Start Menu . Isso adicionará o atalho ao seu menu Iniciar.
Agora, toda vez que você quiser fechar o PC e salvar os programas em execução para uma inicialização automática após a inicialização, você poderá usar esse atalho.
Editar - Incluindo argumentos da linha de comando
Como você também deseja salvar os argumentos da linha de comando do processo, é necessário alterar as seções Matrizes de preenchimento e Criar arquivo para:
# FILLING ARRAYS
Get-WmiObject Win32_Process | Where-Object { $_.Path -match "Program" } | foreach { $arr_names += $_.Name; $arr_paths += $_.CommandLine; }
# CREATING FILE
for($i = 0; $i -le $arr_names.count -1; $i++)
{
$out = $arr_paths[$i]
write-output $out | out-file "programs.bat" -append -Encoding ascii
}
A mudança é com o uso do WMI agora, em vez de get-process. Além disso, as aspas devem ser omitidas desta vez.
Aviso
Caso você tenha um erro ao executar o script, você provavelmente terá uma configuração incorreta para a política de execução do PowerShell. Para alterar isso, você deve abrir o console do powershell como administrador e digitar Set-ExecutionPolicy Unrestricted
e digitar Y
quando solicitado a confirmar. É isso aí. Deve funcionar bem.