Questão Entrada de menu de contexto de script do PowerShell para executar o script como administrador sem sair


Estou muito perto disso. Basicamente, eu quero criar uma entrada de menu de contexto para arquivos .ps1 que executam o script como administrador sem sair da janela do console após a execução. Então eu posso criar a chave:

Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.ps1\shell\RunasAdministratorNoExit

com os valores:

enter image description here

e isso é tudo bem e dandy para crio a entrada. No entanto, a fim de realmente torná-lo Faz algo, eu preciso adicionar outra chave, a chave de comando:

Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.ps1\shell\RunasAdministratorNoExit\command

E nessa chave, eu tenho algo que quase funciona, mas não é bem assim. Portanto, o valor padrão da chave de comando acima é:

Powershell.exe -WindowStyle Hidden -Command "& {Start-Process PowerShell.exe -Verb RunAs -ArgumentList '-NoLogo -NoExit -File """%1"""'}"

Mas tem um grande problema com este método; Quando o script termina, ele me retorna ao diretório "C: \ Windows \ system32" em vez do diretório do próprio script. Veja minha imagem abaixo para esclarecimentos:

enter image description here Além disso, quando uso a entrada do menu de contexto que criei para executar scripts contendo linhas como:

$settingsfiles = Get-ChildItem -Recurse $scanPath

Em vez de recorrer a todas as pastas locais para o script que acabei de executar, ele tenta recorrer a todas as pastas em "C: \ Windows \ system32!" Claramente isso é indesejado. Então aqui está a minha pergunta:

O que preciso alterar no valor padrão da chave de comando para que o script do PowerShell funcione como se fosse executado no mesmo diretório do script?


1


origem




Respostas:


Tente alavancar o ... Cmdlet Set-Location ou Push-Location ou o bloco de rascunho…

Script $ do Split-Path: MyInvocation.MyCommand.Path

... no seu comando final.

Ou apenas crie um novo atalho, configure como quiser e use o botão direito do mouse no menu SendTo, sem necessidade de hacks reg.

Veja este tópico mostrando a abordagem SendTo para o PowerShell.

Chaves de Limite do PowerShell Aceitas por Script de Pausa


1



A sintaxe é a parte que está me atrapalhando, com o comando set-location. Como eu incorporaria isso na entrada do registro enquanto continuaria passando o arquivo para o powershell para que o script original fosse executado? Eu basicamente preciso usar o comando -file e -file ao mesmo tempo, mas não tenho certeza se isso funciona. Você pode dar um exemplo? - jippyjoe4
Ok, eu percebi depois de ficar por muito tempo. As citações estavam me matando. Isso é o que a linha precisava ser: Powershell.exe -WindowStyle Hidden -Command "& {Iniciar-Processar powershell.exe -ArgumentList '-nologo -noexit -command" "& {set-location (split-path' '" " "% 1" "" '' -parent); & '' "" "% 1" "" ''} "" '-verb runAs} " - jippyjoe4
Feliz que tudo tenha funcionado. Sim, a citação pode ser um PTA. No entanto, um C & P rápido da sua linha no ISE ou no VSCode, ainda mostra erros de sintaxe. Você sabe, aquela coisa toda de codificação de cores gritando de volta do editor. Tudo a partir deste [% 1 "" "'' -parent); & ''" ""% 1 "" "''}" "'-verb runAs}"] mostra as cores erradas (roxo vs vermelho carmesim) para estar no bloco de comando. Então, um pouco estranho, está funcionando como está. No entanto, se for, isso é tudo o que importa. Vou ter que brincar com isso para dizer com certeza. - postanote