Tenho uma pasta que contém 4 arquivos PowerShell, cada um com seus próprios 4 exes para chamar. Estou tentando fazer com que o arquivo 1 PowerShell grave no registro a chave runonce do 2º script e, em seguida, propague para baixo. Até agora, fiz com sucesso um script e um exe, deixando-me mais 3 para ir. Eu escrevi uma chave runonce com uma variável $cwd que é $PSScriptRoot, mas não preencherá o caminho na chave. Aparece como:
É assim que a entrada do registro se parece para execução única.
"powershell.exe -noexit "$cwd\main2.ps1" -ArgumentList "-path $cwd""
Quero que a entrada do registro fique assim:
"powershell.exe -noexit "C:\Test\test\main2.ps1" -ArgumentList "-path C:\Test\test""
Alguma ideia de como posso passar o caminho para o script a partir de uma variável no meu primeiro script do PowerShell?
Eu tentei e só consegui executar um script e exe. Além disso, consegui gravar a próxima chave no registro, mas não consegui executar o próximo script.
Versão melhorada:
"powershell.exe -noexit -File `"C:\Test\test\main2.ps1 -path C:\Test\test`""
Script do PowerShell
Este é o main0, e eu tenho main, main1, main2.
$homepath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
If(-NOT(Test-Path $homepath)){
New-Item $homepath -Force | Out-Null
}
$cwd = $PSScriptRoot
Set-ItemProperty $homepath (New-Guid) '
C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit "$cwd\\main.ps1" -ArgumentList "-path $cwd""
'
$name = (Get-ChildItem $cwd\*.exe | where {$_.Name -like "*exename*"}).FullName
start $name
Seu problema principal é que você está usando erroneamente uma string literal entre aspas simples (
'...'
) :Você precisa usar uma string expansível (interpolável) entre aspas duplas (
"..."
) se quiser que referências de variáveis, como$cwd
as incorporadas nela, sejam expandidas (interpoladas)."
caracteres dentro de"..."
, você deve escapá -los, como`"
, como mostrado abaixo, ou como""
.A CLI do PowerShell não tem um
-ArgumentList
parâmetro; em vez disso, especifique os argumentos de passagem diretamente após o argumento do arquivo de script (*.ps1
) passado para-File
.Portanto:
No contexto do seu script, usando a variante here-string de uma string expansível, caso em que
"
caracteres incorporados não precisam de escape: